[rules-users] Process instance status not completing when using JPA.

Kris Verlaenen kris.verlaenen at cs.kuleuven.be
Tue Mar 8 20:19:14 EST 2011


Dan,

Once you start using persistence, you should know that the process 
instance you are retrieving is no longer the internal process instance 
but a version of the process instance at the moment you requested it.  
This process instance however is disconnected, meaning that it will not 
automatically update when the internal process instance changes.  The 
main reason is that, when using persistence, process instances can be 
removed and reloaded from database at any time, so you basically get a copy.

If you register a listener that listens for process instance completion 
right before inserting the list in testPersistenceState(), you will 
notice that this process instance gets completed and that the process 
instance state of the internal process instance is set to completed.  
The copy you still have from before still is in active state though.  
Since process instances that are completed are also removed from 
persistence as no longer necessary, you can't get the process instance 
in state completed.  That's why we test whether a process instance is 
completed by checking it is null when we try to retrieve it.  Another 
option would be to use a history logger of course.

Kris

Dan Nathanson wrote:
> More info...
>
> This behavior is reproducible in the Drools JPA test cases. 
>
> In 
> org.drools.persistence.session.PersistentStatefulSessionTest.testPersistenceState() 
> and testPersistenceRuleSet(), if you add a breakpoint before loading 
> the processInstance the last time (when it is null because the process 
> has "completed"), you can see that processInstance.getState() returns 
> 1 (ACTIVE) instead of 2 (COMPLETE).  I added the ConsoleLogger to the 
> ksession and can see the "AFTER RULEFLOW COMPLETED" log message.
>
> In the other test cases, the state is correctly set to 2 after the 
> process completes.
>
> On Mon, Mar 7, 2011 at 11:21 AM, Dan Nathanson <dan at ddnconsulting.com 
> <mailto:dan at ddnconsulting.com>> wrote:
>
>     Hi,
>
>     I'm seeing some odd behavior in Drools Flow 5.1.1.  When using JPA
>     and creating a StatefulKnowledgeSession using
>     JPAKnowledgeService.newStatefulKnowledgeSession(), processes look
>     like they run to completion, but calling
>     RuleFlowProcessInstance.getState() on process instances created
>     froim this knowledge session returns 1 (STATE_ACTIVE).  Calling
>     getActiveNodeIds() throws a NullPointerException.
>
>     If I get a StatefulKnowledgeSession without JPA by calling
>     KnowledgeBase.newStatefulKnowledgeSession(), getState() returns 2
>     (STATE_COMPLETED).
>
>     I added
>     KnowledgeRuntimeLoggerFactory.newConsoleLogger(knowledgeSession)
>     and can see in both cases that the process is complete.
>
>     Has this been seen before?  Is it a known bug?  Am I doing
>     something wrong?
>
>     Regards,
>
>     Dan Nathanson
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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