java活动
1.定义
java活动可以指定一个java类的方法,当流程执行到此活动时,马上自动执行此java方法。
2.属性
class 属性用来指定此java 的全类名,要注意这个类要有public无参的默认构造方法。
expr 这个表达式返回方法被调用所产生的目标对象。
method 指定要调用的方法名。
var 返回存储的变量名。
field 在方法调用之前为成员变量赋值。
arg 要调用的方法的参数。
3.Demo
流程定义文件:
<?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="com.itstudio.jbpm.java.demo.JohnDoe"
method="hello"
var="answer"
g="96,16,83,52">
<field name="state"><string value="fine"/></field>
<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>

java类:
Hand.java
package com.itstudio.jbpm.java.demo;
import java.io.Serializable;
public class Hand implements Serializable {
private static final long serialVersionUID = 1L;
private boolean isShaken;
public Hand shake(Integer force, Integer duration) {
if (force>3 && duration>7) {
isShaken = true;
}
return this;
}
public boolean isShaken() {
return isShaken;
}
}
JoeSmoe.java
package com.itstudio.jbpm.java.demo;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
public class JoeSmoe implements Serializable {
private static final long serialVersionUID = 1L;
public Map<String, Integer> getHandshakes() {
Map<String, Integer> handshakes = new HashMap<String, Integer>();
handshakes.put("force", 5);
handshakes.put("duration", 12);
return handshakes;
}
}
JohnDoe.java
package com.itstudio.jbpm.java.demo;
import java.io.Serializable;
public class JohnDoe implements Serializable {
String state;
public String hello(String msg) {
if ( (msg.indexOf("how are you?")!=-1)
) {
return "I'm "+state+", thank you.";
}
return null;
}
}
测试类:JavaInstantiateTest.java
package com.itstudio.jbpm.java.demo;
import java.util.HashMap;
import java.util.Map;
import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
public class JavaInstantiateTest {
public final Configuration configuration = new Configuration();
public final ProcessEngine processEngine=configuration.buildProcessEngine();
public final RepositoryService repositoryService= processEngine.getRepositoryService();
public final ExecutionService executionService=processEngine.getExecutionService();
public final TaskService taskService=processEngine.getTaskService();
private void deploy() {
repositoryService.createDeployment().addResourceFromClasspath(
"com/itstudio/jbpm/java/demo/process.jpdl.xml").deploy();
System.out.println("Successful");
}
private void test() {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("hand", new Hand());
variables.put("joesmoe", new JoeSmoe());
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("Java", variables);
String pid = processInstance.getId();
String answer = (String) executionService.getVariable(pid, "answer");
//显示返回值是否为I'm fine, thank you.
System.out.println(answer);
Hand hand = (Hand) executionService.getVariable(pid, "hand");
System.out.println(hand.isShaken());
}
public static void main(String[] args) {
JavaInstantiateTest t = new JavaInstantiateTest();
t.deploy();
t.test();
}
}
By Mr.Z