- 浏览: 116487 次
- 性别:
- 来自: 上海
最新评论
-
578936807:
1111
jbpm3.2 之教程讲解(一) -
578936807:
[i][i][b][u]引用[list]
[*][img][u ...
jbpm3.2 之教程讲解(一) -
1638873586:
不让下你贴出来想做啥,做广告吗?
jBPM4开发文档(完整版翻译) -
1638873586:
中国有这样自私的人存在简直悲哀,就个破文档还不提供下载,严重阻 ...
jBPM4开发文档(完整版翻译) -
学会做人:
美女,最好是让临远老大,出一个综合的例子,业务逻辑,我这里到有 ...
每天一课,jBPM4视频教程——应用系列第五课
第 4 章 服务
jBPM和服务相互影响,配置成功之后就可以从流程引擎里获得服务接口。
4.1. 流程引擎
流程引擎是线程安全的,它可以保存在静态变量中,甚至JNDI中或者其他重要位置。在应用中,所有线程和请求都可以使用同一个流程引擎对象,现在就告诉你怎么获得流程引擎。
ProcessEngine processEngine = new Configuration()
.buildProcessEngine();
上面的代码演示了如何通过classpath根目录下默认的配置文件jbpm.cfg.xml创建一个ProcessService。如果你要指定其他位置的配置文件,请使用setResource()方法:
ProcessEngine processEngine = new Configuration()
.setResource("my-own-configuration-file.xml")
.buildProcessEngine();
还有其他setXxxx()方法可以获得配置内容,例如:从InputStream中、从xml字符串中、从InputSource中、从URL中或者从文件(File)中。
我们可以根据流程引擎得到下面的服务:
ProcessService processService = processEngine.getProcessService()
ExecutionService executionService = processEngine.getExecutionService();
ManagementService managementService = processEngine.getManagementService();
TaskService taskService = processEngine.getTaskService();
在配置中定义的这些流程引擎(ProcessEngine)对象,也可以根据类型processEngine.get(Class<T>)或者根据名字processEngine.get(String)来获得。
4.2. 部署流程
ProcessService中包含了所有可以得到流程定义资源的方法。
比如在classpath的资源中的jPDL流程文件order.jpdl.xml,可以使用ProcessService进行部署。如下:
processService.createDeployment()
.addResource("order.jpdl.xml").deploy();
像上面的addResource方法,XML流程定义文件的来源可以是一个文件、url网址、字符串、inputStream、zip或jar压缩包和一个目录。
部署的来源中包含了满足默认命名规范的资源文件,它可能包含各种流程描述和自定义类型。jPDL的部署工具会自动识别后缀名是.jpdl.xml的流程文件。对于那些没有按照规范进行命名的文件,可以使用jpdl提供的方法进行编程设置。
setFileType("my-jpdl-process.someotherextension", "jpdl")
在部署的过程中,流程定义会被分配一个格式为{key}:{version}的id
如果没有提供key,会在名字的基础自动生成。生成的key会替换所有不是字母和数字的字符。
同一个名字关联一个key,反之亦然。
如果没有为流程文件提供版本号,jBPM会自动为它分配一个版本号。请特别注意那些已经部署了的名字相同的流程文件的版本号。它会比已经部署的同一个key的流程定义里最大的版本号还大。没有部署相同key的流程定义的版本号会分配为1,
在下面第1个例子里,我们只提供了流程的名字,没有提供其他信息:
<process nam="Insurance claim">
...
</process>
假设这个流程是第一次部署,下面就是它的属性:
表 4.1. 没有key值的属性流程
Property Value Source
name Insurance claim process xml
key Insurance_claim generated
version 1 generated
id Insurance_claim:1 generated
第2个例子我们将演示如何通过设置流程的key来获得更短的id。
<process name="Insurance claim" key="ICL">
...
</process>
这个流程定义的属性就会像下面这样:
表 4.2. 有key值属性的流程
Property Value Source
name Insurance claim process xml
key ICL process xml
version 1 generated
id ICL:1 generated
4.3. 启动一个新的流程实例
4.3.1. 最新的流程实例
下面是为流程定义启动一个新的流程实例的最简单也是最常用的方法:
executionService.startProcessInstanceByKey("ICL");
上面的service的方法会去查找key为ICL的最新版本的流程定义,然后在流程定义里启动流程实例。
当insurance claim流程部署了一个新版本,startProcessInstanceByKey方法会自动去选择最新部署的版本。
4.3.2. 明确流程版本
换句话说,你如果想根据明确的版本启动流程实例,便可以使用流程定义的id启动流程实例。如下所示:
executionService.startProcessInstanceById("ICL:1");
4.3.3. 使用锁
我们可以为新启动的流程实例分配一个key,key是用户执行的时候定义的。一个流程定义里的所有key必须都是唯一的。在企业的流程里很容易在领域模型里找到唯一的key。例如:序列号或保险编号。
executionService.startProcessInstanceByKey("ICL", "CL92837");
key可以用来创建流程实例的id,格式为{process-key}/{execution-id}。所以上面的代码会创建一个id为ICL/CL92837的流向(execution)。
如果没有提供用户定义的key,数据库就会把主键作为key。这样可以使用如下方式获得id:
Execution execution = executionService.startProcessInstanceByKey("ICL");
String executionId = execution.getId();
我们推荐使用用户定义的key,特别是在你的应用代码里,你可以得到有效的key。根据用户定义的key,你可以直接使用流向的id,而不用根据流程的变量进行查询。
4.3.4. 使用变量
当一个新的流程实例启动时就会提供一组对象参数。将这些参数放在variables变量里,然后可以在流程实例创建和启动时使用。
Map<String,Object> varialbes = new HashMap<String,Object>();
variables.put("customer","John Doe");
variables.put("type","Accident");
variables.put("amoutn","new Float(763.74)");
executionService.startProcessInstanceByKey("ICL",variables);
4.4. 执行等待的流向(execution)
流程处理定义中必须执行一些活动(activity)。流程处理的任何一个活动(activity)都可能是被流程系统执行或者被外部参与者执行。当一个活动(activity)是被外部参与者执行时,流向必须等待外部参与者通知流程系统活动(activity)已经完成。因此流向要么是在执行,要么实在等待外部参与者。你会发现大部分的流程的都在等待外部参与者,因为人的动作都是很慢的。:)两个等待状态之间,被流程系统消耗的时间通常都是很短的。
状态(state)是一种基本活动(activity),它告知外部参与者有哪些事情必须执行,流向会一直等待到signal(外部强制执行)。
当流向处在等待状态时,可以被外部触发器通过signal方法强制执行。我们建议你使用流程定义和流向key来获得一个流向(execution)。在下面的代码中,ICL流程定义的82436流向key被使用了。
executionService.signalExecutionByKey("ICL","82436");
我们还可以这样使用,这个必须执行signal的流向可以通过一个唯一的id被引用,下面的代码中指定了executionId为ICL/82436流向:
executionSerivice.signalExecutionById("ICL/82436");
一些数据可以通过signal传递给系统:信号名和参数。信号名会根据流向(execution)的当前活动(activity)被使用。参数存储在流程的变量里。
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("quality","a+");
parameters.put("target","profit");
executionService.signalExecutionById("ICL/82436","Accept",parameters);
4.5. 任务服务
4.6. 管理服务
jBPM和服务相互影响,配置成功之后就可以从流程引擎里获得服务接口。
4.1. 流程引擎
流程引擎是线程安全的,它可以保存在静态变量中,甚至JNDI中或者其他重要位置。在应用中,所有线程和请求都可以使用同一个流程引擎对象,现在就告诉你怎么获得流程引擎。
ProcessEngine processEngine = new Configuration()
.buildProcessEngine();
上面的代码演示了如何通过classpath根目录下默认的配置文件jbpm.cfg.xml创建一个ProcessService。如果你要指定其他位置的配置文件,请使用setResource()方法:
ProcessEngine processEngine = new Configuration()
.setResource("my-own-configuration-file.xml")
.buildProcessEngine();
还有其他setXxxx()方法可以获得配置内容,例如:从InputStream中、从xml字符串中、从InputSource中、从URL中或者从文件(File)中。
我们可以根据流程引擎得到下面的服务:
ProcessService processService = processEngine.getProcessService()
ExecutionService executionService = processEngine.getExecutionService();
ManagementService managementService = processEngine.getManagementService();
TaskService taskService = processEngine.getTaskService();
在配置中定义的这些流程引擎(ProcessEngine)对象,也可以根据类型processEngine.get(Class<T>)或者根据名字processEngine.get(String)来获得。
4.2. 部署流程
ProcessService中包含了所有可以得到流程定义资源的方法。
比如在classpath的资源中的jPDL流程文件order.jpdl.xml,可以使用ProcessService进行部署。如下:
processService.createDeployment()
.addResource("order.jpdl.xml").deploy();
像上面的addResource方法,XML流程定义文件的来源可以是一个文件、url网址、字符串、inputStream、zip或jar压缩包和一个目录。
部署的来源中包含了满足默认命名规范的资源文件,它可能包含各种流程描述和自定义类型。jPDL的部署工具会自动识别后缀名是.jpdl.xml的流程文件。对于那些没有按照规范进行命名的文件,可以使用jpdl提供的方法进行编程设置。
setFileType("my-jpdl-process.someotherextension", "jpdl")
在部署的过程中,流程定义会被分配一个格式为{key}:{version}的id
如果没有提供key,会在名字的基础自动生成。生成的key会替换所有不是字母和数字的字符。
同一个名字关联一个key,反之亦然。
如果没有为流程文件提供版本号,jBPM会自动为它分配一个版本号。请特别注意那些已经部署了的名字相同的流程文件的版本号。它会比已经部署的同一个key的流程定义里最大的版本号还大。没有部署相同key的流程定义的版本号会分配为1,
在下面第1个例子里,我们只提供了流程的名字,没有提供其他信息:
<process nam="Insurance claim">
...
</process>
假设这个流程是第一次部署,下面就是它的属性:
表 4.1. 没有key值的属性流程
Property Value Source
name Insurance claim process xml
key Insurance_claim generated
version 1 generated
id Insurance_claim:1 generated
第2个例子我们将演示如何通过设置流程的key来获得更短的id。
<process name="Insurance claim" key="ICL">
...
</process>
这个流程定义的属性就会像下面这样:
表 4.2. 有key值属性的流程
Property Value Source
name Insurance claim process xml
key ICL process xml
version 1 generated
id ICL:1 generated
4.3. 启动一个新的流程实例
4.3.1. 最新的流程实例
下面是为流程定义启动一个新的流程实例的最简单也是最常用的方法:
executionService.startProcessInstanceByKey("ICL");
上面的service的方法会去查找key为ICL的最新版本的流程定义,然后在流程定义里启动流程实例。
当insurance claim流程部署了一个新版本,startProcessInstanceByKey方法会自动去选择最新部署的版本。
4.3.2. 明确流程版本
换句话说,你如果想根据明确的版本启动流程实例,便可以使用流程定义的id启动流程实例。如下所示:
executionService.startProcessInstanceById("ICL:1");
4.3.3. 使用锁
我们可以为新启动的流程实例分配一个key,key是用户执行的时候定义的。一个流程定义里的所有key必须都是唯一的。在企业的流程里很容易在领域模型里找到唯一的key。例如:序列号或保险编号。
executionService.startProcessInstanceByKey("ICL", "CL92837");
key可以用来创建流程实例的id,格式为{process-key}/{execution-id}。所以上面的代码会创建一个id为ICL/CL92837的流向(execution)。
如果没有提供用户定义的key,数据库就会把主键作为key。这样可以使用如下方式获得id:
Execution execution = executionService.startProcessInstanceByKey("ICL");
String executionId = execution.getId();
我们推荐使用用户定义的key,特别是在你的应用代码里,你可以得到有效的key。根据用户定义的key,你可以直接使用流向的id,而不用根据流程的变量进行查询。
4.3.4. 使用变量
当一个新的流程实例启动时就会提供一组对象参数。将这些参数放在variables变量里,然后可以在流程实例创建和启动时使用。
Map<String,Object> varialbes = new HashMap<String,Object>();
variables.put("customer","John Doe");
variables.put("type","Accident");
variables.put("amoutn","new Float(763.74)");
executionService.startProcessInstanceByKey("ICL",variables);
4.4. 执行等待的流向(execution)
流程处理定义中必须执行一些活动(activity)。流程处理的任何一个活动(activity)都可能是被流程系统执行或者被外部参与者执行。当一个活动(activity)是被外部参与者执行时,流向必须等待外部参与者通知流程系统活动(activity)已经完成。因此流向要么是在执行,要么实在等待外部参与者。你会发现大部分的流程的都在等待外部参与者,因为人的动作都是很慢的。:)两个等待状态之间,被流程系统消耗的时间通常都是很短的。
状态(state)是一种基本活动(activity),它告知外部参与者有哪些事情必须执行,流向会一直等待到signal(外部强制执行)。
当流向处在等待状态时,可以被外部触发器通过signal方法强制执行。我们建议你使用流程定义和流向key来获得一个流向(execution)。在下面的代码中,ICL流程定义的82436流向key被使用了。
executionService.signalExecutionByKey("ICL","82436");
我们还可以这样使用,这个必须执行signal的流向可以通过一个唯一的id被引用,下面的代码中指定了executionId为ICL/82436流向:
executionSerivice.signalExecutionById("ICL/82436");
一些数据可以通过signal传递给系统:信号名和参数。信号名会根据流向(execution)的当前活动(activity)被使用。参数存储在流程的变量里。
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("quality","a+");
parameters.put("target","profit");
executionService.signalExecutionById("ICL/82436","Accept",parameters);
4.5. 任务服务
4.6. 管理服务
发表评论
-
jBPM4中文开发指南下载
2009-09-18 10:16 3136jBPM4中文开发指南 9月1号4.1发布了,上周将jBPM ... -
jBPM4.1新特性和中文用户手册下载
2009-09-10 01:34 18269月1号,jBPM4发布了4.1版本,jBPM4.1的新特 ... -
每天一课,jBPM4视频教程——应用系列第五课
2009-09-03 13:04 1790《每天一课,jBPM4》 视频教程今天推出基本应用系列——第 ... -
每天一课,jBPM4视频教程系列的初期规划和应用系列第二课
2009-08-19 08:56 2254经常有人问我,jBPM4视频教程到底有多少课,能讲到什么程度? ... -
每天一课,jBPM4视频教程——应用系列
2009-08-11 23:40 1478《每天一课,jBPM4》 ... -
每天一课,jBPM4视频教程入门系列(三)
2009-08-03 11:22 1596《每天一课,jBPM4》 视频教程今天推出第三课 , ... -
每天一课,jBPM4视频教程(一)
2009-07-29 18:02 3858随着jBPM4.0GA版本的发布 ... -
jBPM4和SS的专题页面出炉了
2009-07-28 13:57 2441注:标题里的SS指的Spring Security ... -
这算不算侵犯版权
2009-07-23 16:49 2771之前我写了不少关于jbpm4的文章,可是在je上的访问量并 ... -
jBPM4的用户指南PDF下载
2009-07-15 01:22 5092鉴于各位都非常期待PDF的版本,我们便先把用户指南提供给 ... -
jBPM4开发文档(完整版翻译)
2009-07-14 00:14 3433开发文档更新到了jBPM4的GA版本,这次开发文档变更非常 ... -
流程控制台的规划进度和视频展示(开源)
2009-07-02 12:39 1232最近一直在整流程控制 ... -
jBPM4与Spring整合的2种方式
2009-06-29 13:05 3114要知道如何将jBPM4与Spring整合,可以先了解jB ... -
jBPM4.0中文开发指南(高级图形执行下)
2009-06-26 12:02 10537.6. 流程同步 为了进行 ... -
jBPM4.0中文开发指南(高级图形执行上)
2009-06-26 11:59 956第 7 章 高级图形执行 7.1. 循环 活动可以实现循环, ... -
jBPM中文开发指南(实现基本活动二)
2009-06-24 11:22 8845.5. 基本流程执行 在下一个例子里,我们会结合自动活动和 ... -
jBPM中文开发指南(实现基本活动)
2009-06-24 11:13 961第 5 章 实现基本活动 这一章解释了流程定义的基础,流程虚 ... -
jBPM4.0中文开发指南(架构)
2009-06-23 14:39 1552第 4 章 架构 4.1. APIs 流程虚拟机包含4个集成 ... -
jBPM4.0中文开发指南(配置)
2009-06-23 14:35 1937第 3 章 配置 jbpm.jar包含了一些默认配置文件, ... -
jBPM4.0的用户指南 的后续
2009-03-27 09:34 1773jbpm4的翻译已经完成了,后续的内容还请大家去http ...
相关推荐
《jBPM4.0用户指南》:深入解析工作流引擎的核心功能与应用 一、jBPM4.0概述 jBPM4.0是一款先进的业务流程管理(Business Process Management,简称BPM)框架,它基于Java语言,提供了一套完整的解决方案,用于...
这份"jbpm4.0用户指南(中文版)"为国内用户提供了一份详尽的使用手册,帮助理解并操作这个流程管理系统。 jbPM是一个开源的BPM解决方案,它提供了业务流程的建模、部署、执行和监控等功能。jbPM4.0版本在当时具有...
**JBPM4.0用户指南**是一份详细阐述如何使用JBPM(Java Business Process Management)4.0版本的文档,旨在帮助用户理解并有效利用这一流程管理工具。JBPM是一款开源的工作流管理系统,用于设计、执行和管理业务流程...
### JBPM4.0 用户指南知识点详解 #### 一、JBPM概述 JBPM(Jakarta Business Process Model)是一款开源的业务流程管理(Business Process Management, BPM)引擎,由JBoss提供支持。它是一个可扩展且高度灵活的...
是我花了好久才找到的资源,开源工作流产品JBPM的开发指南,是本人在学习JPBM过程中所使用的资料,希望能给各位开发者在使用JBPM过程中带来帮助. 想要了解jbpm的不可多得的资料,也是我很多同事都看过的。从配置开发...
本手册作为开发者指南,将深入探讨jbpm4.0的核心功能和使用方法,帮助开发者理解和实现流程自动化。 一、jbpm简介 jbpm是一款开源的BPM平台,它支持工作流定义模型(BPMN 2.0)、规则引擎(Drools)和事件处理等...
这个中文手册-用户指南旨在帮助中国用户更好地理解和使用jbpm4.0系统,尤其适合那些希望在不熟悉英文文档的情况下进行学习的开发者和管理员。 首先,我们要了解jbpm的核心概念。jbpm是一个开源的工作流引擎,它支持...
这个文件是可以打开的,下载后,把文件名中类似这样的:“%E7%94%A8%” 去掉,打开的时候,把“是否每次打开都询问”的勾取消掉。然后文件类容就出来了。
通过阅读“java, JBPM工作流开发指南”这样的资料,开发者可以深入理解jbPM的工作原理,学习如何配置和使用jbPM 4.0来构建和部署自己的工作流应用。这份指南通常会涵盖jbPM的基本概念、安装步骤、流程设计、任务管理...
这个文件是可以打开的,收集了网上有关jBPM4、jBPM3的资料,是比较完整的
"doc"目录可能包含JBPM4.0的官方文档或开发者指南。这些文档对于理解JBPM的工作原理、API使用和最佳实践至关重要。它们可以帮助开发者快速上手,避免在实际项目中遇到不必要的困扰。 总结来说,JBPM4.0通过PVM和...
jbPM 4.0 是该系统的第四个主要版本,它提供了丰富的功能,包括流程建模、执行、监控以及集成能力。这份中文文档的出现,为中文使用者提供了深入理解并使用jbPM 4.0 的便利。 **1. jbPM 概念与架构** jbPM 采用...
**jbPM 4.0 开发指南** jbPM(Java Business Process Management)是一个开源的工作流管理系统,用于在Java环境中执行业务流程。jbPM 4.0是该框架的一个重要版本,它提供了强大的流程建模、执行和监控能力,旨在...
**jBPM-4.0中文开发指南** jBPM(Java Business Process Management)是一款开源的工作流管理系统,专为业务流程自动化和管理设计。jBPM 4.0是其一个重要版本,它提供了丰富的功能,包括流程建模、执行、监控和集成...
**jBPM4用户指南入门教程** jBPM4是一个基于Java的企业级工作流管理系统,它为业务流程管理(BPM)提供了全面的解决方案。本教程将引导您逐步了解如何安装配置、使用流程设计器、部署业务归档以及利用服务和jpdl...
【JBPM4.4用户指南】是一份详细指导如何使用和配置JBPM 4.4版本的文档。JBPM(jBoss Business Process Management)是一个功能强大的、可扩展且灵活的流程引擎,它允许开发者在独立服务器或任何Java应用中集成业务...