`
ericFang
  • 浏览: 101508 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

jbpm

    博客分类:
  • J2EE
阅读更多
理解JBPM(java Business Process Management)的基本概念:

jPDL - JBPM Process Definition Language

JBPM简要过程:
1、定义流程(利用JPDL)
2、部署流程(部署到数据库)
3、创建公文并与流程实例绑定
4、可通过JBPM的接口,触发流程向下流动
5、可通过JBPM的接口,获得流动到某个用户那里的文档(即待处理任务列表)
6、可通过JBPM的接口,结束某个用户的任务(这将触发流程继续向下流动)
7、如此,直到结束

----------------------------------------------
测试:

1、安装JBPM
- 引入Hibernate依赖包
- 引入JBPM依赖包
* bsh.jar
* jcr-1.0.jar
* jbpm-identity.jar
* jbpm-jpdl.jar
- 引入数据库驱动
* mysql-connector-java-3.1.13-bin.jar
2、定义相关配置文件
- Hibernate配置文件
* 提供hibernate配置文件(可以从config/目录下拷贝,并修改其中的数据库连接设置即可)
3、假设现在有一个公文,需要经过:张三、李四、王五的审批之后才能结束
4、我们定义一个Document对象,及其hibernate映射,并将修改hibernate配置文件,将映射添加到其配置中(以便创建相应的数据库表)
5、现在让我们来测试一下:
- 创建数据库表: JbpmConfiguration.getInstance().createSchema();
- 定义流程: 参考process.xml
- 部署流程:
* JbpmConfiguration.getInstance() - 创建jbpmConfiguration对象
* ProcessDefinition.parseXmlResource(String); - 读取流程定义文件,创建processdefinition对象
* jbpmConfiguration.createJbpmContext(); - 创建jbpmContext对象
* context.deployProcessDefinition(definition); - 部署流程到数据库
* context.close(); - 关闭context对象
- 创建公文
- 将公文与流程绑定(即需要创建流程实例)
* JbpmConfiguration.getInstance() - 创建jbpmConfiguration对象
* jbpmConfiguration.createJbpmContext(); - 创建jbpmContext对象
* context.setSessionFactory(sessionFactory),将JBPM与程序中的session绑定
* context.getGraphSession().findLatestProcessDefinition("流程名称");
* new ProcessInstance(definition); - 创建流程实例
* context.save(processInstance); - 存储流程实例
* 在Document中添加Long processInstanceId 属性
* context.getSession().load 操作,加载Document对象
* document.setProcessInstanceId - 绑定流程实例到公文
* processInstance.getContextInstance.createVariable("document",document.getId()) - 绑定公文到流程实例
- 公文创建者提交公文
* (Document)context.getSession().load(Document.class, 1); - 加载公文信息
* context.getProcessInstance(从公文中获取的流程实例ID); - 即根据流程实例ID加载流程实例
* processInstance.getRootToken().signal(); - 触发流程往下走(即到达第一个节点)
- 这时候,我们可以测试一下,看看流程当前所处的节点
* processInstance.getRootToken().getNode().getName()
- 第一个节点对应的用户登录,应该能够查询到其当前的任务(有公文等待其审批)
* List tasks = context.getTaskMgmtSession().findTaskInstances("张三"); - 查找张三的任务列表
* 列表元素是TaskInstance实例
* 通过:taskInstance.getProcessInstance().getContextInstance().getVariable("document"); 可以找到其绑定的公文ID
- 查找到当前的任务对应的公文之后,即可对其审批,并继续往下走
* taskInstance.end();
- 如此,直到结束
* processInstance.hasEnded() - 如果流程已经到达终点,本调用将返回true

(1)       jbpm的模型是采用UML Activity Diagram的语义,所以便于开发人员理解流程。
(2)       jbpm提供了可扩展的Event-Action机制,来辅助活动的扩展处理。
(3)       jbpm提供了灵活的条件表达式机制,来辅助条件解析、脚本计算的处理。
(4)       jbpm提供了可扩展的Task及分配机制,来满足复杂人工活动的处理。
(5)       借助hibernate的ORM的优势,jbpm能够很容易支持多种数据库。

当然,还有一些优点,是很多开发人员并不太注意的,比如:
(1)       jbpm的Node机制非常灵活,开发人员可以很容易定制“业务化语义的节点”,并满足运行时候处理的需要。

有很多灵活的优点,当然也少不了存在一些“局限”。
(1)       很显然,只能有一个start-state。
(2)       jbpm依靠Token来调度和计算,在同一个时刻中,一个ProcessInstance只允许一个Token对象只存在一个Node中(分支当然用Child Token对象处理)。所以本质上就不支持“multi-instance”模式。
(3)       jbpm作为一款开源的工作流引擎,其更多的是关注“如何辅助你更容易的让流程运行完成”,但是并不记录“流程运行的历史和轨迹”。这一点可能是东西方文化的差异性所在,因为国内的流程应用,比较关注“运行轨迹”。

       至于其他的一些局限,比如不支持“回退”、“跳转”等操作,这也是因为东西方文化的差异所在。西方人认为“往回流转的情况肯定也是一种业务规则所定义,那么肯定可以通过分支或条件来解决”,而东方则把“回退作为一个人性化管理和处理的潜在特点”。所以诸如此类的一些“特定需求”,估计只能通过扩展jbpm来实现了,甚至有时候,简单的扩展是无法解决问题的——正如上一节所说的那样,“引擎的抽象”会影响“引擎的应用”的复杂度支持。
分享到:
评论
1 楼 yaerfeng1989 2014-05-14  

相关推荐

    jbpm简介\jbpm简介

    ### jBPM简介与关键技术知识点 #### 一、jBPM概述 jBPM是一个开源的、纯Java的、轻量级的商业流程管理(Business Process Management, BPM)工作流引擎。它支持多种可执行流程语言,并且可以在任何JavaEE应用...

    jbpm开发指南--jbpm全面介绍

    通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...

    jbpm-jpdl-designer-3.0.13.zip_jbpm_jbpm design_jbpm designer_jbp

    jbpm-jpdl-designer-3.0.13 是一个与jbpm相关的软件包,主要功能是提供jbpm流程定义的图形化设计工具。jbpm(Java Business Process Management)是一个开源的工作流管理系统,用于管理和执行业务流程。JPDL(JBoss ...

    jBPM4工作流应用开发指南.pdf

    jBPM(Java Business Process Management)是一个开源项目,用于处理业务流程的管理和执行。jBPM4作为该系列的一个版本,提供了一套完整的流程管理和执行框架,允许开发者构建灵活的工作流应用,以实现业务流程自动...

    jbpm开发环境搭建

    ### jbpm开发环境搭建知识点详解 #### 一、概述 JBPM(JBoss Business Process Management)是一款开源的工作流管理系统,广泛应用于企业级应用的流程控制与管理。本文将详细介绍基于JBPM 4.4版本在Eclipse开发环境...

    JBPM工作原理及表结构详解

    JBPM(Java Business Process Management)是一款开源的工作流管理系统,它提供了强大的业务流程建模、执行和监控能力。本文将深入探讨JBPM的工作原理、表结构及其在实际操作中的应用。 1. **JBPM特色** - **灵活...

    jbpm4jbpm5

    jbpm4jbpm5是关于jbpm流程管理框架的专题,涵盖了jbpm4和jbpm5两个主要版本。jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. *...

    jbpm7示例(jbpm-7.3.0.Final-examples)

    2017年jBPM 正式发布了全新的 7版本。jBPM 是一个完全开源的业务流程管理(BPM)和案例管理解决方案。它支持流程和案例的完整生命周期,从编写工具到执行一直到监控和管理。 在核心引擎之上,提供了许多功能和工具来...

    JBPM4.4_eclipse插件安装

    jBPM4.4 是一款强大的工作流管理系统,它允许开发者设计、部署和执行业务流程。为了便于开发,jBPM 提供了与 Eclipse 集成的插件,使得流程定义可以通过图形化的方式进行。本文将详细介绍如何在 Eclipse 中安装 jBPM...

    jbpm-3.1.2.zip_jbpm_jbpm 3.1.2_jbpm-3.1.2.rar_jbpm3.1.2_工作流

    jbpm-3.1.2.zip 文件包含了 jBpm 的一个重要版本——jBpm 3.1.2,这是一个开源的工作流管理系统,专为构建灵活且可扩展的业务流程解决方案而设计。jBpm 提供了一种方式,使得开发者能够用简单而强大的语言来表达业务...

    eclipse安装jbpm-4.4

    ### Eclipse 安装 JBPM-4.4 详尽指南 #### 一、概述 JBPM(JBoss Business Process Management)是一款开源的工作流引擎,基于Java语言开发,用于执行业务流程。JBPM允许开发者轻松地定义复杂的业务流程,并将这些...

    JBPM修改数据库教程以及实例

    【JBPM修改数据库教程及实例】 JBPM,全称Java Business Process Management,是一个开源的工作流管理系统,用于管理和执行业务流程。在JBPM6中,默认使用H2内存数据库进行存储,但实际生产环境中,我们通常会选择...

    jbpm-4.4.zip part03

    【jbpm-4.4.zip part03】这个压缩文件是关于jbpm 4.4版本的组成部分,jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行和监控的功能。jbpm 4.4是该系统的一...

    jBPM3.2.rar_JBPM3.2_jbpm_jbpm 3.2_jbpm3_jbpm3.2教程

    **jbPM 3.2 知识点详解** jbPM,全称为Java Business Process Management,是一个开源的工作流管理系统,主要用于企业级应用中的业务流程管理。jbPM 3.2是该系统的一个版本,它提供了丰富的功能,包括流程设计、...

    jBPM4.4.rar_jbpm4.4_jbpm4.4 PDF

    《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM4.4这一开源工作流管理系统的重要参考资料。jBPM,全称Java Business Process Management,是一个用于执行业务流程的轻量级、灵活的开源框架,它为业务...

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    JBPM4.4完整可用审批流程

    JBPM4.4是JBoss Business Process Management (BPM)平台的一个版本,它是一个开源的企业级BPM解决方案,用于设计、执行和管理业务流程。在这个完整的审批流程工程中,我们看到它采用Maven进行项目构建和依赖管理,...

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...

Global site tag (gtag.js) - Google Analytics