JBoss jBPM
是一个灵活的,易扩展的工作流管理系统。
JBoss jBPM
有一套直观的流程建模语言,这套语言能用任务(
task
),异步通信的等待状态(
wait state
),定时器(
timer
),自动化的动作(
automated action
)等来图形化的表示业务流程。把这些操作集成在一起,
JBoss jBPM
拥有强大的,易扩展的控制流程机制。
JBoss jBPM
对外依赖程度很小,你完全可以像用
java
的类库一样用它。并且它也可以被部署在高性能的
J2EE
集群应用服务器上。
JBoss jBPM
能通过配置运行在任何数据库上,并且能被部署在任何的应用服务器上。
流程建模语言jPDL
jBPM业务程序定义语言jBPM Process Definition Language (JPDL),是jBPM使用的一套面向图表的流程建模语言。是一种特定领域语言(DSL)。
它是对WFMC(工作流管理联盟)提出的XML Processing Description Language (XPDL)语言的扩展,增加了一些jBPM自己的元素。
它的特点是,有几种状态节点。
1,State等待状态。进入这种状态,整个业务程序实例的执行就会中断。直到系统外参与者发起继续执行的命令,业务程序实例的执行才能够继续下去。
2,Node节点状态。这种状态和State相反。当业务程序实例执行到这个节点,不会停止执行。而是会继续往下执行。如果存在该节点存在多个离开转向。那么,就会执行其中的第一个离开转向。
在Node状态中,不需要外部参与者的参与,业务流程的这个部分是自动的、即时完成的。
3,Decision决定状态。Decision和Node一样,都是即时状态,而不是等待状态。Decision的多个离开转向transition中可以设置条件。业务程序实例执行到Decision状态时,会依次计算所有的离开转向的条件,遇到条件为真的转向时,就会立即执行这个转向。
如果没有为转向设置条件,那么这个转向的条件值就是true。
Decision是功能最强大的即时状态。
4,TaskNode任务节点。TaskNode和State一样,都是等待状态。TaskNode是功能最强大的等待状态。jBPM为TaskNode提供了强大的支持机制。所以,强烈建议用户使用TaskNode来处理等待状态!
TaskNode节点内,可以有多个Task任务。任务是由外部参与者负责处理的等待状态。任务需要由外部参与者结束。
默认条件下,一个任务节点的所有任务实例都结束之后,业务程序实例的执行才能继续下去。但是,你也可以设置成从不继续,或者立刻继续执行。或者第一个任务完成后就执行,等等。
也可以由外部参与者在结束任务实例时指定执行哪一个转向Transition,继续流程。
另外,注意:除了TaskNode节点能够包含Task外,Start-State也可以包含任务。但是它只能包含一个任务。这个任务的用途是,让业务程序实例的发起者创建管理的资源等任务。
在jBPM提供的Web管理应用程序中,使用了一种Web开发技术,这种技术我没有见过。它提供了一个管理业务程序实例,特别是管理任务的强大功能。
只要一个业务程序定义的Start-state中包含Task定义,那么就可以在Web程序中创建这个业务程序定义的一个实例。
这个Web程序还能够根据业务程序定义,自动创建对应任务实例变量的表单和对应离开转向的按钮。
这个Web程序尽管非常强大,但是,它使用的是一种我所不熟悉的非主流的技术。所以,在自己的应用程序中,最好自己写前台表示层,而不是使用它的技术。
jBPM的构造技术
jBPM是一个业务程序管理引擎,是一个工作流引擎。它实现了对jPDL的支持。它还实现了对BPEL的支持。关于jBPM对BPEL的支持,我还没有研究。
作为一个工作流引擎,就必须要处理“等待状态”。jBPM整合了Hibernate技术处理数据库,它创建了一系列的数据库表,持久化工作流引擎所需的“等待状态”。因此,jBPM支持所有Hibernate支持的数据库。
jBPM还能够把Java对象持久化到数据库中。它能够把Hibernate支持的Java类的对象保存到数据库中,还能够把实现了Serializable接口的类的对象持久化到数据库中!具体的实现机制不详!
另外,jBPM还使用了JBoss Seam这个IOC容器。JBoss Seam非常类似于Spring,能够管理Java类的对象。对于JBoss Seam,我没有研究。
目前的工作和未来的研究
目前,我对jPDL有了很多的了解,但是对于复杂的任务管理和身份验证管理,研究还不够。
1.需要研究出怎样用Struts开发出一套获取用户任务列表的页面。
2.任务的管理需要身份管理。jBPM提供了一套身份管理的机制。但是,显然我们不能把应用程序的身份管理交给jBPM的身份管理模块来维护。我们需要把jBPM的身份管理模块去除,把jBPM的任务和自己应用程序的身份数据库整合起来。
3.jPDL适合于Java。BPEL适合于WebServices。需要研究jBPM对BPEL的支持。
4.JBoss Seam容器在jBPM中有广泛的应用,也必须加以了解。