Getting started (Without Maven) 我在eclipse中首次安装了GEF和Drools 6.0.0最终插件 . 然后我创建了一个Drools项目,它生成了下面的两个文件 .
DroolsTest.java
package com.sample;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
/**
* This is a sample class to launch a rule.
*/
public class DroolsTest {
public static final void main(String[] args) {
try {
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
// go !
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
kSession.insert(message);
kSession.fireAllRules();
} catch (Throwable t) {
t.printStackTrace();
}
}
public static class Message {
public static final int HELLO = 0;
public static final int GOODBYE = 1;
private String message;
private int status;
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public int getStatus() {
return this.status;
}
public void setStatus(int status) {
this.status = status;
}
}
}
Sample.drl
package com.sample
import com.sample.DroolsTest.Message;
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
rule "GoodBye"
when
Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( myMessage );
end
由于缺少 ksession-rules ,我在 kSession.insert(message);
得到了NPE
KieSession kSession = kContainer.newKieSession("ksession-rules");
当我为这个项目编写mavenize并将其作为maven测试运行时,我得到同样的东西 . 我注意到一些人已经经历过这个并且指向类路径问题,但我仍然不清楚解决方案 .
mvn eclipse:eclipse 也没有帮助 .
链接我已经通过了
1 回答
在github中通过Drools 6.0.0之后,我看到一个文件kModule.xml应该出现,其中会话名称“ksession-rules”与规则相关联 . 这个文件没有生成(bug ??)
然而,我正在降级到5.6.0以获得更好的社区支持和良好的文档 .