我的知识库

知识等于力量

« 大型数据库设计原则Get a better handle on Struts actions, with Spring »

jbpm 指南123

JBoss jBPM 3.0工作流和业务流程管理的具体实现

目录

第一章 绪论

 JBoss jBPM 是一个灵活的,易扩展的工作流管理系统。JBoss jBPM有一套直观的流程建模语言,这套语言能用任务(task),异步通信的等待状态(wait state ),定时器(timer),自动化的动作(automated action)等来图形化的表示业务流程。为了把这些操作集成在一

起,JBoss jBPM拥有强大的,易扩展的控制流程机制。

JBoss jBPM对外依赖程度很小,你完全可以像用java的类库一样用它。并且它也可以被部署在高性能的J2EE集群应用服务器上。

JBoss jBPM能配置在任何数据库上,并且能被部署在任何的应用服务器上。

1.1 总览

 工作流和业务流程处理功能的核心部分被打包成一个简单的java类库。这个类库包括了这样一个服务:流程信息的存储,更新,和从数据库中重新取回。

   

1.1JBoss jBPM组成模块的概略图

1.2 JBoss jBPM starter kit

 

 

starter kit是一个包含jbpm所有模块的下载包。这个下载包中包括以下模块:

 

 

·                                 jbpm-server, 一个预选配置好的jboss应用服务器。

 

 

·                                 jbpm-designer, 图形化定制流程的eclipse插件。

 

 

·                                 jbpm-db, jBPM的数据库兼容包 (见后边论述)

 

 

·                                 jbpm, jbpm的核心模块,其中包括libs文件夹和这个用户说明。

 

 

·                                 jbpm-bpel, JBoss jBPMBPEL扩展的一些参考资料

 

 

预先配置好的JBoss应用服务器具有如下组成部分:

jBPM核心模块,被打包成一个用于提供服务的存档文件

 

 

带有jbpm表的集成数据:默认的hypersonic数据库拥有jbpm表,并且这个表已经拥有一个流程了。

 

 

Jbpmweb控制台,它既可以被Jbpm管理员用也可以被流程的参与者使用。

执行定时器的Jbpm的调度程序,这个调度程序在starter kit里边被配置成一个servlet。这个servlet会产生一个新的线程来监视和执行定时器。

 

 

一个具体流程的例子,它已经被部署在jbpm数据库中了。

 

 

1.3 JBoss jBPM 流程图形定制器

 

 

JBoss jBPM还拥有一套图形化的设计工具。这个设计器是一个图形化的业务流程定制工具。

 

 

JBoss jBPM流程图形定制器是eclipse的一个插件。单独安装这个定制器非常简单。

 

 

这个图形设计器最重要的特性是:业务分析人员也能像技术开发人员一样用它来完成任务。这使得业务流程建模能平滑的转换到具体技术实现。

 

 

这个插件可以利用eclipse的一般升级机制通过一个升级站点得到安装(zip文件格式)。也可以通过解压一个特定的包到eclipse的安装目录来安装此插件。

 

 

1.4 JBoss jBPM的核心模块

 

 

JBoss jBPM的核心模块是一个用来管理流程定义和流程实例的执行环境的普通java程序。

 

 

JBoss jBPM是一个java类库。所以它可以被用在任何java环境中,比如:web应用程序,swing应用程序,EJBweb service……。JBPM类库还可以被打包并被当成无状态会话EJBstateless session EJB)使用。这样可使它被部署在集群上并且适应高性能应用。这些无状态会话EJB必须符合J2EE1.3规范这样才能使它可以被部署在任何应用服务器上。

 

 

JBoss jBPM的核心模块被打包成一个简单的java库文件。依你功能的需要,jbpm-3.0.jar这个库文件对一些第三方的类库比如hibernate, dom4j有所依赖。这些依赖在第五章(部署)中作了详细的说明。

 

 

至于持久化,JBPM在内部用了hibernate。除了传统的O/R映射功能,hibernate还解决了不同数据SQL dialect差异的问题,这使得JBPM能适应现在所有的数据库。

 

 

JBoss jBPM API可以被你工程中任何的java代码调用,比如,你的web应用程序,EJBweb service 模块,消息驱动bean或其它任何java模块。

 

 

1.5 JBoss jBPM web应用程序的控制台

 

 

jBPM web应用程序的控制台提供两种服务。首先,它被用来当作一个用来和流程执行过程中产生的任务进行交互的主要用户接口,其次,它还是一个用来检查和操作运行实例的管理和监控平台。

 

 

1.6 JBoss jBPM人员组织模块

 

 

JBoss jBPM可以和任何包括人员和其他组织信息的公司结构集成在一起。但是对那些组织结构信息模块很难获取的项目,JBoss jBPM提供了这个模块。这个模块使用的模型要比传统的servlet, ejb,portlet模型丰富的多。

 

 

更多信息,请参照第九章第九节 人员组织模块

 

 

1.7 JBoss jBPM调度程序

 

 

JBoss jBPM调度程序是一个用来监测和执行在流程执行过程中设置的定时器的模块。

 

 

定时器模块被打包在jbpm的核心包中,但是它必须被部署在以下环境中:或者你必须订制一个调度servlet,它来产生一个监测线程,或者你必须启动一个单独的JVM来执行调度程序。

 

 

1.8 JBoss jBPM 数据库兼容包

 

 

JBoss jBPM 数据库兼容包是一个下载包,它包括所有的资料,driversscripts,用这些你可以使jbpm运行在你选择的数据库上。

 

 

1.9 JBoss jBPM BPE的扩展

 

 

JBoss jBPM BPE的扩展是一个为了支持BPEL独立的扩展包。BPEL的本质就是一组用来参照别的web serviceweb servicexml脚本语言。

 

 

4 数据库初始化

 

jBPM 需要数据库支持, jBPM 会把自己的一个初始化数据存储到数据库,同时工作流的数据也是存储到数据库中的。 jBPM 使用 Hibernate 来做为自己的存储层,因此只要是 Hibernate 支持的数据库, jBPM 也就支持。

 

 

本文先以 MySQL 为例,然后再以 Oracle 为例,来谈谈 jBPM 的数据库初始化操作。

 

 

注:在上面的 JBoss 自带的示例中,并没有设置数据库,那是因为 jBPM 默认使用的是内存数据库 hsqldb

 

4.1  MySQL

 

 

1 、首先安装 MySQL

 

MySQL 的安装比较简单,网上也有很多文章,本文不再赘述。本指南所用 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:\jbpm-starters-kit-3.1.1\jbpm-db\build.xml:361: The following error occurred while executing this line:

 

D:\jbpm-starters-kit-3.1.1\jbpm-db\build.xml:68: Basedir D:\jbpm-starters-kit-3.1.1\jbpm.3 does not exist

 

 

DOS 窗下,进入 D:\jbpm-starters-kit-3.1.1\jbpm-db 目录,执行如下命令:

 

ant mysql.scripts

 

 

执行成功后,在 D:\jbpm-starters-kit-3.1.1\jbpm-db\build\mysql\scripts 目录里生成了四个 sql 文件,它们做什么用的一看名字就知道了。在 MySQL 客户端中执行“ mysql.create.sql ”脚本,这样将在 jbpm 库中创建一个个的数据表。

 

 

 

4.2  Oracle

 

先安装好 Oracle 服务器。我们公司有现存的 Oracle 服务器,也提供给了我一个属于我自己的用户名,一登录就可以任意在我的库之下创建表了。所以这一步就省了,没有的自个先装好吧。

 

访问 Oracle 推荐用“ PLSQL Developer ”。不过要连接 Oracle 还要在本机上装上 Oracle 自己的客户端程序,里面提供了 JDBC 包和一些配置。要连接服务器还得配置一下,我一般都是不用 GUI 而直接改 tnsnames.ora 文件,在我的电脑里此文件的目录地址是: D:\oracle\ora92\network\ADMIN\tnsnames.ora ,内容如下 ( 两面有两个配置了 )

 

# TNSNAMES.ORA Network Configuration File: E:\oracle\ora92\network\admin\tnsnames.ora

 

# Generated by Oracle configuration tools.

 

 

WXXRDB_192.168.3.2 =

 

  (DESCRIPTION =

 

    (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 = DEDICATED)

 

    )

 

  )

 

 

前面都是 Oracle 的一些知识,不会的 Google 一下吧。最后配置好后,用 PLSQL Developer 输入你的用户名和密码联接到 Oracle ,就算 OK 了。

 

 

参考上面 MySQL 的步骤,基本一样:

 

1       jbpm 改名为 jbpm.3

 

2       再执行 ant oracle.scripts

 

3       jbpm-db\build\oracle\scripts 目录的 oracle.create.sql 脚本,在 Oracle 中生成 jBPM 的所有表。在“ PLSQL Developer ”中可以新建一个 Command Windows 窗口然后输入命令: @D:\jbpm-starters-kit-3.1.1\jbpm-db\build\oracle\scripts\oracle.create.sql

 


5  安装 jBPM Eclipse 开发插件

 

有个辅助工具开发起来方便一点,只不过现在 jBPM 的开发工具插件功能还不算太强,也就一个“项目创建向导”的功能,让你:

 

1)不用再去配置 classpath 库的引用了

 

2)直接得到了一个 jBPM 的项目初始结构

 

其实吧,开发 jBPM 也不需要什么插件工具,在熟练了以后,库引用了项目初始结构都可以手工创建。

 

 

插件不用再去下载了, jbpm-starters-kit-3.1.1 包里就有,目录地址如下: D:\jbpm-starters-kit-3.1.1\jbpm-designer\jbpm-gpd-feature\eclipse ,插件的安装方式是链接式还是直接复制式,任选吧。不懂的就去看看《 Eclipse 从入门精通》这本书,在前面章节都有讲到。另外,注明一下 Eclipse 的版本我是用 3.2 ,插件和 Eclispe 版本相关的,要注意了。

 

 

如果安装成功,则 Eclipse 首选项里多了一个 JBoss jBPM ,另外我们也需要到这个 jBPM 的首选项里做一些配置工作――指定 jBPM 的安装路径(如下图所示)。这个配置主要是为了找到 jbpm 下的各种 jar 包,好让 Eclipse 设置项目的库引用。本文指向路径是 d:\jbpm-starters-kit-3.1.1\jbpm.3

 

 

 

6   jBPM Hello World

 

6.1 新建jBPM项目

 

主菜单“文件->新建->项目”,在弹出的对话框里,有“ Process Project ”项,如下图所示:

 

 


选上好,单击“下一步”,起个名“ myjbpm ”,然后就可以单击“完成”了。然后就生成了如下图所示的一个项目结构:  

这个项目和通常 Eclipse 的项目结构有点不同,不过这是一个现在非常流行的项目结构, src/java 存放源文件, test/java 存放相应的 JUnit 单元测试代码。如果你用 Maven 来编译构建项目,对这种目录结构一定不陌生。

 

 

项目创建起了,介绍一下里面的文件吧:

 

l           MessageActionHandler ,自动生成的一个 ActionHandler