<div>Hi,<br><br>I've been banging my head against this for days and just can't get it<br>to work. At this point I'd like to just get the example code working.<br> I've got a simple class that is currently being driven by a JUnit<br>
test case. I just want to create a Process flow and execute it. I<br>don't care what it does at this point. Hello world level stuff.<br><br>My method under test:<br><br> public String runFlow() throws Exception {<br>
<br> RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("org.drools.process");<br> factory<br> // header<br> .name("My process").packageName("org.drools")<br>
// nodes<br> .startNode(1).name("Start").done()<br> .actionNode(2).name("Action")<br> .action("java", "System.out.println(\"Hello World\");").done()<br>
.endNode(3).name("End").done()<br> // connections<br> .connection(1, 2)<br> .connection(2, 3);<br><br> RuleFlowProcess process = factory.validate().getProcess();<br>
<br> KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();<br> KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(knowledgeBase);<br><br> Package pkg = new Package("package1");<br>
pkg.addProcess(process);<br> RuleBase ruleBase = RuleBaseFactory.newRuleBase();<br> ruleBase.addPackage(pkg);<br><br> Collection<KnowledgePackage> kpackages = builder.getKnowledgePackages();<br>
KnowledgePackage kpackage = new KnowledgePackageImp(pkg);<br> kpackages.add(kpackage);<br> knowledgeBase.addKnowledgePackages(kpackages);<br><br> StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession();<br>
<br> KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);<br><br> ksession.startProcess("org.drools.process");<br><br> return "foo";<br> }<br><br>
When I run this process, I get an exception when the Action node is<br>run. It is a NPE and it happens because the metaData map in the<br>underlying ActionNode does not contain a KVP for "Action". It looks<br>
like that KVP is added in in the DroolsAction class when the public<br>void wire(Object object) method is called. Unfortunately, I can't<br>figure out what causes that method to be called. I'm pretty sure my<br>
problem is with the set up of my knowledge base (the call to new<br>KnowledgePackageImp() is suspect), but I can't figure out how to set<br>up the knowledge base when building a RuleFlowProcess using the<br>RuleFlowProcessFactory. None of the examples I can find show how to<br>
do this.<br><br>Note that if I take out the Action node and just have Start and End<br>nodes, it works fine.<br><br>I am using Drools 5.1.0, but it doesn't work with Drools 5.0.1 either.<br><br>Any help would be appreciated. The flat spot on my forehead is<br>
getting flatter every day I continue to bang my head against the wall.<br><br>Here's the output (including KnowledgeRuntimeLogger output):<br><br>BEFORE RULEFLOW STARTED process:My process[id=org.drools.process]<br>BEFORE RULEFLOW NODE TRIGGERED node:Start[id=1] process:My<br>
process[id=org.drools.process]<br>null process:My process[id=org.drools.process]<br>BEFORE RULEFLOW NODE TRIGGERED node:Action[id=2] process:My<br>process[id=org.drools.process]<br><br>java.lang.RuntimeException: unable to execute Action<br>
at org.drools.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:56)<br> at org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:117)<br> at org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:178)<br>
at org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:144)<br> at org.drools.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:49)<br> at org.drools.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:41)<br>
at org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:117)<br> at org.drools.ruleflow.instance.RuleFlowProcessInstance.internalStart(RuleFlowProcessInstance.java:32)<br> at org.drools.process.instance.impl.ProcessInstanceImpl.start(ProcessInstanceImpl.java:192)<br>
at org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:309)<br> at org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1644)<br> at org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1622)<br>
at org.drools.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledgeSessionImpl.java:301)<br> at com.proferi.epm.process.DroolsFlowManager.runFlow(DroolsFlowManager.java:75)<br> at com.proferi.epm.process.DroolsFlowManagerTest.testRunFlow(DroolsFlowManagerTest.java:33)<br>
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br>
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)<br> at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)<br> at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)<br>
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)<br> at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)<br> at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)<br>
at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)<br> at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)<br> at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)<br>
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)<br> at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)<br> at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)<br>
at org.junit.runner.JUnitCore.run(JUnitCore.java:130)<br> at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:64)<br>Caused by: java.lang.NullPointerException<br> at org.drools.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:54)<br>
... 34 more<br clear="all"></div>
<div> </div>
<div>Regards,<br><br>Dan Nathanson<br><br></div>