我的项目中的Drools规则没有触发。我检查了官方文档和教程(不仅是官方文档),一无所获。
这是我的规则:
package iwium.rules
import iwium.*;
rule "One"
when
$var : State();
then
$var.setName("fired!");
System.out.println("fired!");
end
这就是我如何编制规则并解雇它们:
public void run()
{
createKnowledgeBase();
//I do need to use it in infinite loop
while (true)
{
kSession = kBase.newStatefulKnowledgeSession();
State state = new State();
kSession.insert(state);
kSession.fireAllRules();
//to check if rule fired
for (Object o: kSession.getObjects()) {
if(o instanceof State) {
State rs = (State) o;
if(rs.getName().length() > 1)
System.out.println("done");
}
}
kSession.dispose();
}
}
private void createKnowledgeBase()
{
this.kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
this.kBuilder.add(ResourceFactory.newClassPathResource(RULES_FILE), ResourceType.DRL);
if (kBuilder.hasErrors())
{
System.err.println(kBuilder.getErrors().toString());
}
kBase = KnowledgeBaseFactory.newKnowledgeBase();
kBase.addKnowledgePackages(kBuilder.getKnowledgePackages());
}
输出为空。
我还在调试器中检查过规则编译是否正确。
有谁知道这里可能出现什么问题?为什么这条规则没有解雇?