パターンNo.2と3 ParallelSplitとSynchronization(SplitとJoin)
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() ); } }