This code works if i try to call the Rules alone from KIE Workbench.... ITs firing the rules everything is working with-out Process. When i try to call the JBPM Process withnewKieSession.StartProcess("***Process Name");* Im getting this error. Somebody please help....
package com.sample; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import org.drools.compiler.kproject.ReleaseIdImpl; import org.drools.core.event.DebugAgendaEventListener; import org.drools.core.event.DebugRuleRuntimeEventListener; import org.drools.core.io.impl.UrlResource; import org.drools.core.marshalling.impl.ProtobufMessages.KnowledgeBase; import org.kie.api.KieBase; import org.kie.api.KieBaseConfiguration; import org.kie.api.KieServices; import org.kie.api.builder.KieModule; import org.kie.api.builder.KieRepository; import org.kie.api.builder.KieScanner; import org.kie.api.cdi.KSession; import org.kie.api.conf.EventProcessingOption; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieRuntime; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.KieSessionConfiguration; import org.kie.api.runtime.StatelessKieSession; import org.kie.internal.KnowledgeBaseFactory; import org.kie.internal.agent.KnowledgeAgent; import org.kie.internal.agent.KnowledgeAgentConfiguration; import org.kie.internal.agent.KnowledgeAgentFactory; import org.kie.internal.command.CommandFactory; import org.kie.internal.io.ResourceFactory; import org.kie.internal.runtime.StatefulKnowledgeSession; import com.thoughtworks.xstream.core.util.Base64Encoder;
public class DroolsTest { public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub // works even without -SNAPSHOT versions
ReleaseIdImpl releaseId = new ReleaseIdImpl("Release ID with all the details** Version, Artifact and GroupID ");
KieServices ks = KieServices.Factory.get();
ks.getResources().newUrlResource(url);
KieContainer kieContainer = ks.newKieContainer(releaseId); // check every 5 seconds if there is a new version at the URL KieScanner kieScanner = ks.newKieScanner(kieContainer);
kieScanner.start(5000L); // alternatively: // kieScanner.scanNow();
Scanner scanner = new Scanner(System.in);
while (true) { runRule(kieContainer);
System.out.println("Press enter in order to run the test again....");
scanner.nextLine();
}
}
private static void runRule(KieContainer kieKontainer) { StatelessKieSession kSession = kieKontainer.newStatelessKieSession("testSession");
kSession.setGlobal("out", System.out);
kSession.execute("testRuleAgain"); }*/
String userpassword = "admin:admin";
String url = "http://localhost:8989/jbpm-console/maven2/com/****Project in KIE work bench"; HttpURLConnection httpURLConnection = (HttpURLConnection)new URL(url).openConnection();
String authEnc = new Base64Encoder().encode(userpassword.getBytes());
httpURLConnection.setRequestProperty("Authorization", "Basic "+ authEnc);
KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
InputStream is = httpURLConnection.getInputStream();
KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));
KieSessionConfiguration conf= ks.newKieSessionConfiguration();
//Initiate POJO on which you want to define rule like Employee emp1 = new Employee(2,"A1",5001); //emp1.setId(1); //emp1.setName("Amba"); //emp1.setSalary(1000);
//ReleaseIdImpl releaseId = new ReleaseIdImpl("com.agileidc.primed", "Primed_Project", "1.0"); System.out.println("Test");
KieContainer kieContainer = ks.newKieContainer(kModule.getReleaseId()); //KieContainer kieContainer = ks.getKieClasspathContainer();
System.out.println("Test");
KieScanner kScanner = ks.newKieScanner(kieContainer); kScanner.start(10000L); /* KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession();*/ //StatelessKieSession kSession = kieContainer.newStatelessKieSession( "TestingSession",conf); //kSession.setGlobal("out", System.out); //kSession.execute("TestRule"); System.out.println("Before firing");
KieSession newKieSession = kieContainer.newKieSession(); //Insert into kieSession newKieSession.insert(emp1); Employee emp2 = new Employee(1,"A2",5000); //emp2.setId(1); //emp2.setName("Amba"); //emp2.setSalary(1000); newKieSession.insert(emp2);
emp2 = new Employee(1,"A3",5001); //emp2.setId(1); //emp2.setName("Amba"); //emp2.setSalary(1000); newKieSession.insert(emp2);
int result = newKieSession.fireAllRules();
newKieSession.startProcess("Process1");
System.out.println("Result => "+result+"Number of rules fired="+result+"newKieSession.getFactCount()===>"+newKieSession.getFactCount());
newKieSession.dispose(); System.out.println("Finish");
}
}
*Error is *
Before firing 18:47:42.009 [main] WARN o.d.c.k.b.impl.AbstractKieModule - No files found for KieBase defaultKieBase 18:47:42.118 [main] DEBUG o.drools.core.impl.KnowledgeBaseImpl - Starting Engine in PHREAK mode
****Actual Error****
Exception in thread "main" java.lang.NullPointerException at org.drools.core.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledge SessionImpl.java:1896) at com.sample.DroolsTest.main(DroolsTest.java:152)