收藏 分享(赏)

JBPM工作流开发指南 .pdf

上传人:刘岱文 文档编号:5129 上传时间:2018-05-16 格式:PDF 页数:91 大小:1.96MB
下载 相关 举报
JBPM工作流开发指南 .pdf_第1页
第1页 / 共91页
JBPM工作流开发指南 .pdf_第2页
第2页 / 共91页
JBPM工作流开发指南 .pdf_第3页
第3页 / 共91页
JBPM工作流开发指南 .pdf_第4页
第4页 / 共91页
JBPM工作流开发指南 .pdf_第5页
第5页 / 共91页
点击查看更多>>
资源描述

1、JBPM 工作流开发指南 JBPM开发指南 上海锐道信息技术有限公司 高杰 1JBPM 工作流开发指南 目 录 一、概述. .4 二、第一个流程 .4 2.1、开始前的准备 .4 2.2 、Hello World 例子 .5 三、学习JPDL .9 3.1 、简介 .9 3.2 、流程版本(Version) .10 3.3 、流程定义 .11 3.3.1 process-definition(流程定义) .11 3.3.2 node(自动节点) .11 3.3.3 start-state(开始状态) .12 3.3.4 end-state(结束节点) .12 3.3.5 state(状态) .

2、13 3.3.6 task-node (任务节点) .13 3.3.7 fork(分支) .15 3.3.8 join(联合) .16 3.3.9 decision(决策) .17 3.3.10 transition(转换) .18 3.3.11 event(事件) .19 3.3.12 action(动作) .19 3.3.13 script(脚本) .20 3.3.14 expression(表达式) .21 3.3.15 variable(变量) .22 3.3.16 handler(句柄) .22 3.3.17 timer(定时器) .23 3.3.18 create-timer(创建

3、定时器) .24 3.3.19 cancel-timer(取消定时器) .25 3.3.20 task(任务) .25 3.3.21 swimlane(泳道) .26 3.3.22 assignment(委派) .27 3.3.23 controller(控制器) .28 3.3.24 process-state 子流程 .28 3.3.25 sub-process 子流程 .29 3.3.26 condition 条件 .29 3.3.27 exception-handler 异常处理 .30 小结 .32 四、流程中任务的分配 .35 4.1 assignment-handler方式的任务

4、分配 .36 4.2 swimlane方式的任务分配 .37 上海锐道信息技术有限公司 高杰 2JBPM 工作流开发指南 五、JBPM持久化 .39 5.1 特殊数据库支持 .39 5.2 JBPM数据库的安装 .39 5.2 JBPM流程发布 .42 5.2.1 搭建JBPM的WEB应用 .43 5.2.2 发布第一个流程 .45 六、日历(Scheduler) .50 6.1 Scheduler在C/S 程序上的应用 .51 6.2 Scheduler 在Web 上的应用 .53 6.3 Scheduler时间的分类 .55 七、异步执行 .58 八、JBPM流程建模与应用 .58 7.1

5、 JBPM的建模工具 .58 7.1.1 建模工具的安装 .59 7.2 公司报销流程示例 .61 7.2.1 流程建模 .61 7.2.2 流程数据库搭建 .71 7.2.3 构建业务表 .74 7.2.4 报销流程的发布 .77 7.2.5 应用程序搭建 .79 九、写在最后 .91 上海锐道信息技术有限公司 高杰 3JBPM 工作流开发指南 一、概述 JBPM 是一个扩展性很强的工作流系统,百分百用 JAVA 语言开发, 持久层采用 Hibernate实现,理论上说,只要 Hibernate 支持的数据库 JBPM 都支持。同时它还能被部署在任何一款 JAVA 应用服务器上 二、第一个流

6、程 2.1、开始前的准备 JBPM的工程文件,大家可以到如下网站上去下载:http:/ 目前的最新版本是 3.2.1,本文就以此版本为例。在这里请大家下载jbpm-starter s-kit-3.1.2 这样一个版本。在这个版本里包括一个JBPM流程设计器的Eclipse插件,和一个用JBOSS作为服务器的示例流程等相关文件。解压jbpm-starters-kit-3.1.2.rar到某个特定目录,这里我们首先用到的是包里的JBPM目录下的文件。 JBPM 目录里面是 JBPM 的Eclipse 的工程文件,我们可以用 Eclipse 导入该工程。从Eclipse 的File 菜单里选择 im

7、port Existin g Projects into Workspacen ext根据向导找到前面提到的 JBPM 目录就可以把该工程导入到 Eclipse 当中。如下图: 上海锐道信息技术有限公司 高杰 4JBPM 工作流开发指南 好了,接下来,我们就在这个工程的基础之上来开始我们的第一个流程。 2.2 、Hello World 例子 我们的第一个流程示例源自 JBPM 的reference。流程图如下: JBPM 的流程定义采用 XML 的方式(实际绝大多数的流程引擎的流程定义都采用的是这种方式),作为测试 XML定义我们既可以写在代码当中,也可以以一个独立的 XML文件的形式存在,接

8、下来的例子我们将分别为大家介绍一下这两种情况。我们首先来看看把 XML 流程定义写在代码中的方式。 上海锐道信息技术有限公司 高杰 5JBPM 工作流开发指南 新建一个 Junit 的测试用例,测试代码如下: package org.jbpm.tutorial.helloworld; import junit.framework.TestCase; import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.graph.exe.Token; pub

9、lic class HelloWorldTest extends TestCase public void testHelloWorldProcess() /* 这个段测试方法演示了一个流程的在代码中以字符串形式定义和这个流程定义的具体执行。 这个流程定义包含三个节点:一个未命名的开始状态(start-state), 一个名字为s的状态(state)和一个名字为end的结束状态(end-state)。 下一行的功能是把一段xml文本解析为一个ProcessDefinition, 一个ProcessDefinition是一个java对象的形式对流程的正式的描述。 */ ProcessDefini

10、tion processDefinition = ProcessDefinition.parseXmlString( “ + “ “ + “ “ + “ “ + “ “ + “ “ + “ “ + “ “ + “ 上海锐道信息技术有限公司 高杰 6JBPM 工作流开发指南 ); /* 下边的一行根据流程定义构造了的一个具体的执行实例。 构造以后,执行的流程就有了一个被定位在开始状态(start-state)上的主要的执行路径 */ ProcessInstance processInstance = new ProcessInstance(processDefinition); /* 构造以后,

11、执行的流程就有了一个主要的执行路径(root token) */ Token token = processInstance.getRootToken(); /* 当然,构造以后,流程定义的主要的执行路径被定位在开始状态(start-state) */ assertSame(processDefinition.getStartState(), token.getNode(); /* 开始流程执行,通过默认的转换(transition)离开开始状态(start-state) */ token.signal(); /* 直到运行的流程进入一个等待状态,signal方法将一直被阻塞,运行的流程将要进

12、入第一个等待状态:状态s.因此现在主要的执行路径,定位到了状态s上。 */ assertSame(processDefinition.getNode(“s“), token.getNode(); /* 执行signal,流程将继续执行,将通过默认的转换(transition)离开状态s */ token.signal(); 上海锐道信息技术有限公司 高杰 7JBPM 工作流开发指南 /* 流程实例已经到达了结束状态。 */ assertSame(processDefinition.getNode(“end“), token.getNode(); 运行测试,我们看到流程和我们预想的结果完全符合。

13、 在这里我们的流程定义是写在一个代码中,XML的定义方式是以通过拼字符串的方式完成的,这种方式给我们带来的结果是不直观,同时流程定义起来也很不方便。除了这种定义方式之外我们可以把刚才那段写在代码里的流程定义信息搬到我们的 XML 文件里,同样可以达到相同的效果。接下来我们就来看一下这种做法。 流程定义文件:helloWor ld.xml 测试代码:HelloWorldTest.java package org.jbpm.tutorial.helloworld; import junit.framework.TestCase; import org.jbpm.graph.def.ProcessD

14、efinition; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.graph.exe.Token; 上海锐道信息技术有限公司 高杰 8JBPM 工作流开发指南 public class HelloWorldTest extends TestCase public void testHelloWorldProcess() ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource(“helloWorld.xml“); /* 从这里可以看出

15、,与上面那段代码唯一不同之处就是没有字符串形式的流程定义信息了,取而代之的是对流程定义的XML进行解析 */ ProcessInstance processInstance = new ProcessInstance(processDefinition); Token token = processInstance.getRootToken(); assertSame(processDefinition.getStartState(), token.getNode(); token.signal(); assertSame(processDefinition.getNode(“s“), tok

16、en.getNode(); token.signal(); assertSame(processDefinition.getNode(“end“), token.getNode(); 运行测试,得到的结果同上例完全相同。 到这里为止,我们已经做了一个非常简单的流程示例,对 JBPM 的流程定义及使用方法也有了初步的概念,在下面的内容中我们将着重来讨论 JBPM 的流程定义方法,及各个节点的主要含义及使用方法。 三、学习JPDL 3.1 、简介 JPDL(JBPM Process Definition Language)是 JBPM 流程定义语言。JPDL详细定义了这个状态图的每个部分,如: 开

17、始、结束状态,状态之间的转换等。这种语言的定义对于用户来说比较容易理解,也比较容易对其进行扩展。 上海锐道信息技术有限公司 高杰 9JBPM 工作流开发指南 一个 JBPM 的流程定义 XML 文件中包含一个元素,而一个元 素又包含零个或一个元素,零个或多个的元素,一个元素,零个或多个的元素或元素或元素或元素,以及零个或多个的元素,零个或多个和元素,一个元素等等。此外,元素有一个标示符,以“name”属性来表示,这个属性必须存在,用来表示该流程的名称。 3.2 、流程版本(Version) 我们的流程 XML 文件定义完成之后,接下来的工作就是要将其发布到对应的数据库中,当我们每次将我们的流程

18、定义部署到数据库时, 部署时流程的名称就是前面提高的里定义的 name”属性的值。 JBPM 的版本机制允许在数据库中多个同名流程定义共存,流程实例以当时的最新版本来启动,并且在它的整个生命周期中将保持以相同的流程定义执行。当一个新的版本被部署,新的流程实例以新版本启动,而老的流程实例则以老的流程定义继续执行。 在部署的时候,jbpm 安排一个版本(version)号码(数字)给流程定义。为了实现安排version号码, 如果它是第一个版本 (version) , JBPM采取1+或者1。 从ProcessDefinition pd=JbpmContext.getGraphSession()

19、.findLatestProcessDefinition(“processName“) 中可以通过一个给定的 processName查找最近的流程定义,这里的 processName 就是前面我们在定义流程的时候在里定义的name”属性的值,这个属性就是用来表示该流程的名称。如我们的下列代码就是要列出 JBPM 数据库里的有所有最后一次发布的流程定义的版本: JbpmContext context=JbpmContext.getCurrentJbpmContext(); List ls=context.getGraphSession().findLatestProcessDefinitions(); /* 这里返回的List是ProcessDefinition的集合 */ 上海锐道信息技术有限公司 高杰 10

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 网络技术 > 后端技术

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报