Uploaded image for project: 'jBPM'
  1. jBPM
  2. JBPM-3447

ProcessInstanceManager can not retrieve ProcessInstanceInfo after knowledge session reload because cmd scoped per. ctx. is empty

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • jBPM 5.2
    • jBPM 6.0.0.Final
    • None
    • None
    • Low

    Description

      The problem is that the command scoped persistence context has not been initialized because

      1. reloading the snapshot occurs in the initKsesion of the SingleSessionCommandService – and is not part of a "command".
      2. 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.

      Attachments

        Activity

          People

            marco.rietveld Marco Rietveld (Inactive)
            marco.rietveld Marco Rietveld (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: