パターンNo.2と3 ParallelSplitとSynchronization(SplitとJoin)

f:id:wkzk:20060917073725j:image

xmlの内容だと



  
   
  
  
  
   
   
  
  
   
  
  
   
  
  
   
  

で、実装はこれ。

public class SplitAndJoinProcessTest extends TestCase {

 public void testSimpleProcess() throws Exception {

  FileInputStream fis = new FileInputStream("processes/p2-split.par/processdefinition.xml");
  ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(fis);

  ProcessInstance instance = new ProcessInstance(processDefinition);

  //開始状態から遷移
  instance.signal();
  Token root = instance.getRootToken();
  Token firstToken = root.getChild( "tr1" );
  Token secondToken = root.getChild( "tr2" );

  assertSame( processDefinition.getNode("fork1"), root.getNode() );
  assertSame( processDefinition.getNode("state1"), firstToken.getNode() );
  assertSame( processDefinition.getNode("state2"), secondToken.getNode() );

  //splitした状態1から遷移しなさい
  firstToken.signal();
  assertSame( processDefinition.getNode("fork1"), root.getNode() );
  assertSame( processDefinition.getNode("join1"), firstToken.getNode() );
  assertSame( processDefinition.getNode("state2"), secondToken.getNode() );
	    
  //splitした状態2から遷移しなさい
  secondToken.signal();
  assertSame( processDefinition.getNode("end1"), root.getNode() ); //<-ここでそろったので終了状態になる
  assertSame( processDefinition.getNode("join1"), firstToken.getNode() );
  assertSame( processDefinition.getNode("join1"), secondToken.getNode() );
 }

}