《JBPM工作流简介.docx》由会员分享,可在线阅读,更多相关《JBPM工作流简介.docx(38页珍藏版)》请在三一办公上搜索。
1、jbpm简介JBoss jBPM为设计及开发工作流和业务流程管理系统提供了一个先进的平台。由API、特定领域的语言和图形建模工具组成的框架让开发人员和业务分析人员能够使用通用平台进行沟通及操作。 工作流管理和业务流程管理(BPM)正在迅速成为企业获得软件敏捷性和适应性的重要方法。JBoss jBPM是一个面向流程的工作流/BPM框架和工具集,它使业务分析人员能够与软件组件进行交互、有助于获得有效的业务解决方案。 许多企业在积极寻求一种结构化方法,以便设计业务动作/事务,并且优先使用自动化流程加以执行。业务流程管理(BPM)和工作流管理使用动作、任务和流程等概念,提供了解决这个问题的办法。 业务
2、流程管理一词通常是指企业通过一系列活动,以能够适应动态变化的环境的方式,自动管理及优化流程。这些活动通常寻求来自软件工程和工具的帮助。因而,BPM一词往往直接用来指软件工程技术和工具。 BPM体现为三个不同的实践 1流程设计:指设计现有及新的流程这一任务; 2流程执行:执行自动化序列的相关事件,这些事件涉及软件流程以及/或者人为活动; 3流程监控:观察及审查单个流程的状态,以便这些流程的统计数字和性能可以加以记录、报告及优化。 BPM力求让软件工程师们能够与业务分析人员共享同样的概念和框架,因而,软件开发商试图创建这样的工具,让企业可以通过使用图形建模工具、特定领域的语言和专有应用软件,获取、
3、设计及优化业务流程。 JBoss jBPM 3.0提供了这样的功能:使用业务流程执行语言(BPEL)、灵活而且可插入的应用编程接口(API)、本地流程定义语言以及图形建模工具,利用基于行业标准的编制机制开发新的自动化业务流程和工作流。 JBoss jBPM是采用开放源代码(LGPL许可证)的框架,包括了Java API、工具和定义语言,可以充当Web应用或者独立的Java应用。JBoss jBPM相当于业务分析人员和开发人员之间的中介,为他们提供了名为jPDL的通用流程定义语言。 JBoss jBPM架构综述 JBoss jBPM定义了使用JBoss流程定义语言编写的文件里面的流程定义。jPD
4、L是一种面向图形编程(GOP)的语言,它基于节点、转换和动作组成的模型。在这种模型里面,节点是在流程定义过程中彼此相遇时执行的命令。转换负责指导流程定义的执行过程,而动作在节点或者转换事件发生时执行特定逻辑。 在jBPM中,流程定义被封装成流程档案(process archives)。流程档案被传送到jPDL流程引擎加以执行。jPDL流程引擎负责遍历流程图、执行定义的动作、维持流程状态,并且记录所有流程事件。 JBoss jBPM在以下组件里面进行封装: 流程引擎: 该组件通过下列委托组件(delegate component)来执行定义的流程动作、维持流程状态,并记录所有流程事件:请求处理程
5、序、状态管理程序、日志管理程序、定义加载程序、执行服务。 流程监管器: 该模块跟踪、审查及报告流程在执行时的状态。 流程语言: 流程定义语言(jPDL)基于GOP。 交互服务: 这些服务把遗留应用提供成流程执行时所用的功能或者数据。 图1表明了这些组件之间的关系。 如图1所示,含有动作处理程序的jBPM流程定义由jBPM流程引擎加以加载及执行。 如果流程引擎在流程定义过程中遇到拥有相关动作的节点,所有相关的动作处理程序就会被调用。动作处理程序是Java代码的实例,在执行时能够与外部系统进行交互。 下面就是简单的动作处理程序的示例: import org.jbpm.graph.def.*; im
6、port org.jbpm.graph.exe.*; public class MyActionHandler implements ActionHandler public void execute(ExecutionContext executionContext) System.out.println(MyActionHandler has executed: + executionContext); 流程档案里面的PDL文件名为process-definition.xml。该文件含有诸流程的正式描述。以下示子表明了process-definition.xml文件的例子: 流程定义基于定
7、向图(directed graph)。有向图由节点、转换、一个起始状态以及一个终止状态组成。每个节点的类型定义了该节点的运行时行为。流程定义在执行时,以下实体就会起到作用: 流程实例: 流程实例是流程定义的一次执行。 标记: 标记是一条执行路径。标记是运行时概念,它含有指向定向图中节点的指针。一旦创建了流程实例,就会创建主要执行路径的标记。该标记名为流程实例的根标记,它位于流程定义的起始状态。 信号: 信号指示标记继续由转换实现的图像执行。 节点: 节点负责图像执行的继续进行。如果标记进入节点,节点就会执行。不会传播执行的节点被认为是状态节点。 动作:动作是流程执行过程中出现事件时执行的Jav
8、a代码的实例。主要的事件类型有:“进入节点”、“离开节点”和“进行转换”。 图2 jBPM图形建模设计器使用jBPM图形建模设计器,就很容易创建流程定义。设计器目前作为Eclipse插件而安装。图2表明了图形建模设计器的示例屏幕。 图形设计器可以用来创建流程定义、把动作处理程序与事件连接起来、编辑定义来源、创建流程档案、测试流程定义,等等。 部署JBoss jBPM JBoss jBPM把流程定义存储在数据库中。因而,把流程部署到JBoss jBPM里面需要解析process-definition.xml,并且把它存储在JBoss jBPM数据库中。可通过以下方法实现这项工作: 使用由JBos
9、s jBPM提供的par Ant任务来创建流程档案。 使用deploypar实用程序。该实用程序还可以创建流程档案,并且把流程档案部署到jBPM数据库上。Deploypar实用程序把jBPM.properties文件作为一个属性。该文件指定了配置选项,其中包括流程档案所要部署到的那个数据库。 通过编程解析process-definition.xml,并把它存储到数据存储区中。 让JBoss jBPM完成一些简单步骤 JBoss jBPM充当编制引擎,它位于企业应用的中间,能够实现不同应用之间的集成和协调。 本文使用随同jBPM交付的示例部署,讨论如何利用jBPM和jPDL来创建及修改具有Web
10、功能的简单的订单处理系统。 1.下载JBoss jBPM JBoss jBPM入门套件( jBPM所需的一切,只是没有Java开发者工具包(JDK)。JBoss jBPM入门套件里面的JBoss应用服务器需要J2SE 1.4或者更新版本。 下载入门套件后,把它解压缩到选择的目录下面。一旦解压缩了该入门套件,就有了类似如下的目录结构: Jbpm-starters-kit-3.1。 Jbpm:含有JBoss jBPM产品的源代码。 jbpm-bpel:含有JBoss jBPM的BPEL扩展件方面的信息。 jbpm-db:含有把JBoss jBPM连接到其他数据库的示例配置。 jbpm-design
11、er:含有用于JBoss jBPM可视化流程设计器的Eclipse插件。 jbpm-server:含有JBoss应用服务器和JBoss jBPM引擎以及示例流程。 2.执行JBoss jBPM引擎 为了启动部署了jBPM的JBoss应用服务器,进入jbpm-server目录,执行里面的启动脚本。命令窗口会随同jBPM控制台窗口一起出现,类似图3。 现在,打开浏览器窗口,输入http:/localhost:8080/jbpm。就会看到JBoss jBPM的示例Web应用的登录页面。 以cookie monster用户的身份登录,选择“创建新的Web销售订单”链接。这会创建预制的“Web销售”流程
12、的新实例,如图4所示。 实际的定义文件:processdefinition.xml位于websale.par里面,如以下列表所示: salesman accountancy application is now informed of the payment shipper $shipper now ships $item to $address 一旦“创建新的Web销售订单”页面加载完毕,填写“物品”和“数量”表格字段,其中cookie作为物品,1作为数量。然后选择“保存”和“结束任务”,即可完成“创建新的Web销售订单”任务。Web应用会向jBPM发出信号,要求把Web销售流程标记转移到“
13、评估Web订单”任务,然后使用输入数据作为流程变量。这时候,登录页面会再次显示。你会注意到这样一则消息:“新的任务已分配给ernie。” 现在,选择“以另一个用户登录”链接、以ernie的身份登录。你会注意到:“评估Web订单”任务呈高亮显示。把所需地址输入到注释字段,然后选择“需要更多信息”按钮。这样就可以把流程标记转移到“修复Web订单数据”任务,并且让浏览器回到登录页面。 这时候,可以以cookie monster用户的身份登录,选择“修复Web订单数据”链接,就可以查看高亮显示的任务如何变化、体现流程标记在执行流程中的位置。 重复流程定义在浏览器窗口中显示的步骤,出现提示时以相应用户的
14、身份登录,完成填写每项新任务的表格。你最终会进入到流程末端,这时就会出现屏幕,告诉你流程已完成。jbpm开发指南工作流虽然还在不成熟的发展阶段,甚至还没有一个公认的规范标准。但其应用却已经在快速展开,这说明市场对工作流框架的需求是急迫而巨大的。 我们公司的后台短信管理系统涉及短信编发、领导层层审核等操作,这是一个比较典型的工作流系统。过去我们用的工作流引擎是 shark ,然后在使用后发现其过于庞大,后台数据库操作频繁而未进行优化,直接导致的后果就是前台操作缓慢。于是经研究决定,将工作流引擎由 shark 换成 jBPM 。 jBPM 之前是一个开源软件,后加入 JBoss 组织。正好我们公司
15、也是用 JBoss 的。不过 jBPM 并没有绑定在 JBOSS 上, Tomcat 等也可以使用它。 jBPM 的正处在不断发展中,做为开源软件的特点,其设计变化往往很大。所以一些过去的资料可能已经不适用了。于是作者根据自己的使用经验,重新整理出这份文档,以备学习参考。 注:本文使用的 jBPM 版本为 3.1.1 环境准备 1、安装JDK所有 JAVA 开发第一个需要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。 2、安装AntAnt 是使用 jBPM 必须的一个工具。 jBPM 中的很多操作都要用到 Ant 。 安装方法: ( 1 )先下载: http:/archive
16、.apache.org/dist/ant/binaries/ ,选一个如: apache-ant-1.6.5-bin.zip 。 ( 2 )解压到 D:ant (当然其他目录也可以)。 ( 3 )设置如下系统变量: ANT_HOME=d:ant 。 ( 4 )把 %ANT_HOME%bin 加入到系统变量 PATH 中。 3、安装EclipseEclipse 不是开发 jBPM 必须的工具,但它是对 jBPM 开发很有帮助的工具,特别是 jBPM 提供了一个 Eclipse 插件用来辅助开发 jBPM 。关于 Eclipse 的安装不赘述了,本文用的版本是: Eclipse3.2 安装 jBP
17、M jBPM 的下载地址: l JBoss jBPM 是 jBPM 的软件包 l JBoss jBPM Starters Kit 是一个综合包,它包括了 jBPM 软件包、开发插件、一个配置好了的基于 JBoss 的 jBPM 示例、一些数据库配置文件示例。 l JBoss jBPM Process Designer Plugin 是辅助开发 jBPM 的 Eclipse 插件。 l JBoss jBPM BPEL Extension jBPM 关于 BPEL 的扩展包 本指南选择下载: JBoss jBPM Starters Kit 。下载后解压到 D:jbpm-starters-kit-3
18、.1 ,目录下含有五个子目录: l jbpm jBPM 的软件包 l jbpm-bpel 只含有一个网页 l jbpm-db 各种数据库 hibernate 配置文件示例,有些还包含了相应的 jdbc 驱动程序。 l jbpm-designer 辅助开发 jBPM 的 Eclipse 插件,具体在 jbpm-gpd-feature 子目录中 l jbpm-server 一个已经配置好了的基于 JBoss 的 jBPM 示例 . 感觉下工作流 前面我们说了,在 JBoss jBPM Starters Kit 的 jbpm-server 目录是一个已经配置好的了 jBPM 示例,那么让我们来感觉一
19、下 jBPM 做出的东西吧。 双击 jbpm-server 目录下的 start.bat 文件,启动 JBoss 服务。这时会打开一个 DOS 窗口,启动完成后,日志会不断输出,其中最后一句是“ 13:55:39,937 DEBUG StaticNotifier going to wait for (CMD_EXECUTOR, java.lang.Object1df59bd) ”,这表示 jBPM 在开始工作了,它不断进行轮询。 打开网页: http:/localhost:8080/jbpm/ 得到如下画面 这是一个已经用 jBPM 开发好的用户定单流程,具有下单、审核、估价等流程。它所用的数
20、据库是一个内置的数据库。 以 cookie monster 用户登录,选择“ create new web sale order ”可以创建一个定单。如下图所示,在图左边是填写的定单情况,右边一整个定货流程的示意图,红色框表示流程进行到哪一步了。填写好定单好,选择“ Save and Close Task ”,完成定单提交。 选择右上角的“ Login as another user ”以另外一个用户名 ernie 登录。这时可以看到 ernie 用户的任务列表中多了一项。 点进去后,显示如下画面。这个示例对中文的支持不好,全都显示成了 unicode 码了。不管这什么多,反正知道是这么回事就
21、行了。在 comment 项填写意见,选 OK 按钮,进入到下一步。如果选择 more info needed 按钮,则打回给 cookie monster 用户修改定单。 下面的流程,这里就不再赘述了。在这个很标准的工作流示例中,我们基本可以看到 jBPM 的应用范围还是比较广的。而且从这个示例,我们是看不出有 jBPM 的,也就是说 jBPM 在后台起着作用。 从这个例子,还看不出 jBPM 的优势。不过,如果在一个流程不确定,经常需要变动的项目中, jBPM 的好处将会显然出来。应用 jBPM 后,改变流程只需改变流程描述文件,这将在后面的内容提到。 这是一个已做好的示例,接下来我们将仿
22、造这个实例来开发一个请假流程。jbpm开发指南24 数据库初始化 jBPM 需要数据库支持, jBPM 会把自己的一个初始化数据存储到数据库,同时工作流的数据也是存储到数据库中的。 jBPM 使用 Hibernate 来做为自己的存储层,因此只要是 Hibernate 支持的数据库, jBPM 也就支持。 本文先以 MySQL 为例,然后再以 Oracle 为例,来谈谈 jBPM 的数据库初始化操作。 注:在上面的 JBoss 自带的示例中,并没有设置数据库,那是因为 jBPM 默认使用的是内存数据库 hsqldb 。 4.1 MySQL 1 、首先安装 MySQL 。 MySQL 的安装比较
23、简单,网上也有很多文章,本文不再赘述。本指南所用 MySQL 版本为 MySQL 4.1 ( for windows )。再找一个 MySQL 客户端,目的是方便查看数据库中的数据,本文推荐使用 MySQL 网站上免费提供的“ MySQL Query Brower ”,当然你用其他的客户端也行,比如 MySQL-Front 。 2 、建库 MySQL 中创建一个库,库名: jbpm 3 、生成建表的 SQL 语句并建表 将 jbpm-starters-kit-3.1.1 下的子目录 jbpm 改名为 jbpm.3 ,否则在执行下面的 ant 命令时会报如 jbpm.3 目录不存在的错误: D:
24、jbpm-starters-kit-3.1.1jbpm-dbbuild.xml:361: The following error occurred while executing this line: D:jbpm-starters-kit-3.1.1jbpm-dbbuild.xml:68: Basedir D:jbpm-starters-kit-3.1.1jbpm.3 does not exist 在 DOS 窗下,进入 D:jbpm-starters-kit-3.1.1jbpm-db 目录,执行如下命令: ant mysql.scripts 执行成功后,在 D:jbpm-starters-
25、kit-3.1.1jbpm-dbbuildmysqlscripts 目录里生成了四个 sql 文件,它们做什么用的一看名字就知道了。在 MySQL 客户端中执行“ mysql.create.sql ”脚本,这样将在 jbpm 库中创建一个个的数据表。 4.2 Oracle 先安装好 Oracle 服务器。我们公司有现存的 Oracle 服务器,也提供给了我一个属于我自己的用户名,一登录就可以任意在我的库之下创建表了。所以这一步就省了,没有的自个先装好吧。 访问 Oracle 推荐用“ PLSQL Developer ”。不过要连接 Oracle 还要在本机上装上 Oracle 自己的客户端程序
26、,里面提供了 JDBC 包和一些配置。要连接服务器还得配置一下,我一般都是不用 GUI 而直接改 tnsnames.ora 文件,在我的电脑里此文件的目录地址是: D:oracleora92networkADMINtnsnames.ora ,内容如下 ( 两面有两个配置了 ) : # TNSNAMES.ORA Network Configuration File: E:oracleora92networkadmintnsnames.ora # Generated by Oracle configuration tools. WXXRDB_192.168.3.2 = (DESCRIPTION =
27、 (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.2)(PORT = 1521) ) (CONNECT_DATA = (SID = wxxrDB) (SERVER = DEDICATED) ) ) WXXRDB_192.168.4.2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.2)(PORT = 1521) ) (CONNECT_DATA = (SID = wxxrDB) (SERVER = DEDICATE
28、D) ) ) 前面都是 Oracle 的一些知识,不会的 Google 一下吧。最后配置好后,用 PLSQL Developer 输入你的用户名和密码联接到 Oracle ,就算 OK 了。 参考上面 MySQL 的步骤,基本一样: (1) 将 jbpm 改名为 jbpm.3 (2) 再执行 ant oracle.scripts (3) 用 jbpm-dbbuildoraclescripts 目录的 oracle.create.sql 脚本,在 Oracle 中生成 jBPM 的所有表。在“ PLSQL Developer ”中可以新建一个 Command Windows 窗口然后输入命令:
29、D:jbpm-starters-kit-3.1.1jbpm-dbbuildoraclescriptsoracle.create.sql jbpm开发指南35 安装 jBPM 的 Eclipse 开发插件 有个辅助工具开发起来方便一点,只不过现在 jBPM 的开发工具插件功能还不算太强,也就一个“项目创建向导”的功能,让你: (1)不用再去配置 classpath 库的引用了 (2)直接得到了一个 jBPM 的项目初始结构 其实吧,开发 jBPM 也不需要什么插件工具,在熟练了以后,库引用了项目初始结构都可以手工创建。 插件不用再去下载了, jbpm-starters-kit-3.1.1 包里就
30、有,目录地址如下: D:jbpm-starters-kit-3.1.1jbpm-designerjbpm-gpd-featureeclipse ,插件的安装方式是链接式还是直接复制式,任选吧。不懂的就去看看 Eclipse 从入门精通这本书,在前面章节都有讲到。另外,注明一下 Eclipse 的版本我是用 3.2 ,插件和 Eclispe 版本相关的,要注意了。 如果安装成功,则 Eclipse 首选项里多了一个 JBoss jBPM ,另外我们也需要到这个 jBPM 的首选项里做一些配置工作指定 jBPM 的安装路径(如下图所示)。这个配置主要是为了找到 jbpm 下的各种 jar 包,好让
31、 Eclipse 设置项目的库引用。本文指向路径是 d:jbpm-starters-kit-3.1.1jbpm.3 6 jBPM 的 Hello World 6.1新建jBPM项目 主菜单“文件新建项目”,在弹出的对话框里,有“ Process Project ”项,如下图所示: 选上好,单击“下一步”,起个名“ myjbpm ”,然后就可以单击“完成”了。然后就生成了如下图所示的一个项目结构: 这个项目和通常 Eclipse 的项目结构有点不同,不过这是一个现在非常流行的项目结构, src/java 存放源文件, test/java 存放相应的 JUnit 单元测试代码。如果你用 Maven
32、 来编译构建项目,对这种目录结构一定不陌生。 项目创建起了,介绍一下里面的文件吧: l MessageActionHandler ,自动生成的一个 ActionHandler 。不想要可以删掉。 l ehcache.xml cache 的配置文件,里面有很详解的英文说明。没有必要可以不用改它。 l hibernate.cfg.xml jBPM 是用 Hibernate 进行工作流的数据存储的,这个就是 Hibernate 的配置文件。后面我们将讲到如何配置这个文件。 l jbpm.cfg.xml jbpm 本身的配置文件。现在是空的,它用的是缺省配置,你想知道有哪些配置就去看这个文件 D:jb
33、pm-starters-kit-3.1.1jbpm.3srcjava.jbpmorgjbpmdefault.jbpm.cfg.xml l log4j.properties 这个是日志 API 包 log4j 的配置文件,用过 log4j 的都知道。 l SimpleProcessTest.java 这个是对最重要的流程配置文件的 processdefinition.xml 单元测试代码。这里表扬一点, jBPM 的优良设计使得它的可测试性非常之高,喜欢写 t 单元测试的人有福了。 l gpd.xml 用于生成流程图的定义文件。都是一些方框的坐标和长宽 l processdefinition.x
34、ml 这个是对最重要的流程配置文件,以后写流程要经常和它打交道。 l processimage.jpg 一个流程图 从项目结构来看,我们没有看到 JSP 网页程序,也没有看到 GUI 客户端程序,这些代码都是要我们以后开发中来写的。但本文不准备用 JSP 、 GUI ( Swing 、 SWT )来做示例,而是用 JUnit 代码来做使用 jBPM 客户端来演示。因为 jBPM 实际上是一个后台框架,至于前台是 JSP 还是 Swing 还是无界面的 java.class 都是无关紧要的。在教程里用无界面的 java.class 来做客户端则更方便一些,如果进一步采用 JUnit ,则这样的
35、java.class 同时还具备了单元测试的功能。以后就是用 JSP 写了 WEB 页面,我们还是可以用这些 JUnit 程序来做单元测试,避免了频繁的鼠标点按 WEB 页面这样的力气活。所以在 jBPM 自带的英文教程里都是一个 JUnit 程序,不仔佃看还真摸不着头脑。 6.2修改hibernate.cfg.xml hibernate.cfg.xml 的默认设置是用 HSQL ,这是一个内存数据库,这种内存数据库用来代替项目实际所用的数据库来做单元测试挺不错的。不过我们这里是要试试用 MySQL 、 Oracle ,那就改一下设置吧。 注:配置值可参考 D:jbpm-starters-kit-3.1.1jbpm-db 对应子目录下的 hi