4从jBPM3转换到jBPM4
- 格式:pdf
- 大小:86.76 KB
- 文档页数:3
第 1 章导言上一页下一页第 1 章导言最好使用firefox浏览这份教程。
在使用internet explorer的时候会有一些问题。
1.1. 许可证与最终用户许可协议jBPM是依据GNU Lesser General Public License(LGPL)和JBoss End User License Agreement(EULA)中的协议发布的,请参考完整的LGPL协议和完整的最终用户协议。
1.2. 下载可以从sourceforge上下载发布包。
/projects/jbpm/files/1.3. 源码可以从jBPM的SVN仓库里下载源代码。
https:///repos/jbpm/jbpm4/1.4. 什么是jBPMjBPM是一个可扩展、灵活的流程引擎,它可以运行在独立的服务器上或者嵌入任何Java应用中。
1.5. 文档内容在这个用户指南里,我们将介绍在持久执行模式下的jPDL流程语言。
持久执行模式是指流程定义、流程执行以及流程历史都保存在关系数据库中,这是jBPM实际通常使用的方式。
这个用户指南介绍了jBPM中支持的使用方式。
开发指南介绍了更多的、高级的、定制的、没有被支持的选项。
1.6. 从jBPM 3升级到jBPM 4没办法实现从jBPM 3到jBPM 4的升级。
可以参考开发指南来获得更多迁移的信息。
1.7. 报告问题在用户论坛或者我们的支持门户报告问题的时候,请遵循如下模板:聪明的读者可能已经注意到这些问题已经指向了可能导致问题的几点原因:)特别是对依赖库和配置的调整都很容易导致问题。
这就是为什么我们在包括安装和使用导入实现建议配置机制时花费了大量的精力。
所以,在你开始在用户手册覆盖的知识范围之外修改配置之前,一定要三思而行。
同时在使用其他版本的依赖库替换默认的依赖库之前,也一定要三思而行。
第 2 章安装配置2.1. 发布只需要把jBPM (jbpm-4.X.zip) 下载下来,然后解压到你的硬盘上的什么地方。
jBPM4.3用户手册第六章 jpdl1.Process (流程)process是流程定义的根元素(The top level element representing one process definition)。
表 1. process的属性属性 类型 默认值 是否必须描述name 文本 必须 在与用户交互时, 作为流程名字显示的一个名字或是标签。
key 字母或数字,下划线如果省略的话,key默认与name 相同,但name中的非字母和非数字的字符在key中会被替换为下划线。
可选用来辨别不同的流程定义。
一个流程可以发布多个拥有相同key的version。
对于所有已发布的version,key‐name组合都必须保持一致。
version 整型 从1开始;新部署的版本号在之前部署的最高版本号基础上增1可选 流程的版本号编者注 1‐1实验的主要代码片段如下:ProcessEngine pe = Configuration.getProcessEngine();RepositoryService re = pe.getRepositoryService();String deployId1 = re.createDeployment().addResourceFromClasspath("org/sklse/test/process/sample1.jpdl.xml").deploy(); ProcessDefinition pd1 = re.createProcessDefinitionQuery().deploymentId(deployId1).uniqueResult();System.out.println(pd1.getName() + " " + pd1.getKey() + " " + pd1.getVersion() + " " + pd1.getId());sample1.jpdl.xml的属性为:key="key1" name="sample1"结论一:同一jpdl.xml可以deploy多次,即再次执行re.createDeployment().addResourceFromClasspath("org/sklse/test/process/sample1.jpdl.xml").deplo y();也是可以的,这就是所谓的一个jpdl.xml的多个version,查看这两次发布的ProcessDefinition的version可以发现的确有变化。
1. 流程定义(Process Definition)流程定义是记录在xml文件中的对流程的描述,它包含唯一的流程开始节点和多个流程功能节点,每个节点之间使用transition进行连接。
Process Definition使用id, key和version进行标识,jBPM中可能包含多个key 值相同的Process Definition,key值相同的Process Definition会拥有不同的version 值,而id是使用key-version的形式用来表示唯一的Process Definition的。
jBPM中使用RepositoryService来控制流程定义的发布,浏览,删除等操作。
2. 流程实例(Process Instance)以流程定义为蓝本生成的流程实例,在jBPM属于Execution的一种。
当我们执行start时,会根据流程定义启动一个新的流程实例,然后它会根据流程定义里的节点运行,在遇到state或task时停顿,等待外部用户调用signal,最后会执行到end 节点,结束整个流程。
jBPM中只允许有一个start节点,所以每个流程都是单一入口的,jBPM4中可以允许有多个end节点,所以我们可以在任意位置结束流程。
jBPM中使用ExecutionService来控制流程实例的启动,浏览,执行,删除等操作3. state节点状态结点是一个典型的等待状态。
同任务结点不同的是,状态结点不会向任务列表添加任务实例。
当业务进程需要等待外部系统的干预时,这种结点是很有用的。
(需要外部系统干预,但又不是让人去干预)假设如下情况:在进入该结点时,通过node-enter事件向外部系统发送一个消息,然后结点进入等待状态;当外部系统完成处理,并回送一个消息,这将导致触发一个signal()方法的运行,该方法重新激活正在等待的流程继续下行jBPM中使用ExecutionService来控制对state的signal操作。
PVM提供了一套和token类似的execution过程调度机制,通过对execution的完全操控,节点运行期行为有了无限的可能PVM的流程定义模型上图里的类全是接口。
位于最上层的是ObservableElement,其提供给流程元素以附加Event(事件)的能力。
在ObservableElementImpl里,它持有一个events的集合属性。
对于流程元素来说,典型的事件有:流程启动/结束,节点启动/结束和转移线执行(take)【在Event方法中定义】。
protected Map<String, EventImpl> events;EventImpl透过EventListenerReference实例的集合持有EventListener实例。
这样在引擎执行过程调度时,就非常容易地通过流程元素本身获取事件监听器并在相应的时候执行它们。
EventImpl.javaprotected List<EventListenerReference> listenerReferences;EventListenerReference.javaprotected EventListener eventListener;和传统的观察者模式一致,EventListener接口有且只有一个方法:/** listener to process execution events.** @author Tom Baeyens*/public interface EventListener extends Serializable {/** is invoked when an execution crosses the event on which this listener is registered */void notify(EventListenerExecution execution) throws Exception; }紧接着ObservableElement的是CompositeElement,其扩展了ObservableElement接口。
jBPM4.4一、什么是jBPMJBPM是一个扩展性很强的工作流系统,百分百用JAVA语言开发,持久层采用Hibernate实现,理论上说,只要Hibernate支持的数据库JBPM都支持。
同时它还能被部署在任何一款JAVA应用服务器上。
java Business Process Management :工作流,工作流引擎注:记得j小写,因为j代表java,与Log4j中j一样工作流管理系统不止一中,如还有Intaliol BPMS …但JBoss jBPM灵活性且扩展性高。
jBPM项目于2002.3由Tom Baeyens 发起,2003.12发布1.0版本,2004年10.18发布2.0,并在这天加入了JBOSS组织-→被RedHat公司二、能干什么提供工作流的实现,帮助更好的进行BPM三、jBPM有什么,简介jBPM的Service API 各种服务1:ProcessEngine:流程引擎。
并不负责具体的业务,而是用于获取各种Service。
2:RepositoryService:流程资源服务的接口,如流程定义发布、查询、删除等。
3:ExecutionService:用于操作流程实例的服务,可以进行流程实例发布、查询、流程推进、设置流程变量等操作。
4:TaskService:用于操作人工任务的服务,可以进行任务创建、查询、获取、提交完成、保存、删除等操作。
5:HistoryService:用于操作流程历史的服务,提供对流程历史库(就是已经完成的流程实例)的操作。
比如:历史流程实例,历史活动实例等。
6:IdentityService:用于操作用户、用户组以及成员关系的服务7:ManagementService:流程管理控制服务的接口,只提供异步工作(Job)相关的执行和查询操作。
四、Myeclipse8.5 搭配开发环境1.jbpm-4.4.zip 下载完2.myeclipse→help→Myeclipse Configuration Center →add…….3.找到\jbpm-4.4\install\src\gpd\jbpm-gpd-site.zip 安装这个插件4.记得不要联网安装,不要选source文件5.安装完后window→JBoss jBPM→runtime Location→add 添加jbpm的路径6.添加lib下所有jar包,如果你使用的是tomcat6.0则:要把Juel-api.jar ,juel-impl.jar,juel-engine.jar 拷到tomcat lib 下并把原来的el-api.jar删掉项目中就不要再导上面三个包五、修改配置文件1、将example中的下列配置文件拷贝到java项目的src目录下:jBPM.cfg.xml、jBPM.hibernate.cfg.xml、jBPM.mail.properties、jBPM.mail.templates.xml、process_forms.css2、在以上配置文件中的jBPM.hibernate.cfg.xml,实际上就是我们熟悉的hibernate.cfg.xml,这里,要修改为连接我们的数据库。
一、流程定义1.部署流程定义Proces sEngi ne proces sEngi ne = new Config urati on().buildP roces sEngi ne();Reposi toryS ervic e reposi toryS ervic e = proces sEngi ne.getRep osito rySer vice();例:布署文件中的流程//布署当前目录下pd.jpdl.xml文件String deploy mentI d = reposi toryS ervic e.create Deplo yment().addRes ource FromC lassp ath("pd.jpdl.xml").deploy();例:布署网页上T extAr ea中的流程<form action="jbpm?family168=deploy" method="post"><textar ea name="xml" cols=50 rows=15></textar ea><inputtype="submit" value="发布"/><inputtype="reset" value="取消"/></form>在后台处理如下:String xml = reques t.getPar amete r("xml");reposi toryS ervic e.create Deplo yment().addRes ource FromS tring("proces s.jpdl.xml", xml).deploy();2.删除流程定义类Proce ssDef initi on 包含如下属性:ID:流程定义ID号Deploy mentI d:流程定义的布署ID号Key:关键字name:流程名versio n:版本号数据如下ID Key 名称版本hello-1 hello hello 1//获取类Pro cessD efini tion的属性IDString id = reques t.getPar amete r("id");//根据流程ID获取流程定义实例Proces sDefi nitio n pd = reposi toryS ervic e.create Proce ssDef initi onQue ry().proces sDefi nitio nId(id).unique Resul t();//根据流程定义的布署ID号,删除该流程定义//注意:jbpm4是不允许直接根据流程定义的ID来直接删除流程定义的,因为还要删除其它配置数据reposi toryS ervic e.delete Deplo yment Casca de(pd.getDep loyme ntId());3.获取全部流程定义根据流程名获取所有流程定义List<Proces sDefi nitio n> proces sDefi nitio ns = reposi toryS ervic e.create Proce ssDef initi onQue ry().orderA sc( Proces sDefi nitio nQuer y.PROPER TY_NAME).list();还可以根据以下顺序进行排序(org.jbpm.api.Proces sDefi nitio nQuer y)public static finalng.String PROPER TY_DE PLOYM ENT_T IMEST AMP "deploy ment.timest amp" public static finalng.String PROPER TY_ID "idProp erty.string Value"public static finalng.String PROPER TY_KE Y "keyPro perty.string Value"public static finalng.String PROPER TY_NA ME "idProp erty.object Name"public static finalng.String PROPER TY_VE RSION "versio nProp erty.longVa lue"二、流程实例1.启动一个流程实例1.1根据key启动流程实例用户必须为新启动的流程实例分配一个key,这个key是用户执行的时候定义的且唯一。
(BPM业务流程管理)开发手册第 1 章简介1.1. 目标读者这个开发指南是为了给有经验的开发者看的,这样就可以获得jBPM的完全的灵活性。
在这个开发文档中提及的特性可能当前不会被支持到。
请自行使用。
1.2. 概述第 2 章孵化器解释了最终会放到用户手册中的功能,它们会成为支持的一部分。
要注意孵化器中的功能还没有确保稳定。
(比如这里可能主要的语法或实现在下一个版本中被改变)。
第 3 章BPMN 2.0介绍如何在jBPM中使用BPMN 2.0流程语言。
第 5 章流程虚拟机到第 9 章高级图形执行解释了jBPM的核心,流程虚拟机(PVM),活动和事件监听器是如何建立在它上面的。
第 10 章配置到第 18 章Signavio web建模器解释了jBPM框架的高级用法。
1.3. 源代码和WIKIjBPM的源代码可以在我们的SVN获得:https:///repos/jbpm/jbpm4/这里有一篇关于如何构建源代码的wiki:http:///maven2/org/jbpm/jbpm4/1.5. 依赖库如果你想在自己的项目中安装或部署jBPM,现在也比以前方便了很多:只需要把正确的jar放到系统的classpath下。
我们还没有清理maven pom文件中的依赖描述。
所以我们还不能给出lib 目录下,你需要包含到应用中的,jar 的最小集合。
(参考Jira issue JBPM-2556 然后进行投票,如果你希望让我们知道这些问题对你优先级很高)。
依赖库的版本放在lib,是我们测试过的。
所以我们推荐你使用lib目录下的依赖版本。
为了在这方面帮助你,这里有一个jPDL当前所用的maven依赖的列表:jboss的idm依赖在org.jboss.identity.idm:*部分,可以忽略,包含org.hibernate:hibernate-entitymanager这个列表应该已经让你开始选择一个子集,而不是从${jbpm.home}/lib目录下包含所有依赖库。
jbpm4⼯作流详解jBPM4的学习流程 1>jBPM4通过org.jbpm.pvm.internal.ant.JbpmDeployTask通过读取jbpm.cfg.xml中的JDBC数据连接信息 2>对jbpm4的数据库表简单介绍 3>通过ProcessEngine类的贯穿来获取服务接⼝(Service API)来认识所有的常⽤类 4>对流程定义语⾔中活动⼏个常⽤的介绍 5>事件的介绍 JBPM:部署流程定义 jBPM4通过org.jbpm.pvm.internal.ant.JbpmDeployTask通过读取jbpm.cfg.xml中的JDBC数据连接信息直接将业务流程部署到数据库中。
它不仅可以部署单个业务流程,也可以部署⼀组业务流程归档到服务器上。
jbpm⾸先扫描业务流程归档中所有以.jpdl.xml结尾的⽂件,并解析,然后⽤来发起流程实例,业务流程归档中所有其他资源也会在部署过程中被持久化到数据库中。
所有这些资源被统⼀编号保存在数据库表jbpm4_lob中我们可以通过jbpm4提供的RepositoryService.getResourceAsStream API随时访问这些资源。
jbpm4的数据库表简单介绍JBPM4_DEPLOYMENT 流程定义表 JBPM4_DEPLOYPROP 流程定义属性表JBPM4_EXECUTION 流程实例表 JBPM4_HIST_ACTINST 流程活动(节点)实例表JBPM4_HIST_DETAIL 流程历史详细表JBPM4_HIST_PROCINST 流程实例历史表JBPM4_HIST_TASK 流程任务实例历史表 JBPM4_HIST_VAR 流程变量(上下⽂)历史表JBPM4_ID_GROUP ⾓⾊表 JBPM4_ID_MEMBERSHIP ⽤户⾓⾊表 JBPM4_ID_USER ⽤户表 JBPM4_JOB 定时表 JBPM4_LOB 存储表JBPM4_PARTICIPATION 参与者表 JBPM4_SWIMLANE 泳道表 JBPM4_TASK 任务表 JBPM4_VARIABLE 上下⽂表(1)JBPM4_DEPLOYMENT、(2)JBPM4_DEPLOYPROP及(3)JBPM4_LOB:存储上传⼀个包含png和jpdl.xml的zip包的相关数据 jbpm4_deployment表多了⼀条记录 jbpm4_deployprop表多了四条记录,对应langid,pdid,pdkey,pdversion jbpm4_lob 表多了⼆条记录,保存流程图png图⽚和jpdl.xml (4)JBPM4_HIST_PROCINST与(5)JBPM4_HIST_ACTINST 分别存放的是Process Instance、Activity Instance的历史记录。
第 4 章 从jBPM3转换到jBPM4
4.1. jBPM 4的目标
在构建jBPM 4时,我们追求两个主要目标:
l
提升保障:jBPM3时,我们仅仅从社区反馈 来提升稳定性和扩展性。
jBPM4时, 我们确定了要支持哪些环境的配置。
那些环境都放在JBoss OA 实验室的持续集成环境中。
现在构建支持所有这些环境和配置, 所以对我们来说更容易重现和检测它们提出的问题。
覆盖率也保证jBPM4有更长的寿命。
l 降低入门要求,提升下一级的水平: 在jBPM4中,我们很清晰的区分了普通应用和高级应用之间的区别。
所以很容易就可以入门, 很难(但是还是可能的)提高 开发者需要拼命敲键盘了。
4.2. 知识范围
为了在基本应用和高级应用之间做清晰的分隔, API 已经完全重构了。
基本应用覆盖了公共API 。
相同的API 也被所有的已支持的环境支持。
jBPM4和jBPM3中的包是严格分开的。
为了提供完全的DB 迁移,我们提供了一个策略 允许jBPM3和jBPM4实例可以同时运行。
表名的前缀由JBPM_改为JBPM4_。
还没有功能可以把jBPM3运行时的数据库转换为jBPM4. 我们不确定是否可以在下一个版本中创建一个这样的工具。
一个主要的原因是,任何对DB 内容进行数据迁移的QA 都不可能让项目组来承担。
此外,这里还有一些功能jBPM4还没有支持。
它们按照可能和不可能的顺序, 在jBPM4中实现。
l
U 用户提供事务性资源,比如jDBC 连接 或hibernate 连接。
l
异常处理器 l
临时变量 l
身份认证表达式,来计算任务的分配人 l 任务的变量到参数的转换
4.3. 流程转换工具
在很多情况下,很多工作已经使用JDPL3的流程定义设计过了。
为了避免完全使用手工方式将这些流程转换到JPDL4的格式, jBPM 发布包中包含了一个子目录,叫做 migration ,它包含了一个命令行工具, 可以把转换JPDL3流程定义文件转换到JDPL4的xml 文件。
转换后的流程可能没法运行, jBPM4的特性可能还是被丢掉了,或者转换器本身还没有实现。
只是,乏味的重新格式化工作会被工具处理了。
它也可以之处它不能转换的部分。
这个工具本身只使用dom4j 在两种格式之间进行转换工作, 应该很很容易扩展(源代码也在同一个目录下)。
工具的设计故意保持着非常简单 (比如,大多数逻辑都可以在Jpdl3Converter 类中找到)。
注意这个工具只在很少的JDPL3流程文件上进行过试验 和测试。
4.3.1. 概述
jPDL 转换工具把一个jpdl3流程文件作为输入, 把它转换成jpdl4流程文件。
语法:
第 4 章 从jBPM3转换到jBPM4
上一页 下一页
java org.jbpm.jpdl.internal.convert.JpdlConverterTool -v -o <outputfile> <processfile>
4.3.2. 参数
l
-v (verbose): 这个工具将打印 转换流程文件过程中的细节信息。
当使用了这个参数时, 也会在抛出异常时打印错误堆栈。
l -o (output) 指定输入文件名。
默认情况下,会生成一个后缀为'converted.jpdl.xml'的文件, 基于输入的流程文件的名字。
输出文件名可以是绝对路径文件或相对路径文件名。
4.3.3. 使用示例
java -jar jpdl-migration-XX.jar simple.jpdl.xml
java -jar jpdl-migration-XX.jar -v simple.jpdl.xml
java -jar jpdl-migration-XX.jar -o /home/scott/simple.converted.xml simple.jpdl.xml
4.3.4. 高级应用
转换工具很容易就可以继承到java 代码中 (或者maven ,ant )。
下面的代码示范了如何在内部调用 api 来转换流程文件: URL url = new URL("simple.jpdl");
Jpdl3Converter jpdlConverter = new Jpdl3Converter(url);
Document jpdl4Doc = jpdlConverter.readAndConvert();
for (Problem problem : jpdlConverter.problems) {
//do something to handle the problem
}
Writer fileWriter = new FileWriter(outputFile);
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter( fileWriter, format );
writer.write(jpdl4Doc);
writer.close();
4.4. 解释和修改
这一章展示了最重要的重命名和 jBPM4中的修改。
表 4.1. 主要名称修改 表 4.2. jPDL XML 修改
jBPM
3
jBPM 4备注Node Activity
Token Execution
根execution 现在和流程实例是一个对象。
(在jBPM3中,ProcessInstance 有一个 指向根token 的指
针)。
同时,不像jBPM3,jBPM4中的execution 可能不被激活, 创建一个子execution ,并让这个子
execution 继续,即使逻辑上展现出来的 只有一个单独的执行路径。
这会发生在有范围的活动(或
组合活动)中,其中声明了定时器或者变量。
Action Event
listener
表 4.3. 默认修改 event type="..."
on event="..."action
event-listener node custom process-state
sub-process super-state
group (还在孵化器中)jBPM 3
jBPM 4默认,传播的事件触发器在流程元
素外边
默认,传播事件不会调用外边元素的事件监听器, 只是在元素中注册了的 事件监听器起作用。
上一页
下一页第 3 章 BPMN 2.0 起始页 第 5 章 流程虚拟机。