在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的参数传入。