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

Jboss 在Eclipse中开始使用Drools 6.0.0 Final时获得NPE,jboss,drools,rules,Jboss,Drools,Rules,入门(没有Maven)我首先在eclipse中安装了GEF和Drools 6.0.0最终插件。 然后我创建了一个Drools项目,它生成了下面的两个文件 KieSession kSession = kContainer.newKieSession("ksession-rules"); DroolsTest.java package com.sample; import org.kie.api.KieServices; import org.kie.api.runtime.KieContain

入门(没有Maven)我首先在eclipse中安装了GEF和Drools 6.0.0最终插件。 然后我创建了一个Drools项目,它生成了下面的两个文件

KieSession kSession = kContainer.newKieSession("ksession-rules");
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;
    }

}

}
KieSession kSession = kContainer.newKieSession("ksession-rules");
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
KieSession kSession = kContainer.newKieSession("ksession-rules");
我在
kSession.insert(message)获得NPE显然是因为此处缺少会话规则

KieSession kSession = kContainer.newKieSession("ksession-rules");
当我对这个项目进行mavenize并将其作为maven测试运行时,我得到了同样的结果。 我注意到一些ppl已经经历了这一点,并且指向类路径问题,但我仍然不清楚解决方案

KieSession kSession = kContainer.newKieSession("ksession-rules");
mvn eclipse:eclipse也没有帮助

KieSession kSession = kContainer.newKieSession("ksession-rules");
链接我已经通过了

KieSession kSession = kContainer.newKieSession("ksession-rules");

  • 在github中浏览Drools 6.0.0之后,我看到一个文件kModule.xml应该存在,其中会话名“ksession rules”与一个规则绑定。未生成此文件(错误??)

    KieSession kSession = kContainer.newKieSession("ksession-rules");
    
    然而,为了获得更好的社区支持和良好的文档,我将降级到5.6.0

    KieSession kSession = kContainer.newKieSession("ksession-rules");