一。前言:
在JBPM中,有很多API是供JBPM自身调用的,如流程定义文件中支持的Expression语言,脚本等(org.jbpm.jpdl.el.impl),我们不用理会。
我们主要和下面三类API打交道:
JBPM环境的配置、service的管理、流程的部署和卸载:它主要体现在org.jbpm中,另外辅助包有org.jbpm.jpdl.xml、org.jbpm.configuration。
org.jbpm.configuration负责services对象的创建,相当于一个微型的IoC容器、对象工厂,负责services的生命周期管理,如加载、创建、调用和销毁,像Job调度服务、数据库持久化服务、异步消息服务等。需要说明的是,由于其package下的ObjectFactoryImpl也是一个IoC容器,和Spring的IoC容器是有相同的职责:对象的管理。所以在这种松耦合架构下,可以将JBPM和Spring集成,如业务系统和JBPM引擎的事务处理、对象管理、配置管理等。请参考Spring-Module开源项目。
org.jbpm.jpdl.xml负责流程定义文件的解析,譬如XML文件的解析,相关领域对象的实例化。通过hack其源码和原理,我们可以在业务系统中自定义流程,让用户可以自己定义、变更流程。
JBPM中领域对象:如Node、Token、ProcessInstance、TaskInstance等,它们有三个职责,一个是保持从DB中加载流程和任务相关的数据或将数据持久化到DB。第二,为各领域对象建立关联,方便实现透明持久化(复杂的领域关联在Hibernate的mapping文件里配置)。第三,就是处理业务规则,如引擎调度算法,但不负责持久化。
JBPM中持久化领域对象的Manager,DAO:如TaskMgmtSession。它们主要是持久化领域对象,如session.save(ProcessInstance);或是执行查询,如根据流程ID查询该流程实例,查询操作都是配置在hibernate mapping中的hql语句,如hibernate.queries.hbm.xml。但可能并不能满足我们的要求,譬如按时间段查询当前的流程实例,任务的分页查询,这样,就需要我们自己扩展这些DAO类。由于它们查询是只读操作,所以很容易,而且扩展几乎是必然了,因为要是按JBPM默认的,把所有的Result查询出来,再过滤,性能是个很大的问题,我们应该按需查询。
二。按功能分类说明
JBPM流程的部署和卸载
JBPM流程的部署和卸载,无论是通过管理控制台还是自定义部署,最终都是通过JbpmContext的 deployProcessDefinition(ProcessDefinition)部署,而ProcessDefintion实例的创建,是通过调用ProcessDefinition的相关方法,如parseXmlResource (String xml)。
ProcessDefintion实例的创建,有多种输入源,譬如XML字符串、XML文件、zip包,还有最抽象的Reader、InputStream。如果在用户的业务系统里面自定义发布业务流程,也最终是调用ProcessDefinition相关方法。但流程定义解析,最核心的只有一个类:org.jbpm.jpdl.xml包下的JpdlXmlReader,
org.jbpm.JbpmContext:该类可以理解为Façade模式的实现,与流程相关的manager类可以通过它取得,如getGraphSession()、getServices(),它是获取其它服务的快捷方式,也算是一个delegate类。如果大家对Context的概念比较敏感,其类职责就很好理解,在Servlet容器里面也有ServletContext的概念,和它意思差不多。对一般的系统软件一般来说,Context往往建模成Container的上下文。在JBPM中,它还负责流程部署、加载、卸载。
3.附带说明:
JBPM的任务管理
JBPM和任务管理相关的类主要是org.jbpm.taskmgmt.def和org.jbpm.taskmgmt.exe,像任务创建、分配等。
和任务相关的最重要的有两个方面,一个是任务分配,另一个是和任务相关的表单。当然,任务查询和任务日志也很重要。
任务分配:解决的是将任务分配给谁,它有静态分配和动态分配两种,前者是在流程定义文件里部署,后者是通过代码动态指定。它涉及到的概念有Actor,PooledActor,Swimlane,AssignmentHandler。在做demo时,譬如JBPM官方自带的例子webSale里,就是通过Expression静态部署任务角色的,如user(leo),group(orderManager),但它用到了JBPM的第三方组件Identity,其实通过Expression静态分配角色,本质上也是通过AssignmentHandler实现的,如ExpressionAssignmentHandler。
任务分配,一般比较灵活的方案是在流程的Swimlane里面部署自定义action,然后重用swimlane。另外一种方案是,在每个task里面部署AssignmentHandler实现类。
任务相关表单:主要是org.jbpm.taskmgmt.def.TaskController,它是task scope下的表单字段,类似Servlet里面的HttpServletRequest的setAttribute()。如果是process scope下的表单项,是org.jbpm.context.exe.ContextInstance,类似于Servlet里面的HttpSession的setAttribute()。
附带说一下任务查询,所有有关查询和持久化的操作,都集中在包org.jbpm.db中,如任务相关的TaskMgmtSession,要是这些find方法不满足业务要求,建议自己扩展。
JBPM的流程日志
JBPM的流程日志,主要是记录一些事件(Event),如流程创建、任务分配,它们在GraphElement的fireEvent时,譬如在Node.leave()(Token离开当前节点时)触发fireEvent事件(在该事件方法里执行自定义Action),同时记录日志。我们关心的日志主要有process、task、transition、signal四类,每个下面还有事件细分,如task创建和分配。通过日志,我们统计流程执行效率,也可以得到详细的流程步骤日志。
日志的查询,请参考LoggingSession及其相关类。顺便说一下,所有的日志类都继承于ProcessLog,约20来个。JBPM已经声明的日志查询方法,可能并不能满足我们的要求,自行扩展吧。
分享到:
相关推荐
在掌握了流程设计后,教程将进入发布工程的环节。这涉及到将设计好的流程模型部署到JBPM服务器上,使其可供实际应用调用。通过JSP(JavaServer Pages)页面,你可以实现与用户的交互,启动和跟踪流程实例。这部分...
同时,它还具有流程定义上传功能,方便将新定义的流程发布到jPDL系统。 3. **jbpm-identity.jar**:这是一个轻量级的身份管理包,提供了基本的用户、组和权限管理功能,适用于需要简单身份认证和鉴权的环境。 4. *...
1. **流程设计器**:这是JBPMP的一部分,提供了一个图形化的用户界面,帮助开发者直观地创建、编辑和调试JPDL流程定义。 2. **Eclipse插件**:jbpm-jpdl-designer通常作为一个Eclipse插件存在,使得开发者能够在熟悉...
这个插件允许开发者在Eclipse集成开发环境中创建、编辑和管理JPDL(JBPML,JBPM流程定义语言)文件,这是一种用于描述业务流程的XML语法。 **JBPM** 是一个开源的工作流管理系统,它提供了业务流程自动化的能力,...
jbpm-jpdl-designer-3.1.0.sp1.zip则是jbpm的流程设计器,用于可视化地创建和编辑JPDL流程。 在jbpm-jpdl-3.2.2.zip中,我们可以看到以下几个关键文件: 1. **release.notes.html**:这是软件发布时通常包含的文档...
综上所述,"jbpm-jpdl-designer-nodeps-3.1.4"提供了独立于特定依赖环境的Jbpm流程设计器,便于开发者通过JPDL来定义和管理业务流程。它包含的文档和资源有助于用户安装、理解和使用该工具,同时遵守相应的开源许可...
jbpm-jpdl-designer-3.0.13 是一个与jbpm相关的软件包,主要功能是提供jbpm流程定义的图形化设计工具。jbpm(Java Business Process Management)是一个开源的工作流管理系统,用于管理和执行业务流程。JPDL(JBoss ...
此插件还支持流程定义的上传,以便在运行的jPDL系统上发布新的流程。 jPDL-identity.jar是jBPM的轻量级扩展,实现了基础的用户认证和权限管理功能,适用于需求简单的应用场景。另外,jBPM Console是一个基于JSF技术...
JPDL (jBPM Process Definition Language) 是jBPM使用的流程定义语言。在v3.2版本中,jBPM提供了对Tomcat应用服务器和MySQL数据库的支持。本文将详细介绍如何在Windows 2003环境下,使用SUN JDK1.6U4、Tomcat6.0.14...
此外,此插件还支持流程定义的上传,方便将新的流程发布到在线的jPDL系统。 jbpm-identity.jar是jPDL的一个轻量级扩展,实现了用户认证和权限管理,包括组(Group)、用户(User)和权限(Permission)管理,适用于...
**JBPM3.2 表初始化与流程发布详解** JBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于业务流程的建模、部署、执行和监控。在JBPM3.2版本中,用户需要对数据库进行初始化,以便正确...
jbpm-jpdl-designer-nodeps-3.0.13.zip是一款专为流程设计和管理而生的工具,主要用于JBPM(Java Business Process Management)系统。JBPM是一个开源的工作流和业务流程管理系统,它提供了对业务流程的建模、部署、...
《JPDL 3.1 规范手册》由沈东良(良少)撰写,发布于2006年10月13日。这份手册不仅是一份关于jBPM 3.1指南第16章的翻译,更是作者结合自身对jBPM及JPDL(Job Business Process Definition Language)深入理解的一次...
1. **流程建模**:使用JPDL进行流程建模,支持流程图的可视化编辑。 2. **流程实例管理**:跟踪和管理每个流程实例的生命周期,包括启动、暂停、恢复和结束。 3. **任务管理**:分配和管理流程中的任务,支持用户...
核心的jPDL(jBPM Process Definition Language)部分,文档深入解释了流程处理的各个环节。包括了流程的开始(start)、状态节点(State)、决定节点(decision)、并发(concurrency)、结束(end)、任务(task)、子流程(sub...
该功能允许用户查看当前流程图对应的JPDL XML定义文件。这有助于高级用户检查和调试流程定义的细节。 **2.3 导入** 用户可以从其他源导入流程定义文件,例如JPDL XML文件。导入的文件会被解析并在编辑区内以图形...
jPDL 流程定义包括了流程的各个节点、转换、条件等信息。在使用 jBPM 之前,需要了解 jPDL 的基本语法和结构。 jBPM API jBPM 提供了丰富的 API,用于与 jBPM 进行交互,例如执行流程、查询流程状态等。在使用 ...
完成流程设计和测试后,需要将流程发布到生产环境,以便实际业务的使用。这可能涉及到打包流程定义、配置文件等,并部署到目标服务器。 综上所述,jBPM开发流程实例演示涵盖了从准备环境、定义流程、编写业务逻辑...
JBPM的核心特点之一是它使用自定义的流程定义语言JPdl,将业务流程视为UML状态图,简化了流程设计。 **JPdl 介绍** JPdl(JBoss jBPM Process definition language)是jBPM用于描述流程定义的语言,它以UML状态图为...