jBPM4.4开发(八)-----------java活动

来源:互联网 发布:windows 10 c盘大小 编辑:程序博客网 时间:2024/05/22 03:16

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