Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting null pointer exception while running helloworld in drools

I got the following error while running a simple helloworld sample drools project.

199 [main] ERROR org.drools.compiler.kie.builder.impl.KieContainerImpl - Unknown KieSession name: ksession-rules
java.lang.NullPointerException
    at com.sample.DroolsTest.main(DroolsTest.java:24)

Code:

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;
        }

    }

}

drools code:

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
like image 987
akshitmahajan Avatar asked Dec 01 '22 17:12

akshitmahajan


2 Answers

It looks drools kie-api/internal library execution looks for mandatory values under src\main\resources\META-INF\maven\pom.properties file for the drools eclipse project.

Updating my pom.xml or pom.properties into below content worked fine on 6.0.0 drools distribution.

groupId=com.test.sample.drools
artifactId=DroolsTestProject
version=1
like image 163
Saravanan Thangavel Avatar answered Dec 25 '22 12:12

Saravanan Thangavel


I recently started with JBPM and ran into a similar problem. I had two issues that needed to be sorted out.

First I need to create the pom.properties file that was listed in Another answer in this thread. I had to create the src/main/resources/META-INF/maven/pom.properties file since it was not automatically generated when I created a new JBPM Maven project through eclipse. The file should have the following information, which should match your project's pom file:

groupId=com.sample
artifactId=jbpm-example
version=1.0.0-SNAPSHOT

The other issue I ran into was having a blank kmodule.xml. This should be in src/main/resources/META-INF/kmodule.xml. You will need the following in the file:

<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="process" packages="process">
        <ksession name="ksession-process"/>
    </kbase>
</kmodule>

If you look at the newKieSession method parameter, it need to match the "name" attribute of the ksession element. The "packages" attribute of the kbase element needs to match the package name where you DRL files are located.

like image 21
Mike Avatar answered Dec 25 '22 12:12

Mike