Java 流口水不能开火
我的项目中的Drools规则没有启动。我查看了官方文档和教程(不仅仅是官方的),没有发现任何东西 这是我的规则:Java 流口水不能开火,java,drools,Java,Drools,我的项目中的Drools规则没有启动。我查看了官方文档和教程(不仅仅是官方的),没有发现任何东西 这是我的规则: package iwium.rules import iwium.*; rule "One" when $var : State(); then $var.setName("fired!"); System.out.println("fired!"); end 这就是我遵守规则并解雇他们的方式: public vo
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());
}
输出为空。
我还检查了调试器是否正确编译了规则
有人知道这里有什么问题吗?为什么这个规则没有触发?当你说它没有触发时,你的意思是
System.out.println(“fired!”)代码>行未被写入?或者变量的值没有改变?另外,正在插入的状态是否是iwium.State
的一个实例?没有打印任何内容,也没有设置变量(在调试器和fireAllRules()下面的这个循环中检查)State
是iwium.State
的实例。当你说它没有启动时,你的意思是System.out.println(“启动”)代码>行未被写入?或者变量的值没有改变?另外,正在插入的状态是否是iwium.State
的一个实例?没有打印任何内容,也没有设置变量(在调试器和fireAllRules()下面的这个循环中检查)State
是iwium.State
的实例。当你说它没有启动时,你的意思是System.out.println(“启动”)代码>行未被写入?或者变量的值没有改变?另外,正在插入的状态是否是iwium.State
的一个实例?没有打印任何内容,也没有设置变量(在调试器和fireAllRules()下面的这个循环中检查)State
是iwium.State
的实例。