现在的位置: 首页 > 综合 > 正文

jBPM开发入门指南(1)

2013年10月16日 ⁄ 综合 ⁄ 共 3105字 ⁄ 字号 评论关闭

jBPM开发入门指南(1)

工作流虽然还在不成熟的发展阶段,甚至还没有一个公认的规范标准。但其应用却已经在快速展开,这说明市场对工作流框架的需求是急迫而巨大的。

我们公司的后台短信管理系统涉及短信编发、领导层层审核等操作,这是一个比较典型的工作流系统。过去我们用的工作流引擎是 shark ,然后在使用后发现其过于庞大,后台数据库操作频繁而未进行优化,直接导致的后果就是前台操作缓慢。于是经研究决定,将工作流引擎由 shark 换成 jBPM

jBPM 之前是一个开源软件,后加入 JBoss 组织。正好我们公司也是用 JBoss 的。不过 jBPM 并没有绑定在 JBOSS 上, Tomcat 等也可以使用它。

jBPM 的正处在不断发展中,做为开源软件的特点,其设计变化往往很大。所以一些过去的资料可能已经不适用了。于是作者根据自己的使用经验,重新整理出这份文档,以备学习参考。

注:本文使用的 jBPM 版本为 3.1.1

环境准备

1、安装JDK

所有 JAVA 开发第一个需要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。

2、安装Ant

Ant 是使用 jBPM 必须的一个工具。 jBPM 中的很多操作都要用到 Ant

安装方法:

1 )先下载: http://archive.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、安装Eclipse

Eclipse 不是开发 jBPM 必须的工具,但它是对 jBPM 开发很有帮助的工具,特别是 jBPM 提供了一个 Eclipse 插件用来辅助开发 jBPM 。关于 Eclipse 的安装不赘述了,本文用的版本是: Eclipse3.2

 

安装 jBPM

jBPM 的下载地址: http://www.jboss.org/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.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 示例,那么让我们来感觉一下 jBPM 做出的东西吧。

 

双击 jbpm-server 目录下的 start.bat 文件,启动 JBoss 服务。这时会打开一个 DOS 窗口,启动完成后,日志会不断输出,其中最后一句是“ 13:55:39,937 DEBUG [StaticNotifier] going to wait for (CMD_EXECUTOR, java.lang.Object@1df59bd) ”,这表示 jBPM 在开始工作了,它不断进行轮询。

打开网页: http://localhost:8080/jbpm/  得到如下画面

 

这是一个已经用 jBPM 开发好的用户定单流程,具有下单、审核、估价等流程。它所用的数据库是一个内置的数据库。

cookie monster 用户登录,选择“ create new web sale order ”可以创建一个定单。如下图所示,在图左边是填写的定单情况,右边一整个定货流程的示意图,红色框表示流程进行到哪一步了。填写好定单好,选择“ Save and Close Task ”,完成定单提交。

 

选择右上角的“ Login as another user ”以另外一个用户名 ernie 登录。这时可以看到 ernie 用户的任务列表中多了一项。

 

点进去后,显示如下画面。这个示例对中文的支持不好,全都显示成了 unicode 码了。不管这什么多,反正知道是这么回事就行了。在 comment 项填写意见,选 OK 按钮,进入到下一步。如果选择 more info needed 按钮,则打回给 cookie monster 用户修改定单。

 

下面的流程,这里就不再赘述了。在这个很标准的工作流示例中,我们基本可以看到 jBPM 的应用范围还是比较广的。而且从这个示例,我们是看不出有 jBPM 的,也就是说 jBPM 在后台起着作用。

从这个例子,还看不出 jBPM 的优势。不过,如果在一个流程不确定,经常需要变动的项目中, jBPM 的好处将会显然出来。应用 jBPM 后,改变流程只需改变流程描述文件,这将在后面的内容提到。

这是一个已做好的示例,接下来我们将仿造这个实例来开发一个请假流程。

作者简介
陈刚,广西桂林人,著作有《Eclipse从入门到精通》
您可以通过其博客了解更多信息和文章:http://www.chenGang.com.cn  

要知道为什么需要工作流引擎,我们首先要知道如果没有工作流引擎,那么究竟会发生什么事情?

设想一个典型的业务流程场景:公文流转。假设有一个请假流程,需要经过张三、李四、王五三个人的审批之后,才能结束,那么你作为程序员,你会如何做呢?

毫无疑问,首先第一步,你需要整理一下思路,看一看在这个请假模块中,你需要做哪些最基本的功能:

第一、   创建请假单

第二、   将请假单提交给张三

第三、   张三审批请假单之后,将请假单交给李四

第四、   李四审批请假单之后,将请假单交给王五

第五、   王五审批请假单之后,准假,结束

 

第二步,现在是不是得看一看这里面有哪些概念,以便于进一步的设计?用户、请假单,是这个需求中两个基本的概念。用户包括:用户名、用户密码属性;请假单包括:请假者、请假事项、请假开始时间、请假结束时间属性

 

第三步,考虑到要实现审批功能,在请假单和用户之间还会有另外一个关联:审批。

一个请假单可以经过多个用户的审批,而一个用户当然也可以审批多个文档,因此这是一个非常明显的多对多关联:

 

第四步,现在我们来考虑一下审批提交功能的实现:

1、将请假单提交给张三时:

   if 请假单是新建的 then 设置请假单的审批者为 张三

2、张三将请假单提交给李四时:

   if 请假单目前的审批者是张三 then 设置请假单的审批者为 李四

3、…… 其它功能依次类推

在做每一步操作的时候,都需要做一些前置条件的判断。如果不使用流程引擎技术,则流程逻辑将被硬编码于程序之中,使得一旦流程发生变化,维护起来异常困难。所以,为何需要流程引擎,也就不言自明了。流程引擎存在的理由是对这些容易变化的业务流程进行封装,为此,我们必须找到某种描述业务流程的手段,在JBPM中,这个称为JPDL(业务流程定义语言)。流程引擎同时也会给我们提供一些稳定的接口,我们的程序只要调用引擎的这些接口操作流程即可。

抱歉!评论已关闭.