Hi guys,

Recently me and my colleague started learning jBPM for our new project. I have 
started creating some processes to learn its capabilities.
We have developed a simple Parent-Children scenario.

The parent process is:
<?xml version="1.0" encoding="UTF-8"?>
  | <process-definition  xmlns=""  name="ParentProcess">
  |     <start-state name="start">
  |             <transition to="SetInputVariable" 
name="toSetInputVariable"></transition>
  |     </start-state>
  | 
  |     <process-state name="InvokeChildProcess">
  |             <sub-process name="ChildProcess" binding="late"></sub-process>
  |             <variable access="read" name="parentKey"></variable>
  |             <variable access="read,write" 
name="lastVisitedProcess"></variable>
  |             <transition to="PrintVariables" 
name="toPrintVariables"></transition>
  |     </process-state>
  | 
  |     <node name="SetInputVariable">
  |             <action 
class="com.sirma.ecs2.test.subprocess.actions.SetInputVariables"></action>
  |             <transition to="InvokeChildProcess" 
name="toInvokeChildProcess"></transition>
  |     </node>
  | 
  |     <node name="PrintVariables">
  |             <action 
class="com.sirma.ecs2.test.subprocess.actions.PrintVariables"></action>
  |             <transition to="end" name="toEnd"></transition>
  |     </node>
  |     <end-state name="end"></end-state>
  | </process-definition>

The child process is:
<?xml version="1.0" encoding="UTF-8"?>
  | <process-definition  xmlns=""  name="ChildProcess">
  |     <start-state name="start">
  |             <transition to="Reset Variables" 
name="toResetVariables"></transition>
  |     </start-state>
  | 
  |     <node name="Reset Variables">
  |             <action name="Reset Variables" 
class="com.sirma.ecs2.test.subprocess.actions.ResetVariables"></action>
  |             <transition to="WaitSignal" name="toWaitSignal"></transition>
  |     </node>
  | 
  |     <state name="WaitSignal">
  |             <transition to="end" name="toEnd">
  |                     <action 
class="com.sirma.ecs2.test.subprocess.actions.ExitWait"></action>
  |             </transition>
  |     </state>
  |     <end-state name="end"></end-state>
  | </process-definition>

I start a Parent process and signal it the Token stops at the child`s State 
node: WaitSignal. 
The Root token of the parent node is in InvokeChildProcess. The ActionHandlers 
are very simple just print a message and work with some variables.

If i try to signal the Parent process`s root node i got a NullPointerException:
Caused by: java.lang.NullPointerException
  |     at org.jbpm.graph.node.ProcessState.leave(ProcessState.java:186)
  |     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:585)
  |     at 
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173)
  |     at 
org.jbpm.graph.def.Node_$$_javassist_49.leave(Node_$$_javassist_49.java)
  |     at org.jbpm.graph.exe.Token.signal(Token.java:192)
  |     at org.jbpm.graph.exe.Token.signal(Token.java:140)
  |     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:585)
  |     at 
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173)
  |     at 
org.jbpm.graph.exe.Token_$$_javassist_64.signal(Token_$$_javassist_64.java)
  |     at com.kpenev.test.TestBean.signalToken(Unknown Source)
  | 

Probably the right token that i have to signal is the token of the subprocess, 
but i don`t think that such an exception should occur. 

The code that i execute is:
JbpmContext jbpmContext = JbpmConfiguration.getInstance()
  |                             .createJbpmContext();
  |             try {
  |                     ProcessInstance instance = jbpmContext.getGraphSession()
  |                                     .loadProcessInstance(instanceID);
  |                     instance.getRootToken().signal();
  |             } finally {
  |                     jbpmContext.close();
  |             }

The code that really works is:
JbpmContext jbpmContext = JbpmConfiguration.getInstance()
  |                             .createJbpmContext();
  |             try {
  |                     ProcessInstance instance = jbpmContext.getGraphSession()
  |                                     .loadProcessInstance(instanceID);
  |                     
instance.getRootToken().getSubProcessInstance().getRootToken()
  |                                     .signal();
  |             } finally {
  |                     jbpmContext.close();
  |             }

I`m using jbpm-3.3.0.GA version and jboss-4.2.3.GA.

I debuged it and the subProcessInstance variable at ExecutionContext isn`t set.

Hope there is a solution for this, because in the near future i have to develop 
a very complex processes including subprocesses.

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4200781#4200781

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4200781
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to