在jbpm4中使用java活动的时候我们需要从外部传入参数,在例子中没有说明如何实现。
下面以jbpm的自带的例子为例:
首先我们修改例子的配置文件:
代码
<?xml version="1.0" encoding="UTF-8"?>
<process name="Java" xmlns="http://jbpm.org/4.4/jpdl">
<start g="20,20,48,48">
<transition to="greet" />
</start>
<java name="greet"
class="org.jbpm.examples.java.JohnDoe"
method="hello"
var="answer"
g="96,16,83,52">
<field name="state"><string value="fine"/></field>
<arg>
<ref object="msg"/>
</arg>
<!--
<string value="Hi, how are you?"/></arg>
-->
<transition to="shake hand" />
</java>
<java name="shake hand"
expr="#{hand}"
method="shake"
var="hand"
g="215,17,99,52">
<arg><object expr="#{joesmoe.handshakes.force}"/></arg>
<arg><object expr="#{joesmoe.handshakes.duration}"/></arg>
<transition to="wait" />
</java>
<state name="wait" g="352,17,88,52"/>
</process>
<process name="Java" xmlns="http://jbpm.org/4.4/jpdl">
<start g="20,20,48,48">
<transition to="greet" />
</start>
<java name="greet"
class="org.jbpm.examples.java.JohnDoe"
method="hello"
var="answer"
g="96,16,83,52">
<field name="state"><string value="fine"/></field>
<arg>
<ref object="msg"/>
</arg>
<!--
<string value="Hi, how are you?"/></arg>
-->
<transition to="shake hand" />
</java>
<java name="shake hand"
expr="#{hand}"
method="shake"
var="hand"
g="215,17,99,52">
<arg><object expr="#{joesmoe.handshakes.force}"/></arg>
<arg><object expr="#{joesmoe.handshakes.duration}"/></arg>
<transition to="wait" />
</java>
<state name="wait" g="352,17,88,52"/>
</process>
我们修改了xml文件,在arg把 <string value="Hi, how are you?"/></arg>
修改为 <ref object="msg"/>
java代码修改为:
代码
package org.jbpm.examples.java;
import java.util.HashMap;
import java.util.Map;
import org.jbpm.api.ProcessInstance;
import org.jbpm.test.JbpmTestCase;
/**
* @author Tom Baeyens
*/
public class JavaInstantiateTest extends JbpmTestCase {
String deploymentId;
protected void setUp() throws Exception {
super.setUp();
deploymentId = repositoryService.createDeployment()
.addResourceFromClasspath("org/jbpm/examples/java/process.jpdl.xml")
.deploy();
}
protected void tearDown() throws Exception {
repositoryService.deleteDeploymentCascade(deploymentId);
super.tearDown();
}
public void testJavaInstantiate() {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("hand", new Hand());
variables.put("joesmoe", new JoeSmoe());
variables.put("msg", "Hi, how are you?");
ProcessInstance processInstance = executionService.startProcessInstanceByKey("Java", variables);
String pid = processInstance.getId();
String answer = (String) executionService.getVariable(pid, "answer");
assertEquals("I'm fine, thank you.", answer);
Hand hand = (Hand) executionService.getVariable(pid, "hand");
assertTrue(hand.isShaken());
}
}
import java.util.HashMap;
import java.util.Map;
import org.jbpm.api.ProcessInstance;
import org.jbpm.test.JbpmTestCase;
/**
* @author Tom Baeyens
*/
public class JavaInstantiateTest extends JbpmTestCase {
String deploymentId;
protected void setUp() throws Exception {
super.setUp();
deploymentId = repositoryService.createDeployment()
.addResourceFromClasspath("org/jbpm/examples/java/process.jpdl.xml")
.deploy();
}
protected void tearDown() throws Exception {
repositoryService.deleteDeploymentCascade(deploymentId);
super.tearDown();
}
public void testJavaInstantiate() {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("hand", new Hand());
variables.put("joesmoe", new JoeSmoe());
variables.put("msg", "Hi, how are you?");
ProcessInstance processInstance = executionService.startProcessInstanceByKey("Java", variables);
String pid = processInstance.getId();
String answer = (String) executionService.getVariable(pid, "answer");
assertEquals("I'm fine, thank you.", answer);
Hand hand = (Hand) executionService.getVariable(pid, "hand");
assertTrue(hand.isShaken());
}
}
我们在java代码中加入了 variables.put("msg", "Hi, how are you?"); 其中msg作为java的参数传入。