JBPM 5.4: NullPointerException in WorkflowProcessInstanceImpl
vincentdhs Jan 15, 2014 5:13 PMHi there,
we currently facing issues were we try to get ProcessInstances from StatefulKnowledgeSession by method-calls to:
(WorkflowProcessInstance) statefulKnowledgeSession.getProcessInstance(processInstanceId);
For a couple of ProcessInstances we the following stacktrace:
17:27:02,015 ERROR [org.drools.persistence.SingleSessionCommandService] (http--127.0.0.1-8080-6) Could not commit session: java.lang.NullPointerException
at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.setState(WorkflowProcessInstanceImpl.java:252) [jbpm-flow-5.4.0.Final.jar:5.4.0.Final]
at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.setState(WorkflowProcessInstanceImpl.java:269) [jbpm-flow-5.4.0.Final.jar:5.4.0.Final]
at org.jbpm.marshalling.impl.AbstractProtobufProcessInstanceMarshaller.readProcessInstance(AbstractProtobufProcessInstanceMarshaller.java:377) [jbpm-flow-5.4.0.Final.jar:5.4.0.Final]
at org.jbpm.persistence.processinstance.ProcessInstanceInfo.getProcessInstance(ProcessInstanceInfo.java:142) [jbpm-persistence-jpa-5.4.0.Final.jar:5.4.0.Final]
at org.jbpm.persistence.processinstance.JPAProcessInstanceManager.getProcessInstance(JPAProcessInstanceManager.java:91) [jbpm-persistence-jpa-5.4.0.Final.jar:5.4.0.Final]
at org.jbpm.process.instance.ProcessRuntimeImpl.getProcessInstance(ProcessRuntimeImpl.java:206) [jbpm-flow-5.4.0.Final.jar:5.4.0.Final]
at org.drools.common.AbstractWorkingMemory.getProcessInstance(AbstractWorkingMemory.java:1116) [drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.impl.StatefulKnowledgeSessionImpl.getProcessInstance(StatefulKnowledgeSessionImpl.java:297) [drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.command.runtime.process.GetProcessInstanceCommand.execute(GetProcessInstanceCommand.java:48) [drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.command.runtime.process.GetProcessInstanceCommand.execute(GetProcessInstanceCommand.java:25) [drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.command.impl.DefaultCommandService.execute(DefaultCommandService.java:36) [drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:373) [drools-persistence-jpa-5.5.0.Final.jar:5.5.0.Final]
at org.drools.command.impl.CommandBasedStatefulKnowledgeSession.getProcessInstance(CommandBasedStatefulKnowledgeSession.java:125) [drools-core-5.5.0.Final.jar:5.5.0.Final]
at sun.reflect.GeneratedMethodAccessor113.invoke(Unknown Source) [:1.7.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_45]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_45]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319) [spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) [spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) [spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) [spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) [spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) [spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) [spring-aop-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at com.sun.proxy.$Proxy189.getProcessInstance(Unknown Source)
This points to a codeblock which is executed when the processintance is in state ABORTED or state COMPLETED.
1. Does it mean the persisted processInstance is allready completed/aborted? (...AbstractProtobufProcessInstanceMarshaller is part of the call hierarchy)
2. We try to get the according processinstances while processing an active human task. Do we have an inconsistent state here ? (An aborted/completed pInstance can't have active human tasks, can it?)