[jboss-user] [jBPM Users] - Re: Is there any kind of variable in JBPM4 like 'transient v

npirard do-not-reply at jboss.com
Fri Sep 4 05:18:18 EDT 2009


well, jBPM3 had a nice idea, IMO :-)

especially if the transient data has to be used at several parts of the process, so that it is overall better than mine.



here is what I did, I pass the data when signalling the Custom that uses them with method 
ExecutionService.signalExecutionById(String, String, Map<String, ?>)



JPDL :

  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <process name="CustomParameters" xmlns="http://jbpm.org/4.0/jpdl">
  |    <start g="161,71,48,48" name="start1">
  |       <transition g="-30,-37" name="to input_some_info" to="input_some_info"/>
  |    </start>
  |    <state g="301,129,209,52" name="input_some_info">
  |       <transition g="-68,-18" name="to exclusive1" to="exclusive1"/>
  |    </state>
  |    <decision g="381,222,48,48" name="exclusive1">
  |       <handler class="org.jbpm.npi.Exclusive1Handler" />
  |       <transition g="-58,-18" name="to custom1" to="custom1"/>
  |    </decision>
  |    <custom class="org.jbpm.npi.MyCustom" g="361,319,92,52" name="custom1">
  |       <transition name="to exclusive2" to="exclusive2" g="-68,-18"/>
  |    </custom>
  |    <decision g="384,416,48,48" name="exclusive2">
  |       <handler class="org.jbpm.npi.Exclusive2Handler" />
  |       <transition name="to wait2" to="wait2" g="-44,-18"/>
  |    </decision>
  |    <end g="569,500,48,48" name="end1"/>
  |    <state name="wait2" g="350,479,92,52">
  |       <transition name="to end1" to="end1" g="-42,-18"/>
  |    </state>
  | </process>
  | 

two simple DecisionHandlers :

  | package org.jbpm.npi;
  | 
  | import org.jbpm.api.jpdl.DecisionHandler;
  | import org.jbpm.api.model.OpenExecution;
  | 
  | public class Exclusive1Handler implements DecisionHandler {
  | 
  | 	@Override
  | 	public String decide(OpenExecution arg0) {
  | 		return "to custom1";
  | 	}
  | }
  | 
  | package org.jbpm.npi;
  | 
  | import org.jbpm.api.jpdl.DecisionHandler;
  | import org.jbpm.api.model.OpenExecution;
  | 
  | public class Exclusive2Handler implements DecisionHandler {
  | 
  | 	@Override
  | 	public String decide(OpenExecution arg0) {
  | 		return "to wait2";
  | 	}
  | }
  | 
  | 

my Custom :

  | package org.jbpm.npi;
  | 
  | import java.util.Map;
  | 
  | import org.jbpm.api.activity.ActivityExecution;
  | import org.jbpm.api.activity.ExternalActivityBehaviour;
  | 
  | public class MyCustom implements ExternalActivityBehaviour {
  | 
  | 	@Override
  | 	public void signal(ActivityExecution activityExecution, String signal, Map<String, ?> parameters) throws Exception {
  | 		System.out.println("signal() - ring the Kremlin !! " + parameters.get("putinPhoneNumber"));
  | 		
  | 		activityExecution.takeDefaultTransition();
  | 	}
  | 
  | 	@Override
  | 	public void execute(ActivityExecution activityExecution) throws Exception {
  | 		System.out.println("MyCustom.execute()");
  | 		activityExecution.waitForSignal();
  | 	}
  | 
  | }
  | 

the test class

  | package org.jbpm.npi;
  | 
  | import java.util.HashMap;
  | import java.util.Map;
  | 
  | import org.jbpm.api.Execution;
  | import org.jbpm.api.ProcessInstance;
  | import org.jbpm.test.JbpmTestCase;
  | 
  | /**
  |  * test the possibility to inject parameters at some point of a process without
  |  * persisting them
  |  * 
  |  * @author npirard
  |  */
  | public class CustomParametersTest extends JbpmTestCase {
  | 
  | 	String deploymentId;
  | 
  | 	@Override
  | 	protected void setUp() throws Exception {
  | 		super.setUp();
  | 
  | 		deploymentId = repositoryService.createDeployment().addResourceFromClasspath("org/jbpm/npi/CustomParameters.jpdl.xml").deploy();
  | 	}
  | 
  | 	@Override
  | 	protected void tearDown() throws Exception {
  | 		repositoryService.deleteDeploymentCascade(deploymentId);
  | 
  | 		super.tearDown();
  | 	}
  | 	
  | 	public void testProcess(){
  | 		Map<String, Object> variables = new HashMap<String, Object>();
  | 		
  | 		//this is a variable that can be persisted without problem
  | 	    variables.put("publicInfo", "this is not really secret");
  | 	    ProcessInstance processInstance = executionService.startProcessInstanceByKey("CustomParameters", variables);
  | 	    
  | 	    Execution executionInA = processInstance.findActiveExecutionIn("input_some_info");
  | 	    assertNotNull(executionInA);
  | 	    
  | 	    processInstance = executionService.signalExecutionById(executionInA.getId());
  | 	    
  | 	    Execution executionInCustom = processInstance.findActiveExecutionIn("custom1");
  | 	    Map<String, String> parameters = new HashMap<String, String>();
  | 	    
  | 	    //this is really secret matter
  | 	    parameters.put("putinPhoneNumber", "+7123456789");
  | 	    processInstance = executionService.signalExecutionById(executionInCustom.getId(), "mySignal", parameters);
  | 	    
  | 	    Execution executionInWait2 = processInstance.findActiveExecutionIn("wait2");
  | 	    
  | 	    assertNotNull(executionInWait2);// breakpoint A
  | 	    
  | 	    processInstance = executionService.signalExecutionById(executionInWait2.getId());
  | 	    
  | 	    assertTrue(processInstance.isEnded());// breakpoint B
  | 	}
  | }
  | 

I executed it in debug ; at breakpoint A I found "publicInfo" in table JBPM4_VARIABLE, but not "putinPhoneNumber"

at breakpoint B I do not find anything in JBPM4_VARIABLE. By the way, I would have expected "publicInfo" in JBPM4_HIST_VAR, but it is not. Maybe I have not understood the purpose of this latter table : it is not supposed to record the variables of past executions?



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

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



More information about the jboss-user mailing list