[jboss-user] [JBoss jBPM] - async fork

popel do-not-reply at jboss.com
Wed Aug 27 10:08:42 EDT 2008


Hi,

I've got a problem to get async nodes right. I read on JIRA ther once was an issue with this but got resolved. So I wonder where my mistake is.
JBPM Version is 3.2.3

The process definition:

  | <?xml version="1.0" encoding="UTF-8"?>
  | <process-definition xmlns="" name="TestThreadSkript">
  | 	<start-state name="start-state1">
  | 		<transition to="fork1"></transition>
  | 	</start-state>
  | 	<fork name="fork1">
  | 		<transition to="node1" name="to node1"></transition>
  | 		<transition to="node2" name="to node2"></transition>
  | 		<transition to="node3" name="to node3"></transition>
  | 	</fork>
  | 	<node name="node1" async="true">
  | 		<script name="do it1">
  | 			<expression>
  |         String nodename=executionContext.getNode().getName();
  | 				for(int i=0;i<=7;i++){
  |          Thread.currentThread().sleep(1000);
  |          System.out.println(nodename + " is waiting (" +i+")");
  |         }
  |         System.out.println("loop done");
  |   
  |         executionContext.leaveNode();                   
  |         </expression>
  |    </script>
  | 		<transition to="join1"></transition>
  | 	</node>
  | 
  |   <node name="node2" async="true">
  |    <script name="do it2">
  |         <expression>
  |         String nodename=executionContext.getNode().getName();
  |   
  |         for(int i=0;i<=7;i++){
  |           Thread.currentThread().sleep(1000);
  |           System.out.println(nodename + " is waiting (" +i+")");
  |         }
  |         System.out.println("loop done");
  |   
  |         executionContext.leaveNode();                   
  |         </expression>
  |    </script>
  | 		<transition to="join1"></transition>
  |   </node>
  | 
  | 	<node name="node3" async="true">
  | 	 <script name="do it3">
  |         <expression>
  |         String nodename=executionContext.getNode().getName();
  |   
  |         for(int i=0;i<=7;i++){
  |           Thread.currentThread().sleep(1000);
  |           System.out.println(nodename + " is waiting (" +i+")");
  |         }
  |         System.out.println("loop done");
  |   
  |         executionContext.leaveNode();                   
  |         </expression>
  |    </script>
  | 		<transition to="join1"></transition>
  | 	</node>
  | 
  | 
  | 	<join name="join1" >
  | 		<transition to="end-state1"></transition>
  | 	</join>
  | 
  | 	<end-state name="end-state1"></end-state>
  | 
  | </process-definition>
  | 
  | 

This throws an exception
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)

This happens when the second thread enters the join node and hibernate tries to update a token.

I tested this with MYSQL and transaction-isolation = REPEATABLE-READ  and  READ-COMMITTED but nothing helped.

Where am I wrong?

Thanks for your help



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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4172823



More information about the jboss-user mailing list