读书人

转:传智播客jbpm与OA项目(2)

发布时间: 2012-10-07 17:28:51 作者: rapoo

转:传智播客—jbpm与OA项目(二)

今日继续讲解jbpm框架,早上汤老师领着大家把昨天的内容复习了一下,然后做了总结。总结之后十分清晰。

?

一、昨日回顾

?

?

今日新内容主要为四点,流程定义文档、节点、动作与事件、任务分配。突然的感觉到事件在JavaEE中被广泛应用,看来事件驱动还是十分重要的。

?

3.eclipsejbpm插件可以打包和部署流程,在设计页面的标签的旁边“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-

读书人网 >软件架构设计

热点推荐