您的位置:首页 > 编程语言 > Java开发

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

2012-07-07 11:51 387 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: