2 Replies Latest reply on Jan 14, 2013 10:37 AM by nsharm28

    Couldn't retrieve the node name for the process instance in JBPM 5.4

    nsharm28

      Hi,

       

      When i am trying  to retreive the node name for particular process instance. I am getting following Error.

       

              at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

      Caused by: java.lang.NullPointerException

              at org.jbpm.process.instance.impl.ProcessInstanceImpl.getProcess(ProcessInstanceImpl.java:68)

              at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.getWorkflowProcess(WorkflowProcessInstanceImpl.java:181)

              at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.getNodeContainer(WorkflowProcessInstanceImpl.java:69)

              at org.jbpm.workflow.instance.impl.NodeInstanceImpl.getNode(NodeInstanceImpl.java:103)

              at org.jbpm.workflow.instance.impl.NodeInstanceImpl.getNodeName(NodeInstanceImpl.java:79)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

        at java.lang.reflect.Method.invoke(Method.java:597)

        at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)

        at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)

        at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:167)

        at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:94)

        at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)

        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

        at java.util.concurrent.FutureTask.run(FutureTask.java:139)

        at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:38)

        at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)

        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)

        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:123)

        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:207)

        at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:213)

        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:154)

        at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:126)

        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:186)

        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:109)

        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:164)

        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)

        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)

        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)

        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:176)

       

      below is the LOC, to get nodename

      System.out.println(("Node name "+((org.jbpm.workflow.instance.WorkflowProcessInstance)instance).getNodeInstances().iterator().next().getNodeName()));

        • 1. Re: Couldn't retrieve the node name for the process instance in JBPM 5.4
          swiderski.maciej

          if you use persistence you should make it as part of transaction and to do so you could use command like following:

          String nodeName = ksession.execute(new GenericCommand<String>() {
              public String execute(Context context) {
                  StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
                  org.jbpm.process.instance.ProcessInstance processInstance = (org.jbpm.process.instance.ProcessInstance) ksession.getProcessInstance(piId);
                  
                  return ((org.jbpm.workflow.instance.WorkflowProcessInstance)instance).getNodeInstances().iterator().next().getNodeName());
              }
          });
          
          

          Obviously it's simple case you could have a command that does all you need.

           

          if you are looking for a way to get node names of active process instance you can use history log data for it and then you don't need to have anything else but processInstanceId, take a look at methods of this class

           

          HTH

          • 2. Re: Couldn't retrieve the node name for the process instance in JBPM 5.4
            nsharm28

            Thanks alot Maciej