在Eclipse中开始使用Drools 6.0.0 Final时获得NPE

时间:2014-03-21 02:36:42

标签: jboss drools rules

入门(没有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. Getting null pointer exception while running helloworld in drools
  2. Unknown KieSession name in drools 6.0 (while trying to add drools to existing maven/eclipse project)

1 个答案:

答案 0 :(得分:0)

在github中通过Drools 6.0.0之后,我看到一个文件kModule.xml应该出现在会话名称" ksession-rules"绑定规则。这个文件没有生成(bug ??)

然而,我降级到5.6.0以获得更好的社区支持和良好的文档。