-
Bug
-
Resolution: Done
-
Major
-
jBPM 6.0.0.Final
-
None
-
None
-
Low
The problem is that the command scoped persistence context has not been initialized because
- reloading the snapshot occurs in the initKsesion of the SingleSessionCommandService – and is not part of a "command".
- but the process instance manager tries to retrieve the process instance info object via the process persistence context manager – which uses a command scoped entity manager.
Place the attached test in the org.jbpm.bpmn2 package of the jbpm-bpmn2/src/main/java source folder in order to run.
The following stack trace is thrown by the attached test:
java.lang.RuntimeException: Unable to load session snapshot at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:96) at org.drools.persistence.SingleSessionCommandService.initKsession(SingleSessionCommandService.java:238) at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:191) ... at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:101) at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.loadStatefulKnowledgeSession(KnowledgeStoreServiceImpl.java:84) at org.drools.persistence.jpa.JPAKnowledgeService.loadStatefulKnowledgeSession(JPAKnowledgeService.java:131) at org.jbpm.bpmn2.IssueTest.restoreSession(IssueTest.java:xxx) at org.jbpm.bpmn2.IssueTest.testReloadProcessInstanceAfterReloadingKnowledgeSession(IssueTest.java:xxx) Caused by: java.lang.NullPointerException at org.jbpm.persistence.JpaProcessPersistenceContext.findProcessInstanceInfo(JpaProcessPersistenceContext.java:26) at org.jbpm.persistence.processinstance.JPAProcessInstanceManager.getProcessInstance(JPAProcessInstanceManager.java:77) at org.jbpm.marshalling.impl.ProcessInstanceResolverStrategy.read(ProcessInstanceResolverStrategy.java:71) at org.drools.marshalling.impl.InputMarshaller.readFactHandle(InputMarshaller.java:445) at org.drools.marshalling.impl.InputMarshaller.readFactHandles(InputMarshaller.java:371) at org.drools.marshalling.impl.InputMarshaller.readSession(InputMarshaller.java:222) at org.drools.marshalling.impl.InputMarshaller.readSession(InputMarshaller.java:185) at org.drools.marshalling.impl.DefaultMarshaller.unmarshall(DefaultMarshaller.java:93) at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:91) ... 37 more
The problem can be fixed by making sure that the (JPA) process instance manager initializes ("begins") the cmd scoped persistence context before retrieving a process instance (info) object.