`
gabriel80
  • 浏览: 8198 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于JPDL流程发布

    博客分类:
  • jbpm
阅读更多
一。前言:
   在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视频教程 JPDL 流程设计器

    首先介绍了如何用流程设计器为JPDL来设计工作流程 然后通过jsp页面发布一个工程 最后演示流程

    jbpm开发工作流程管理

    jPdl认为一个商务流程可以被看作是一个UML状态图。jPdl就是详细定义了这个状态图的每个部分,如起始、结束状态,状态之间的转换等。 jBPM的另一个特色是它使用Hibernate来管理它的数据库。Hibernate是目前Java领域...

    Jbpm开发流程实例演示.ppt

    Jbpm开发流程实例演示.ppt 1、概述; 2、准备; 3、环境配置; 4、jpdl介绍; 5、流程定义; 6、公司报销流程示例; 7、构建业务表; 8、发布; 。。。。。。

    jbpm4.4学习笔记

    21 获取已加载到数据库中的XML文件,改修后并重新发布 51 21 会签 53 Xml: 53 code: 54 工作流相关资料 56 22.通过processID查询流程任务 56 23.通过ExecutionId得到 56 24 查询已经结束的流程的节点 56 25 并行任务...

    JBPM工作流开发指南

    5.2 JBPM流程发布 45 5.2.1 搭建JBPM的WEB应用 46 5.2.2 发布第一个流程 48 六、日历(Scheduler) 54 6.1 Scheduler在C/S程序上的应用 54 6.2 Scheduler 在Web上的应用 57 6.3 Scheduler时间的分类 60 七、异步执行 ...

    jBPM4.3用户指南

    2.1. 发布 2.2. 必须安装的软件 2.3. 快速上手 2.4. 安装脚本 2.5. 依赖库和配置文件 2.6. JBoss 2.7. Tomcat 2.8. Signavio基于web的流程编辑器 2.9. 用户web应用 2.10. 数据库 2.10.1. 创建或删除表结构...

    JBPM4.4用户手册.doc

    2.1. 发布 2.2. 必须安装的软件 2.3. 快速上手 2.4. 安装脚本 2.5. 依赖库和配置文件 2.6. JBoss 2.7. Tomcat 2.8. Signavio基于web的流程编辑器 2.9. 用户web应用 2.10. 数据库 2.10.1. 创建或删除表结构 2.10.2. ...

    jBPM 4.4中文用户手册

    在目录中添加jPDL4模式 2.11.6. 导入示例 2.11.7. 使用ant添加部分文件 3. 流程设计器(GPD) 3.1. 创建一个新的流程文件 3.2. 编辑流程文件的源码 4. 部署业务归档 4.1. 部署流程文件和流程资源 4.2. ...

    jbpm4.4 resource-2

    jPdl认为一个商务流程可以被看作是一个UML状态图。jPdl就是详细定义了这个状态图的每个部分,如起始、结束状态,状态之间的转换等。 jBPM的另一个特色是它使用Hibernate来管理它的数据库。Hibernate是目前Java领域...

    JBPM工作原理及表结构详解

    6.1 发布一个流程DEPLOY: 19 6.2 上传一个ZIP包:(包含PNG和JPDL.XML)后 19 6.3 开始一个流程STARTPROCESSINSTANCEBYKEY后 19 6.4 填写申请信息 19 6.5 审批申请信息 19 6.6 审批结束 20 7、简单的流程实例: 21 ...

    很全面的jbpm 的中文文档----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    第一章:介绍 第二章 开始 第三章. 讲座 第四章....第五章 发布 第六章 永久化 第七章. 流程建模 第八章 上下文 ...第12章.... jBPM 流程定义语言 (JPDL) 第14章 安全 第15章. TDD适合工作流 第16章 可插入架构

    深入浅出jBPM完整版part1

    JbpmContext.........................................19 2.1.1 ...流程发布...................................................29 2.4 模板与实例...............................................35 2.5 ...

    深入浅出jBPM完整版part2

    JbpmContext.........................................19 2.1.1 ...流程发布...................................................29 2.4 模板与实例...............................................35 2.5 ...

Global site tag (gtag.js) - Google Analytics