《JBPM与Spring集成开发指南.docx》由会员分享,可在线阅读,更多相关《JBPM与Spring集成开发指南.docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、JBPM与Spring集成开发指南 1 术语工作流:全部或者部分,由计算机支持或自动处理的业务过程。工作流管理系统:工作流管理系统是这样的一个系统,详细定义、管理并执行“workflows”,系统通过运行一些软件来执行workflows,这些软件的执行顺序由工作流逻辑的计算机表示形式(计算机化的业务规则过程定义)驱动。工单:一次申请的提交记录,该记录具有唯一性。工单相关的概念: l 工单管理:对投诉工单、建议工单、座席建议工单、业务受理工单等不同类型的工单进行派发、接收处理、回复等一系列工单处理操作。 l 工单统计:对各种处理工单的数量,类型进行数据统计和导出、报表打印。 l 工单系统管理:对
2、工单系统进行管理,设置相应的处理部门、处理人员和相应的权限,规定处理流程。 l 工单日志:记录工单操作日志,有效管理日志的处理状况和责任。 2 背景工作流管理系统一项快速发展的技术,各种行业渐渐的采用工作流技术。工作流技术的主要特点是:过程的自动化处理,这些过程包含由人与以机器为基础的活动相结合;特别是对那些与IT 应用程序、工具交互的过程,进行自动化处理。虽然,工作流技术广泛用于办公环境中,例如保险、银行、法院和行政管理等,然而工作流技术,也可以应用于一些类型的工业和制造业。 3 概述在人们日常生活和工作中,都将与工作流程发生密切的关系,“工作流”干预过程、业务程序的自动化处理,文档、信息或
3、者任务按照定义好的规则在参与者间传递,来完成整个业务目标或者对整个业务目标的完成做贡献。应用领域广泛,比如: l 公司或组织内部请假或休假流程、通知分发流程等 l 政府政策审批流程、 l 网上书店图书订阅流程、发送流程等 l 驾照学习流程等等。同时,“工作流”可能由手工组织,实际上,多数“工作流 ”都在IT系统中进行组织的,从而对过程自动化提供计算机支持。“工作流”采用计算机化后,可以大大提高工作和生活的效率,而信息化过程中,对于采用的技术实现方式的不同,将直接影响到信息化的质量,包括:开发成本、维护成本等。好的工作流解决方案,可以大大提高业务流程流转效率、容易扩展对新流程的支持等。JBPM是
4、当前优秀的开源工作流引擎。本文档是关于JBPM与Spring框架集成分析文档。包括:基本概念、设计要点、常见问题解答、参考资源等。本文主要介绍了集成开发的高级内容,基础知识参见:参考资料本文档适合所有计算机开发人员。 4 基本概念 4.1 什么是工作流“工作流”干预过程、业务程序的自动化处理,文档、信息或者任务按照定义好的规则在参与者间传递,来完成整个业务目标或者对整个业务目标的完成做贡献。同时,“工作流”可能由手工组织,实际上,多数“工作流 ”都在IT系统中进行组织的,从而对过程自动化提供计算机支持,WFMC把工作定位在这个方向上。“工作流”定义:全部或者部分,由计算机支持或自动处理的业务过
5、程。工作流经常与“过程重组(BPRBusiness Process Re-engineering)”联系在一起。BPR 是关于企业(组织)核心业务过程的评估、分析、模拟、定义以及其后的操作实现。尽管,不是所有的BPR都是采用工作流实现的,但工作流技术是最佳的方法,主要因为,工作流技术提供了业务过程逻辑与IT操作支持的分离,从而以后可以修改过程规则来重定义业务过程。相反,工作流技术并不只在BPR中采用,例如用于现有的业务过程中。“工作流管理系统(WFMSWorkflow Management System)”通过管理工作活动序列,调用与各种活动步骤相关的人员、IT资源,对业务过程提供自动化处理。
6、“工作流管理系统”定义:工作流管理系统是这样的一个系统,详细定义、管理并执行“workflows”,系统通过运行一些软件来执行workflows,这些软件的执行顺序由工作流逻辑的计算机表示形式(计算机化的业务规则过程定义)驱动。每个业务过程都有一个生命周期,从几分钟到几天(甚至数月),由过程的复杂性与组成活动的持续时间来决定。有多种方法实现工作流管理系统,使用多种IT和通讯组件,运行环境可以从一个小的本地工作组到企业间。因此,WFMC参考模型从各种角度考虑工作流管理系统,希望提供各种不同的实现技术、运行环境。尽管实现的方法多种多样,但所有的WFMS都表现出某种共同的特性,这为不同产品间的集成、
7、协同工作提供了基础。参考模型描述了工作流系统的一个公共模型,并且指出参考模型如何能使其与其他各种不同的实现方法相关联。在最高层,所有的WFMS都相同的特性,即为下边的3个功能提供支持: 建立时期(Build-time)功能,定义、模拟工作流过程,及其组成活动。 运行时期(Run-time)控制功能,在运行环境中管理工作流过程,管理不同 运行时期与用户、IT应用程序(工具)的交互,来处理各种活动的执行。下图描述WFMS的基本特性,以及上述功能间的关系: 4.2 JBPM 4.2.1 介绍jBPM is a platform for executable process languages ran
8、ging from business process management (BPM) over workflow to service orchestration. There are many process languages. Each one is targeted towards a specific function and a specific environment. jBPM allows all of these process languages to be build natively on top of one single technology: the Proc
9、ess Virtual Machine (PVM). jBPM already supports 3 very different process languages: jPDL, WS-BPEL and Seam Pageflow. This might expand in the future as new process languages are added to our platform. jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。 jPD
10、L是构建于jBPM框架上的流程语言之一。在jPDL中提供了任务(tasks)、待处理状态 (wait states)、计时器(timers)、自动处理(automated actions)等术语,并通过图型化的流程定义,很直观地描述业务流程。 jPDL可以部署于Java语言的任何应用环境下,JavaSE Application(Swing/SWT)、JavaEE Application(Application Server) 。 4.2.2 jPDL分发包组成目前jPDL的最新版本是3.2.2,您可以在以下地址: 4.2.3 jPDL的核心程序包(jbpm-jpdl.jar) 它是一个典型的j
11、ar文件,它涵盖对流程定义和运行时流程实例上下文环境的操作API。在最简化的业务流程样例中,jPDL将流程定义存储与XML格式的定义文件中,在运行时载入内存,在内存里记录完整的业务实例和执行过程的环境变量,并完成全部操作。显然,在实际应用中,流程信息必须被持久化的存储于数据库中。jPDL使用了Hibernate作为其对象持久化的API。 4.2.4 Graphical Process Designer插件(jbpm-jpdl-designer-3.1.2.zip) 它是一个基于Eclipse的图型编辑插件。使用它可以对业务流程进行可视化的定制,而无须手动编辑XML文件。该插件还提供了流程定义上
12、传功能,可以将新定义的流程发布到在线运行的jPDL系统上。 4.2.5 jPDL身份包(jbpm-identity.jar) 它是jPDL的一个轻量级扩展包,简单实现了组Group、用户User、许可权Permission等用户身份认证和鉴权机制。如果您的应用环境只需要简单的用户认证鉴权管理,那么它十分适合您。 4.2.6 jPDL Web控制台(jbpm-console.war) 它是一个标准Web应用(使用了JSF技术),提供了对jPDL平台执行情况的监控程序(对jPDL数据库的监控)。管理员可以通过该程序方便的维护jPDL的数据库,管理流程定义和流程实例的执行情况。同时,它还提供了一个简
13、单的Getting started DEMO,方便初学者了解jPDL。 4.2.7 静态的流程定义模型 4.2.7.1 流程定义实体(Process Definition)编号 PD-001 对象 流程定义实体(Process Definition) 描述 流程定义实体是对一个流程抽象的对象化定义,如图-002。一套系统中,用户可以定义保存多个流程定义实体,如:报销流程定义、请假流程定义、人事录用流程定义等。每个流程定义还可以有多个不同的版本,如:针对同样的报销流程可以有修订前和修订后的两个流程定义,同时存储于jPDL数库中。用户可以通过流程名称和版本号获取相应的流程定义。在默认请况下,系统启
14、用最新的流程定义。 Java对象 org.jbpm.graph.def.ProcessDefinition 数据库表 JBPM_PROCESSDEFINITION该表存储流程定义的通用信息,如:流程名称、版本号 表关联说明 JBPM_PROCESSDEFINITION表中,每条记录有自己的数据库流水号 ID_JBPM_PROCESSDEFINITION的外键(Foreign Keys):startstate_ 同JBPM_NODE(流程结点)表关联。此外键指向流程定义中的起始结点ID 4.2.7.2 流程结点(Node)编号 PD-002 对象 流程结点(Node) 描述 流程结点是对流程中的
15、过程环节/行为的抽象对象化定义,如图-002中的每个方框即代表一个结点。结点有两个主要职责:一,实现某个指定行为,这在jBPM中就是执行一段制定的Java代码;二,转递、维持流程的延续,直至达到最终结点。在jPDL的结点设计中,系统开放了充分的用户行为模型,程序员可以基于这些行为接口,实现自定义的业务功能。在jPDL中,系统预定义了一系列的Node类型,同时也允许程序员开发定义自己的Node类型。 Java对象 org.jbpm.graph.def.Node 数据库表 JBPM_NODE该表存储结点的定义信息。 表关联说明 JBPM_NODE表中,每条记录有自己的数据库流水号 ID_JBPM_
16、NODE的外键(Foreign Keys):processdefinition_ - 此外键说明该Node从属的流程定义对象ID subprocessdefinition_- 此外键指定了一个由该Node发起的子流程。在主流程离开当前结点之前,该子流程必须完成执行过程。action_ - 此外键指定该结点动作类的ID superstate_ - 该外键是一个自关联键,指向结点的上级父结点ID。一个子流程中的多个结点从属于同一个父流程结点。 decisiondelegation_ 该外键指定了结点委派的判定类ID(所谓委派判定类是指根据用户的业务逻辑,判定流程的下一个流向的Java Class)
17、 4.2.7.3 流程转向(Transitions)编号 PD-003 对象 流程转向(Transitions) 描述 流程转向是描述流程中从一个结点到另一个结点的状态转换过程,因此一个转向一定有一个源结点和一个目标结点。 在jPDL中transition的命名是通产是唯一的,结点依靠transition的命名来区别到下一结点的路径,当一个Node中存在有多个同名的transition的时候,第一个transition将会被选中。结点转向的过程中,排在transition列表第一位置的即是默认的transition。 Java对象 org.jbpm.graph.def.Transition 数
18、据库表 JBPM_TRANSITION该表存储流程定义中的转向对象。 表关联说明 JBPM_TRANSITION表中,每条记录有自己的数据库流水号 ID_JBPM_TRANSITION的外键(Foreign Keys):processdefinition_ - 该外键指向transition所属的流程定义对象ID from_ - 该外键指向transition的源结点ID to_ -该外键指向transition的目标结点ID 4.2.7.4 动作(Actions)编号 PD-004 对象 动作(Actions) 描述 Actions是指一系列的在流程事件中运行的Java代码。流程图是软件需求
19、的传达的重要手段,但它只是软件需求的一个投影,隐藏了很多技术实现的细节。Actions则是向流程图添加技术实现细节的一种机制,它可以很好的补充和修饰流程图。这意味着在不改变流程图结构的情况下,可以将Java的代码与之关联。Actions通过事件(Events)同流程绑定,常用的主要事件包括:进入结点、离开结点、进行转向。请注意,同Events关联的Actions和处于Node中的Actions是有不同的。处于Events中的Actions是通过事件触发执行的,它是典型的观察者模式,是无法影响流程控制的流向。而处于Node中的Action则要承担起流程传递的责任。此外,Actions是可以命名的
20、。可以通过Actions的命名在任何地方引用该Actions。命名的Actions可以作为主流程定义的公用子元素。这个功能可以提高对Actions定义的复用。 Java对象 org.jbpm.graph.def.Action 数据库表 JBPM_ACTION该表存储流程定义中的动作对象。 表关联说明 JBPM_ACTION表中,每条记录有自己的数据库流水号ID_ JBPM_ACTION的外键(Foreign Keys):processdefinition_ - 指明action所属的流程定义ID event_ - 指明action绑定的event ID actiondelegation_ -
21、指明action的委派对象ID exceptionhandler_ - 指定action的异常处理ID referencedaction_ - 指向当前action引用的action的ID timeraction_ - 指向当前action引用的计时器action 4.2.7.5 事件(Events)编号 PD-005 对象 事件(Events) 描述 事件表示流程执行中的某个特定的时刻。在流程执行的过程中,通过jBPM的引擎触发事件,这通常发生在jbpm计算后续状态的时候。事件总是和流程中的元素绑定,这些元素包括:流程定义(process definition)、流程结点(node)、流程转
22、向(transition)和任务(task)。不同的元素会触发不同的事件,拿node元素来说,有 node-enter事件和node-leave事件。事件是action的钩子,一个事件可以回调一系列的action。当jBPM引擎触发事件的时候,事件中绑定的action就会被执行。在jBPM中,事件模型是可传播的。一个子元素触发的事件,将逐层向上传播到顶层的流程定义元素。这样的设计使得事件可以被集中化处理。 Java对象 org.jbpm.graph.def. Event 数据库表 JBPM_EVENT该表存储流程定义中的事件对象,这些事件与相关的action绑定。 表关联说明 JBPM_EVE
23、NT表中,每条记录有自己的数据库流水号ID_ JBPM_EVENT的外键(Foreign Keys):processdefinition_ - 指向event所属的流程定义ID node_ - 指向event所属的node ID transition_ - 指向event所属的transition ID task_ - 指向event所属的任务ID 4.2.7.6 任务(Task)编号 PD-006 对象 任务(Task) 描述 任务作为流程定义中的一部分,定义了如何创建任务实例(Task instances)以及任务分配。任务可以在任务结点(Task-Node)和流程定义(process-d
24、efinition)两个地方定义。通常会在一个任务结点中定义一个或多个的任务。在这种情况下,任务结点表示在流程中等待用户处理的交互操作。业务流程会停留在任务处,等待用户完成相应的操作之后继续。任务也可在流程定义中声明。通过任务名,可以找到相应的任务定义,并引用他们。实际上任何有命名的任务都可以通过名字被引用。在整个的流程定义中,任务名必须是唯一的。此外,还可以给任务设定优先级,这些优先级属性将成为任务实例化时的默认设置。任务实例可以在之后的运行中改变优先级。. Java对象 org.jbpm.taskmgmt.def.Task 数据库表 JBPM_TASK该表存储流程定义中声明的任务对象。 表
25、关联说明 JBPM_TASK表中,每条记录有自己的数据库流水号ID_JBPM_TASK的外键(Foreign Keys):processdefinition_ -指向task所属的流程定义ID taskmgmtdefinition_ - 指向task引用的TaskMgmtDefintion对象ID tasknode_ - 指向task所属的任务结点ID startstate_ -指向task所属流程的起始结点ID assignmentdelegation_ - 指定task委派处理的class对象的ID swimlane_ - 指定task要授权的swimlane(角色)ID taskcont
26、roller_ - 指定一个task赋值的委托类 4.2.8 具体化的流程实例模型流程实例中最重要的三个对象:流程实例(Process Instance)、令牌(Token)、任务实例(Task Instance). 4.2.8.1 流程实例(Process Instance)编号 PI-001 对象 流程实例(Process Instance) 描述 流程实例是流程定义的运行时状态,它记录了一个流程运行的起始时间、结束时间等状态信息 Java对象 org.jbpm.graph.exe.ProcessInstance 数据库表 JBPM_PROCESSINSTANCE该表存储运行时的流程对象信
27、息。 表关联说明 JBPM_PROCESSINSTANCE表中,每条记录有自己的数据库流水号 ID_JBPM_PROCESSINSTANCE的外键(Foreign Keys):processdefinition_ - 该流程实例对应的流程定义的ID roottoken_ - 该流程实例引用的跟令牌 superprocesstoken_ - 如果当前流程是某个流程实例的子流程,则指向该父流程的ID 4.2.8.2 令牌(Token)编号 PI-002 对象 令牌(Token) 描述 令牌代表一个流程执行的路径,它维护着流程定义中各个结点的指针,同时记录了流程当前执行的位置。 Java对象 org
28、.jbpm.graph.exe.Token 数据库表 JBPM_TOKEN该表存储运行时令牌对象信息,它表示当前流程执行到的位置。 表关联说明 JBPM_TOKEN表中,每条记录有自己的数据库流水号ID_ JBPM_TOKEN的外键(Foreign Keys):processinstance_ - 指向该令牌所属的流程实例的ID。 subprocessinstance_ - 指向该令牌所属的子流程实例ID。 node_ - 令牌所在(所指向的)的当前节点ID. parent_ - 如果当前令牌是一个分支流程或子流程的令牌,则该值指向其父令牌ID。 4.2.8.3 任务实例(Task Insta
29、nce)编号 PI-003 对象 任务实例(Task Instance) 描述 一个任务实例对象可以分配给指定的操作者处理,当任务完成后,将触发流程继续下行。任务实例的生命周期很简单,生成实例-开始处理-任务结束。从弹性设计考虑出发,任务的分配不属于实例生命周期的一部分,任务是否被分配是不会影响其生命周期过程的。当流程进入一个任务结点的时候,结点上任务被实例化;用户通过访问系统的界面组件,获取自己的任务列表,可以进行任务委派、处理或直接结束任务。任务实例记录着任务创建的时间、结束时间,这些信息可以通过TaskInstance对象中的getter方法获取。一个任务实例的结束时间标识它的完成,在后
30、绪的任务查询中,该实例不会被取出,但实例的记录仍保留于数据库中。 Java对象 org.jbpm.taskmgmt.exe.TaskInstance 数据库表 JBPM_ TASKINSTANCE该表存储运行时任务实例信息。 表关联说明 JBPM_ TASKINSTANCE表中,每条记录有自己的数据库流水号ID_JBPM_ TASKINSTANCE的外键(Foreign Keys):task_ - 指向定义该实例的任务ID token_ - 指向任务实例对应的令牌ID swimlaneinstatnce_ - swimlane 实例,表示处理该任务的角色 taskmgmtinstance_ -
31、 管理该任务的模块实例ID 4.3 SpringSpring Framework 是一个 Java/Java EE/.NET 的分层应用程序框架。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一文中的代码,并最初由 Rod Johnson 和 Juergen Hoeller et al 开发。Spring Framework 提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。 Spring 中包含的关键特性: 强大的基于 JavaBeans
32、 的采用控制翻转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。 一个可用于从 applet 到 Java EE 等不同运行环境的核心 Bean 工厂。 数据库事务的一般化抽象层,允许插件式事务管理器,简化事务的划分使之与底层无关。 内建的针对 JTA 和 单个 JDBC 数据源的一般化策略,使 Spring 的事务支持不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。 JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码), 简化了错误处理, 大大减少了程序员的编码量. 再次利用JDBC时,你
33、无需再写出另一个 终止 模块. 并且面向JDBC的异常与Spring 通用数据访问对象 (Data Access Object) 异常等级相一致. 以资源容器,DAO 实现和事务策略等形式与 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用众多的翻转控制方便特性来全面支持, 解决了许多典型的Hibernate集成问题. 所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范. 灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现技术,例如 JSP,FreeMarker,V
34、elocity,Tiles,iText 以及 POI。值得注意的是,Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 Struts,WebWork,或 Tapestry。 提供诸如事务管理等服务的面向方面编程框架。 4.4 Spring ModulesSpring Modules is a sub-project of Spring intended to ease integration with 3rd party products without overloading the core framework with additional dependencies
35、.The modules included in the 0.9 release are:Ant integration. Flux suite of products integration. HiveMind integration. Lucene integration. Apache OJB integration. O/R Broker integration. OSWorkflow integration. Tapestry integration. Support for declarative caching services including EHCache, JCS, O
36、SCache, GigaSpaces and others. Support for db4o Support for JSR-94 Rules Engines such as Drools and Jess Support for various Jakarta Commons components such as Configuration, Lang, Chain and Commons Validator Support for JavaSpaces, including Gigaspaces and Blitz. Support for jBPM 3.0.x and 3.1.x Su
37、pport for JSR-170 (Java Content Repository) including Jackrabbit and Jeceira. Support for web template engines like Freemarker, Groovy, Velocity, WebMacro and XSLT. Valang: Validation Language. Bean Validation Framework. Spring MVC add-ons. XT Framework: Domain-Driven Design oriented framework and S
38、pring MVC AJAX support for developing richer domain models and richer user interfaces. 5 集成 5.1 Introductionj jBPM module offers integration between the Spring and jBPM allowing for reuse of Springs Hibernate support along with the IoC container. The module allows jBPMs underlying Hibernate sessionF
39、actory to be configured through Spring and jBPM actions to access Springs context. 5.2 ConfigurationUsers familiar with Spring will see that the jBPM module structure resembles with the orm package from the main Spring distribution. The module offers a central template class for working with jBPM, a
40、 callback to access the native JbpmContext and a local factory bean for configuration and creating a jBPM instance. . . classpath:/org/springmodules/workflow/jbpm31/someOtherWorkflow.xml set The example above shows how (existing) Spring-managed Hibernate SessionFactories and transaction management c
41、an be reused with jBPM. 5.3 LocalJbpmConfigurationFactoryBeanThe main element is LocalJbpmConfigurationFactoryBean which should be familiar to users acustomed to Spring. Based on the jbpm configuration file and the given SessionFactory, it will create a jBPM configuration which can be used for working with the given process definitions. It is possible to replace jBPM xml configuration with jBPM 3.1.x newly added ObjectFactory - note that i