[jbpm-users] [JBoss jBPM] - Re: JBPM Nested Fork/Joins Doesn't seem to work

philsegal do-not-reply at jboss.com
Mon Jun 8 08:59:19 EDT 2009


Thanks, Junit and jbpm xml file are below.


package com.jpmorgan.orion.workflow.ny;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.junit.Test;

import com.jpmorgan.orion.workflow.service.BaseManagerTestCase;

/**
 * Phil Segal
 * @date @14 May 2009
 */
public class JoinsTest extends BaseManagerTestCase {

	@Test
	public void testNoAdjustments() throws Exception {
		ProcessDefinition def = ProcessDefinition.parseXmlResource("workflow/ny-workflow-2/processdefinition.xml");
		
		assertNotNull("Definition should not be null", def);
		
		ProcessInstance instance = new ProcessInstance(def);
		assertEquals("Def should be at start",
				"start-daily-pnl",
				instance.getRootToken().getNode().getName());

		instance.signal("default");
		
		instance.getRootToken().getChild("signoff").signal("signoff pnl");
		instance.getRootToken().getChild("propose").signal("cancel fork1");
		
		assertEquals("Def should be at auto approve",
				"auto-signoff-adj",
				instance.getRootToken().getNode().getName()
			);
		instance.signal("leave-asa");

		assertEquals("Def should be at ds feeds",
				"downstream-feeds",
				instance.getRootToken().getNode().getName());
		instance.signal("leave-dsf");
		
		assertEquals("Def should be at fork 3",
				"fork3",
			instance.getRootToken().getNode().getName());
		
		instance.getRootToken().getChild("reviewed").signal("review");
		instance.getRootToken().getChild("unsignoff").signal("cancel");
		
//		instance.signal();
		
		assertTrue("Instance has ended", instance.hasEnded());
	}
	
	@Test
	public void testWithAdjustmentsProcessNoApprove() throws Exception
	{
		ProcessDefinition def = ProcessDefinition.parseXmlResource("workflow/ny-workflow-2/processdefinition.xml");
		
		assertNotNull("Definition should not be null", def);
		
		ProcessInstance instance = new ProcessInstance(def);
		assertEquals("Def should be at start",
				"start-daily-pnl",
				instance.getRootToken().getNode().getName());

		instance.signal("default");
		
		instance.getRootToken().getChild("propose").signal("propose an adjustment");
		
		assertEquals("Def should be at fork2",
				"fork2",
				instance.getRootToken().getChild("propose").getNode().getName());
		
		instance.getRootToken().getChild("propose").getChild("propose").signal("cancel");
		instance.getRootToken().getChild("propose").getChild("approve").signal("cancel");

		assertEquals("child should be at join1",
				"join1",
				instance.getRootToken().getChild("propose").getNode().getName());
		assertEquals("parent should be at fork1",
				"fork1",
				instance.getRootToken().getNode().getName());
		
		instance.getRootToken().getChild("signoff").signal("signoff pnl");
		
		assertEquals("Def should be at auto approve",
				"auto-signoff-adj",
				instance.getRootToken().getNode().getName()
			);
		
	}
	@Test
	public void testWithMultipleAdjustmentsProcessNoApprove() throws Exception
	{
		ProcessDefinition def = ProcessDefinition.parseXmlResource("workflow/ny-workflow-2/processdefinition.xml");
		
		assertNotNull("Definition should not be null", def);
		
		ProcessInstance instance = new ProcessInstance(def);
		assertEquals("Def should be at start",
				"start-daily-pnl",
				instance.getRootToken().getNode().getName());
		
		instance.signal("default");
		
		instance.getRootToken().getChild("propose").signal("propose an adjustment");
		
		assertEquals("Def should be at fork2",
				"fork2",
				instance.getRootToken().getChild("propose").getNode().getName());
		
		instance.getRootToken().getChild("propose").getChild("propose").signal("propose an adjustment");

//		Use either just cancel, or both approve and default signals for approve signalling...
//		instance.getRootToken().getChild("propose").getChild("approve").signal("cancel");
		instance.getRootToken().getChild("propose").getChild("approve").signal("approve");
		instance.getRootToken().getChild("propose").getChild("approve").signal("default");

		
		instance.getRootToken().getChild("propose").getChild("propose").getChild("propose").signal("cancel");
		instance.getRootToken().getChild("propose").getChild("propose").getChild("approve").signal("cancel");
		
		assertEquals("propose/propose should be at join1",
				"join1",
				instance.getRootToken().getChild("propose").getChild("propose").getNode().getName());
		assertEquals("propose/approve should be at join2",
				"join2",
				instance.getRootToken().getChild("propose").getChild("approve").getNode().getName());

		assertEquals("parent should be at fork1",
				"fork1",
				instance.getRootToken().getNode().getName());

		assertEquals("propose should be at join1",
				"join1",
				instance.getRootToken().getChild("propose").getNode().getName());
		

		instance.getRootToken().getChild("signoff").signal("signoff pnl");
		assertEquals("signoff should be at join1",
				"join1",
				instance.getRootToken().getChild("signoff").getNode().getName());
		
//		instance.getRootToken().getChild("propose").getChild("propose").getChild("propose").signal("cancel");
//		instance.getRootToken().getChild("propose").getChild("propose").getChild("propose").signal("propose an adjustment");
//		instance.getRootToken().getChild("propose").getChild("propose").getChild("propose").getChild("propose").signal("cancel fork1");
//		instance.getRootToken().getChild("propose").getChild("propose").getChild("approve").signal("cancel fork1");
//		instance.getRootToken().getChild("propose").getChild("propose").getChild("propose").getChild("approve").signal("cancel fork1");
		
		assertEquals("Def should be at auto approve",
				"auto-signoff-adj",
				instance.getRootToken().getNode().getName()
		);
		
	}

}


____________________________________________________
processdefinition

<?xml version="1.0" encoding="UTF-8"?>

<process-definition  xmlns=""  name="ny-workflow-2">

	<start-state name="start-daily-pnl">
		
	</start-state>

	<task-node name="signoff-pnl">
		
			<!-- timer name="signoff-timer" duedate="1 minute" repeat="true">
				<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
					signOffTimerAction
					jbpmConfiguration
				
			</timer-->
			<assignment config-type="bean" class="org.springmodules.workflow.jbpm31.JbpmHandler">
				pnlSignOffMOAssignmentHandler
				jbpmConfiguration
			
			
				<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
					signOffMultiAction
					jbpmConfiguration
				
			
		
		
			<!-- cancel-timer name="signoff-timer"/-->
		
	</task-node>

	<task-node name="propose-adjustments">
		
			<assignment config-type="bean" class="org.springmodules.workflow.jbpm31.JbpmHandler">
				proposeAdjustmentAssignmentHandler
				jbpmConfiguration
			
			
				<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
					proposeAdjustmentsAction
					jbpmConfiguration
				
			
		
		
		
		
	</task-node>

	<task-node name="approve-reject-adj">
		
			<assignment config-type="bean" class="org.springmodules.workflow.jbpm31.JbpmHandler">
				approveRejectAdjustmentAssignmentHandler
				jbpmConfiguration
			
		
		
		
		
		
	</task-node>

	<!--  Reject select adjustment(s) -->
	
		<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
			rejectAdjustmentsAction
			jbpmConfiguration
		
		
	

	<task-node name="review">
		
			<assignment config-type="bean" class="org.springmodules.workflow.jbpm31.JbpmHandler">
				reviewPnlAssignmentHandler
				jbpmConfiguration
			
			
				<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
					reviewPnlAction
					jbpmConfiguration
				
			
		
		
	</task-node>

	
		<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
			autoApproveAdjustmentsAction
			jbpmConfiguration
		
		
	

	
		
		
	

	
		
		
	

	
		<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
			approveAdjustmentsAction
			jbpmConfiguration
		
		
	

	
		
	

	
		<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
			downstreamFeedsAction
			jbpmConfiguration
		
		
	

	<task-node name="unsignoff-pnl">
		
			<assignment config-type="bean" class="org.springmodules.workflow.jbpm31.JbpmHandler">
				pnlSignOffMOAssignmentHandler
				jbpmConfiguration
			
			
				<action config-type="bean" class="org.springmodules.workflow.jbpm31.JbpmHandler">
					unsignoffAction
					jbpmConfiguration
				
			
			<!-- timer name="unsignoff-timer" duedate="1 business second" repeat="true">
				<action class="org.springmodules.workflow.jbpm31.JbpmHandler" config-type="bean">
					unsignOffTimerAction
					jbpmConfiguration
				
			</timer-->
		
		
			<!--cancel-timer name="unsignoff-timer"/-->
		
		
			<!--cancel-timer name="unsignoff-timer"/-->
		
	</task-node>

	
		
		
	

	
		
	

	
		
	

	<end-state name="end-daily-pnl"></end-state>

</process-definition>


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

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



More information about the jbpm-users mailing list