[rules-users] Problem with JPA session persistence in Drools Flow (5.0.1)

Mark Proctor mproctor at codehaus.org
Wed Jul 8 08:39:56 EDT 2009


Can you open a JIRA for this, and we'll make sure it's done in the next 
few weeks:
https://jira.jboss.org/jira/browse/JBRULES

thanks

Mark

Alan.Gairey at tessella.com wrote:
>
> I'm currently using Drools Flow with JPA session persistence enabled 
> as described in section 5.1 of the User Guide.
>
> As a process executes, session information is saved to the H2 database 
> correctly.
>
> The problem comes if a process only executes part way through, and I 
> then try to finish the process by recreating a session using the code:
>
> // recreate the session from database using the sessionId
> ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( 
> sessionId, kbase, null, env );
>
> This gives me a NullPointerException.
>
> Having looked into the Drools Flow source code, I think the problem is 
> in the class 
> drools-persistence-jpa\src\main\java\org\drools\persistence\session\SingleSessionCommandService.java. 
>
>
> The 4th constructor of this class is called as part of the loading of 
> a knowledge session from the H2 database; this in turn leads to the 
> afterCompletion method of the inner class SynchronizationImpl being 
> called. The final two lines of this method are:
>
> ((JPAProcessInstanceManager) ((ReteooWorkingMemory) 
> session).getProcessInstanceManager()).clearProcessInstances();
> ((JPAWorkItemManager) ((ReteooWorkingMemory) 
> session).getWorkItemManager()).clearWorkItems();
>
> However, when called via the route described above, the session member 
> variable of SingleSessionCommandService has not been set, thus causing 
> the NullPointerException.
>
> (Interestingly, running the unit tests for drools-persistence-jpa does 
> result in the NullPointerException being thrown multiple times, 
> although the tests are still listed as having passed.)
>
> I believe enclosing the above two lines as follows will fix the problem:
>
> if (session != null) {
>     ((JPAProcessInstanceManager) ((ReteooWorkingMemory) 
> session).getProcessInstanceManager()).clearProcessInstances();
>     ((JPAWorkItemManager) ((ReteooWorkingMemory) 
> session).getWorkItemManager()).clearWorkItems();
> }
>
> Also, in the 4th constructor of SingleSessionCommandService, after the 
> session has been set, the following line needs to be added to ensure 
> the session id is the same as the session info id:
>
> ((ReteooStatefulSession) this.session).setId( this.sessionInfo.getId() );
>
> (This line is present at the end of the 3rd constructor.)
>
> It would be great if this fix could make it into the Drools 5.1 release.
>
> Thanks.
>
>
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090708/6fb6c772/attachment.html 


More information about the rules-users mailing list