转:传智播客—jbpm与OA项目(二)
今日继续讲解jbpm框架,早上汤老师领着大家把昨天的内容复习了一下,然后做了总结。总结之后十分清晰。
?
一、昨日回顾
?
?
今日新内容主要为四点,流程定义文档、节点、动作与事件、任务分配。突然的感觉到事件在JavaEE中被广泛应用,看来事件驱动还是十分重要的。
?
3.eclipse的jbpm插件可以打包和部署流程,在设计页面的标签的旁边“Deployment”页面。在“Files and Floders”与“Java Classes and Resources”中,选择将要打包或部署的文件。“Local Save Settings”打包到…。“Deployment Server Settings”发布到JBOSS WEB容器,此时必须走动JBOSS WEB容器,采取默认设置即可。
4.更新的问题(版本)
我们每次部署流程时,JBOSSWEB容器都会为流程设置一个新的版本,而不会去覆盖之前部署的应用。使用之前的应用与对应的版本保留,不会造成数据出错。所以每次应该重新部署应用,也不要删除以前的应用。
如果被删除或覆盖,新部署的流程相比以前的流程。多了或少了几个任务节点,那使用之前的数据访问就会出错。
?
1.预定义节点
?
实现“DecisionHandler”接口的类:
package cn.itcast.cc.jbpm.node.decision;
?
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.node.Decision;
import org.jbpm.graph.node.DecisionHandler;
?
public class DecisionNodeTest extends Decision implements DecisionHandler {
??? private static final long serialVersionUID = 1L;
??? @Override
??? public String decide(ExecutionContext arg0) throws Exception {
??? ??? //ExecutionContext节点的执行环境,通过这个参数可以获取所有信息。
??????? return "t2";//执行transition名为“t2”的分支。
??? }
?
?
?
2.自定义节点
package cn.itcast.cc.jbpm.node.customize;
?
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
?
public class CustomizeAction implements ActionHandler {
??? private static final long serialVersionUID = 1L;
??? @Override
??? public void execute(ExecutionContext executionContext) throws Exception {
??????? //ExecutionContext节点的执行环境,通过这个参数可以获取所有信息。
??????? System.out.println("*****CustomizeAction*****");
??? }
动作我们在第三部分末尾已经介绍过,Jbpm的的节点包含三类事件(共7个事件)。Jbpm7个事件的执行顺序:
上表中的事件是jbpm流程中比较常用的事件,事件不影响流程的执行。
package cn.itcast.cc.jbpm.node.event;
?
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
?
public class NodeEventTest implements ActionHandler {
??? private static final long serialVersionUID = 1L;
?
??? @Override
??? public void execute(ExecutionContext executionContext) throws Exception {
??????? // 打印事件类型
??????? System.out.println(executionContext.getEvent().getEventType());
??? }
}
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="" name="NodeEvent">
???
??? <start-state name="start-state1">
??????? <transition to="task-node1"></transition>
??????? <event type="node-leave">
??????????? <action class="cn.itcast.cc.jbpm.node.event.NodeEventTest"
??????????????? name="printNodeEventType"></action>
??????? </event>
??? </start-state>
???
??? <task-node name="task-node1">
???
??????? <task name="下订单">
??????????? <assignment actor-id="客户"></assignment>
???????????
??????????? <event type="task-create">
??????????????? <action ref-name="printNodeEventType" />
??????????? </event>
??????????? <event type="task-assign">
??????????????? <action ref-name="printNodeEventType" />
??????????? <span style="font-family: 'Courier New'; color: teal; font-size: 9pt;" lang="EN-