jbpm.docx
- 文档编号:7126783
- 上传时间:2023-01-20
- 格式:DOCX
- 页数:24
- 大小:336.86KB
jbpm.docx
《jbpm.docx》由会员分享,可在线阅读,更多相关《jbpm.docx(24页珍藏版)》请在冰豆网上搜索。
jbpm
什么是工作流
工作流是业务流程的全部或部分自动化,在此过程中,文档、信息或任务按照一定的过程规则流转,实现组织成员间的协同工作,以达到业务的整体目标。
工作流管理系统是支持企业经营过程高效执行并监控其执行过程的计算机软件系统。
典型的WFMS至少由如下几个模块组成:
业务流程建模定义工具、过程定义、工作流执行环境(引擎)、任务管理。
当然还会包括应用和IT工具。
常用的工作流引擎有osworkflow,jbpm,shark。
刚学习了一点osworkflow,现在转向jbpm,公司要求,没办法。
osworkflow,最大特点就是灵活,这个网上都说遍了。
也就是说它提供了一个引挚,在此基础上你可以进行扩展,可以自已写一些条件、动作类,只是继承它的接口就行,不需要修改它的源代码。
他只提供一个工作流控制框架给你,他也只专注于管理工作流自身的东西,对其他的东西不管,其他的功能对他来说都只是一个插件组件。
所以你可以自己扩展里面的功能,例如用户管理模式,工作流本身不带用户模式,他公司的另外一个项目osuser,可以结合使用来管理用户权限,当然你可以不用osuer,自己建立自己的用户模式,其实就是建立自己的运行判断条件;支持多种插件式的持久化机制;他的数据表也很少,就三个…
Shark的流程定义语言是XPDL,我们知道,XPDL的两个最重要的概念是Process和Activity。
XPDL中的Activity是基于UML1.x中的活动图的概念。
活动图天生的适于工作流程建模,它相对于状态图的一个最大的优点是容易做并发线程的分叉控制,这些并发线程可以同时执行也可以顺序执行;它还有一个优点是有泳道的概念,可以控制工作流引擎中的任务的产生。
Shark的如来神掌是活动图。
Osworkflow的如来神掌又是什么呢?
我们知道,它有个重要概念是State……呵呵,我们知道了,它的如来神掌是FSM。
不知道FSM是什么东西?
?
那你读大学时肯定不是好学生;当然了,不知道也不打紧,你把他类似理解为状态图就可以了。
Osworkflow中的State是由step和status联合表达的,一个State就是一个step中的某个status;而state的转换由action来驱动,类似状态图中的event,因为一个event对应一个action嘛。
Jbpm的如来神掌就没有上面的简单了,它结合应用了状态图+活动图+PetriNet的知识,而且,这里的活动图还是UML2.0版的。
UML2.0的活动图中,节点不叫活动(Activity)而叫动作(action),活动成了一个高层次的概念,它包含一个动作序列。
一个活动图展现一系列的动作,这些动作组成了活动。
Jbpm把action也改名了,称为state。
Jbpm使用的状态图的概念有transition/event等,这个自己去看吧。
Jbpm来内部实现中还采用了PetriNet的概念,如token,signal等。
什么?
又不知道PetriNet什么东东?
那你大学是学计算机的吗?
不是?
那你可能是学文科的,学机械/电气/土木工程/交通运输等专业都有接触PetriNet的课程,如果没有学过,还是看看jbpm吧,反正我们也不搞理论,知道大致概念就行。
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的下载地址:
● JBossjBPM是jBPM的软件包
● JBossjBPMStartersKit 是一个综合包,它包括了jBPM软件包、开发插件、一个配置好了的基于JBoss的jBPM示例、一些数据库配置文件示例。
● JBossjBPMProcessDesignerPlugin 是辅助开发jBPM的Eclipse插件。
● JBossjBPMBPELExtensionjBPM关于BPEL的扩展包
本指南选择下载:
JBossjBPMStartersKit。
下载后解压到D:
\jbpm-starters-kit-3.1,目录下含有五个子目录:
●jbpmjBPM的软件包
●jbpm-bpel只含有一个网页
●jbpm-db各种数据库hibernate配置文件示例,有些还包含了相应的jdbc驱动程序。
●jbpm-designer 辅助开发jBPM的Eclipse插件,具体在jbpm-gpd-feature子目录中
●jbpm-server已经配置好了的基于JBoss的jBPM示例.
感觉下工作流
前面我们说了,在JBossjBPMStartersKit的jbpm-server目录是一个已经配置好的了jBPM示例,那么让我们来感觉一下jBPM做出的东西吧。
双击jbpm-server目录下的start.bat文件,启动JBoss服务。
这时会打开一个DOS窗口,启动完成后,日志会不断输出,其中最后一句是“13:
55:
39,937DEBUG[StaticNotifier]goingtowaitfor(CMD_EXECUTOR,java.lang.Object@1df59bd)”,这表示jBPM在开始工作了,它不断进行轮询。
打开网页:
http:
//localhost:
8080/jbpm/得到如下画面
是一个已经用jBPM开发好的用户定单流程,具有下单、审核、估价等流程。
它所用的数据库是一个内置的数据库。
以cookiemonster用户登录,选择“createnewwebsaleorder”可以创建一个定单。
如下图所示,在图左边是填写的定单情况,右边一整个定货流程的示意图,红色框表示流程进行到哪一步了。
填写好定单好,选择“SaveandCloseTask”,完成定单提交。
选择右上角的“Loginasanotheruser”以另外一个用户名ernie登录。
这时可以看到ernie用户的任务列表中多了一项。
点进去后,显示如下画面。
这个示例对中文的支持不好,全都显示成了unicode码了。
不管这什么多,反正知道是这么回事就行了。
在comment项填写意见,选OK按钮,进入到下一步。
如果选择moreinfoneeded按钮,则打回给cookiemonster用户修改定单。
下面的流程,这里就不再赘述了。
在这个很标准的工作流示例中,我们基本可以看到jBPM的应用范围还是比较广的。
而且从这个示例,我们是看不出有jBPM的,也就是说jBPM在后台起着作用。
从这个例子,还看不出jBPM的优势。
不过,如果在一个流程不确定,经常需要变动的项目中,jBPM的好处将会显然出来。
应用jBPM后,改变流程只需改变流程描述文件,这将在后面的内容提到。
这是一个已做好的示例,接下来我们将仿造这个实例来开发一个请假流程。
jBPM开发入门指南
(2)
4数据库初始化
jBPM需要数据库支持,jBPM会把自己的一个初始化数据存储到数据库,同时工作流的数据也是存储到数据库中的。
jBPM使用Hibernate来做为自己的存储层,因此只要是Hibernate支持的数据库,jBPM也就支持。
本文先以MySQL为例,然后再以Oracle为例,来谈谈jBPM的数据库初始化操作。
注:
在上面的JBoss自带的示例中,并没有设置数据库,那是因为jBPM默认使用的是内存数据库hsqldb。
4.1MySQL
1、首先安装MySQL。
MySQL的安装比较简单,网上也有很多文章,本文不再赘述。
本指南所用MySQL版本为MySQL4.1(forwindows)。
再找一个MySQL客户端,目的是方便查看数据库中的数据,本文推荐使用MySQL网站上免费提供的“MySQLQueryBrower”,当然你用其他的客户端也行,比如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:
Thefollowingerroroccurredwhileexecutingthisline:
D:
\jbpm-starters-kit-3.1.1\jbpm-db\build.xml:
68:
BasedirD:
\jbpm-starters-kit-3.1.1\jbpm.3doesnotexist
在DOS窗下,进入D:
\jbpm-starters-kit-3.1.1\jbpm-db目录,执行如下命令:
antmysql.scripts
执行成功后,在D:
\jbpm-starters-kit-3.1.1\jbpm-db\build\mysql\scripts目录里生成了四个sql文件,它们做什么用的一看名字就知道了。
在MySQL客户端中执行“mysql.create.sql”脚本,这样将在jbpm库中创建一个个的数据表。
4.2Oracle
先安装好Oracle服务器。
我们公司有现存的Oracle服务器,也提供给了我一个属于我自己的用户名,一登录就可以任意在我的库之下创建表了。
所以这一步就省了,没有的自个先装好吧。
访问Oracle推荐用“PLSQLDeveloper”。
不过要连接Oracle还要在本机上装上Oracle自己的客户端程序,里面提供了JDBC包和一些配置。
要连接服务器还得配置一下,我一般都是不用GUI而直接改tnsnames.ora文件,在我的电脑里此文件的目录地址是:
D:
\oracle\ora92\network\ADMIN\tnsnames.ora,内容如下(两面有两个配置了):
#TNSNAMES.ORANetworkConfigurationFile:
E:
\oracle\ora92\network\admin\tnsnames.ora
#GeneratedbyOracleconfigurationtools.
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一下吧。
最后配置好后,用PLSQLDeveloper输入你的用户名和密码联接到Oracle,就算OK了。
参考上面MySQL的步骤,基本一样:
(1) 将jbpm改名为jbpm.3
(2) 再执行antoracle.scripts
(3) 用jbpm-db\build\oracle\scripts目录的oracle.create.sql脚本,在Oracle中生成jBPM的所有表。
在“PLSQLDeveloper”中可以新建一个CommandWindows窗口然后输入命令:
@D:
\jbpm-starters-kit-3.1.1\jbpm-db\build\oracle\scripts\oracle.create.sql
jBPM开发入门指南(3)
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首选项里多了一个JBossjBPM,另外我们也需要到这个jBPM的首选项里做一些配置工作――指定jBPM的安装路径(如下图所示)。
这个配置主要是为了找到jbpm下的各种jar包,好让Eclipse设置项目的库引用。
本文指向路径是d:
\jbpm-starters-kit-3.1.1\jbpm.3
6jBPM的HelloWorld
6.1新建jBPM项目
主菜单“文件->新建->项目”,在弹出的对话框里,有“ProcessProject”项,如下图所示:
选上好,单击“下一步”,起个名“myjbpm”,然后就可以单击“完成”了。
然后就生成了如下图所示的一个项目结构:
这个项目和通常Eclipse的项目结构有点不同,不过这是一个现在非常流行的项目结构,src/java存放源文件,test/java存放相应的JUnit单元测试代码。
如果你用Maven来编译构建项目,对这种目录结构一定不陌生。
项目创建起了,介绍一下里面的文件吧:
●MessageActionHandler,自动生成的一个ActionHandler。
不想要可以删掉。
●ehcache.xmlcache的配置文件,里面有很详解的英文说明。
没有必要可以不用改它。
● hibernate.cfg.xml jBPM是用Hibernate进行工作流的数据存储的,这个就是Hibernate的配置文件。
后面我们将讲到如何配置这个文件。
● jbpm.cfg.xml jbpm本身的配置文件。
现在是空的,它用的是缺省配置,你想知道有哪些配置就去看这个文件D:
\jbpm-starters-kit-3.1.1\jbpm.3\src\java.jbpm\org\jbpm\default.jbpm.cfg.xml
● log4j.properties 这个是日志API包log4j的配置文件,用过log4j的都知道。
● SimpleProcessTest.java 这个是对最重要的流程配置文件的processdefinition.xml单元测试代码。
这里表扬一点,jBPM的优良设计使得它的可测试性非常之高,喜欢写t单元测试的人有福了。
● gpd.xml 用于生成流程图的定义文件。
都是一些方框的坐标和长宽
● processdefinition.xml 这个是对最重要的流程配置文件,以后写流程要经常和它打交道。
● processimage.jpg 一个流程图
从项目结构来看,我们没有看到JSP网页程序,也没有看到GUI客户端程序,这些代码都是要我们以后开发中来写的。
但本文不准备用JSP、GUI(Swing、SWT)来做示例,而是用JUnit代码来做使用jBPM客户端来演示。
因为jBPM实际上是一个后台框架,至于前台是JSP还是Swing还是无界面的java.class都是无关紧要的。
在教程里用无界面的java.class来做客户端则更方便一些,如果进一步采用JUnit,则这样的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.1\jbpm-db对应子目录下的hibernate.properties文件。
1、MySQL的更改如下:
mysql:
//localhost:
3306/jbpm
2、Oracle的更改如下:
oracle:
thin:
@192.168.123.10:
1521:
wxxrDB
如果你装了Oracle的客户端,并且D:
\oracle\ora92\network\ADMIN\tnsnames.ora里做了如下的设置
WXXRDB_192.168.123.10=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.123.10)(PORT=1521))
)
(CONNECT_DATA=
(SID=wxxrDB)
(SERVER=DEDICATED)
)
)
则Oracle的hibernate.connection.url项也可以设为:
jdbc:
oracle:
oci:
@WXXRDB_192.168.123.10
6.3 完善库引用
虽然jBPM在创建项目之初给我们设置好了库引用,如下图
但后面运行时还是报一些NoClassDefFoundError异常,如没有对hibernate3.jar的引用导致下面的错误
java.lang.NoClassDefFoundError:
org/hibernate/Session
atorg.jbpm.persistence.db.DbPersistenceServiceFactory.openService(DbPersistenceServiceFactory.java:
55)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jbpm