Thank you, Kris, this works well.
But I think when using pi.signalEvent under persistence environment, a
more reasonable exception other than NPE would better be used! This is
really confused if I don't know the truth.
2010/11/8, Kris Verlaenen <kris.verlaenen(a)cs.kuleuven.be>:
Hi,
If you use persistence, you should use ksession.signalEvent(type, event,
processInstanceId) instead of signaling the process instance itself.
The reason is that, if you're using persistence, the state of the
process instance is stored in the database after processing and the
process instance is disconnected (that is why the working memory is
null). The process instance object that you are receiving is just a
value object (and can for example be sent to a remote machine like the
client side). If you use the signalEvent method on the session, the
process instance will be reloaded and reconnect again, so I think that
should solve your issue.
Kris
tangrui.cn(a)gmail.com wrote:
> And another tip is that after ksession.startProcess, I get a
> ProcessInstance pi, but
>
> ProcessInstance pi = ksession.startProcess("com.zyeeda.system.TestFlow");
> org.drools.process.instance.ProcessInstance pi2 =
> (org.drools.process.instance.ProcessInstance) pi;
> pi2.getWorkingMemory() // this one returns null
>
> Is this a bug or my usage problem?
>
> On Sun, Nov 7, 2010 at 5:51 PM, tangrui.cn
> <
http://tangrui.cn>@gmail.com <
http://gmail.com> <tangrui.cn
> <
http://tangrui.cn>@gmail.com <
http://gmail.com>> wrote:
>
> Hi list,
>
> The attachment is a very simple test case to demonstrate an
> application using Drools Persistence JPA (5.1.1).
>
> Usage:
>
> 1. set up a mysql database called framework
> 2. set the user/password are root/root (or change the
> bitronix-datasources.properties file)
> 3. run maven test
>
> The core lines are as following:
>
> StatefulKnowledgeSession ksession =
> JPAKnowledgeService.newStatefulKnowledgeSession(kbase, conf, env);
> ProcessInstance pi =
> ksession.startProcess("com.zyeeda.system.TestFlow");
> pi.signalEvent("signal", "goon");
>
> When executing the 3rd line, an exception occurred
>
> java.lang.NullPointerException
> at
>
>
org.drools.process.instance.impl.ProcessInstanceImpl.getProcess(ProcessInstanceImpl.java:67)
> at
>
>
org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.getWorkflowProcess(WorkflowProcessInstanceImpl.java:185)
> at
>
>
org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:346)
> at com.zyeeda.test.AppTest.testProcessPersistence(AppTest.java:84)
>
> I've headed into the code and find that some working memory
> related to the ProcessInstanceImpl is null.
>
>
(drools-core/src/main/java/org/drools/process/instance/impl/ProcessInstanceImpl.java)
>
> But I cannot get why this does happen. Please give me some tips.
>
> I tried to google some solutions, but find only this one
>
>
(
http://drools-java-rules-engine.46999.n3.nabble.com/Drools-Flow-Events-No...),
> but it seems that he solved this problem by using a custom command.
>
> Thank you!
>
> --
> 唐睿
>
>
>
>
> --
> 唐睿
> ------------------------------------------------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>