[rules-users] Some Problem with drools-persistence-jpa Library

tangrui.cn at gmail.com tangrui.cn at gmail.com
Mon Nov 8 03:33:39 EST 2010


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 at 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 at 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-Not-Working-td1453738.html),
>>     but it seems that he solved this problem by using a custom command.
>>
>>     Thank you!
>>
>>     --
>>     唐睿
>>
>>
>>
>>
>> --
>> 唐睿
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>
>

-- 
从我的移动设备发送

唐睿




More information about the rules-users mailing list