`
usenrong
  • 浏览: 515467 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

jBPM4工作流引擎 网络知识点整理汇总 提升

    博客分类:
  • J2EE
 
阅读更多
定义
start活动的意义在于指定了一个流程实例应该从哪里开始,即流程定义的入口。
 
start活动的子元素
<transition>用来指定流出的转移,指向流程的下一个活动。
定义
end活动的意义在于结束了一个流程实例,即流程定义的结束点。
 
特殊的end-cancel和end-error
在一些特定的流程里,需要区分到底是为什么结束的,怎么结束的。比如,前面的差旅费报销申请流程,可以被批准进而正常的结束;也可以被某位领导不批准进而被取消。在一般的流程里,不需要区分end和end-cancel,但是如果再做的精细一点,可以让不同的结果,流向不同的结束。
定义
state活动作为一个等待状态活动。
流程处理的流向会在外部调用提供的触发器API之前一直等待。与task相同的是,流程引擎会停在这里等待外界的调用;但不同的是,它不会将任务分配给某个人。
 
相关api
如果是同时只有单个state的情况,可以简单的使用:
executionService.signalExecutionById(“这里默认使用流程实例的id");
如果是同时有多个state的话,应该要先查找到Execution的id,如下使用:
ExecutionService exe =  engine.getExecutionService();
Execution e = exe.createProcessInstanceQuery()
.processInstanceId(piid).uniqueResult()
.findActiveExecutionIn(“state活动名称");
exe.signalExecutionById(e.getId());
定义
decision活动会运行并判断其中的每一个transition元素里的转移条件。当遇到一个transition的condition值为true的时候,那么流程就立即流向这个transition。
流程引擎并不会等待decision活动,它会马上执行完这个decision。
decision活动的expr属性
用一个三目运算符来判断到底要流向哪个transition。
decision活动的transition元素的condition子元素
用expr属性来判断是否流向这个transition。
decision活动的handler子元素
以上两种判断方式仍然没法完全满足我们的要求,还可以通过实现DecisionHandler接口来在java代码中决定到底到底流向哪个transition。
public class MyDecisionHandler implements DecisionHandler{
@Override
public String decide(OpenExecution execution) {
Integer age = (Integer) execution.getVariable("age");
if (age>=20){
return "yes";
}else{
return "no";
}
}
}
 
定义
task活动一般用来处理涉及人机交互的活动,流程引擎会停在这里等待人工的操作。
task活动的assignee属性
assignee属性用来指定任务分配给谁,可以使用变量来定义。
任务的候选者
candidate-users属性可以使用逗号分割的用户ID列表。所有列表中的用户会成为任务的候选者。用户想要接受这个任务,需要人工的takeTask。
相关api—领取任务
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
taskService.takeTask(“task的id”, “领取task的人员");
 
任务的候选组
candidate-groups属性可以使用逗号分割的用户组ID列表。所有列表中的用户组中的用户会成为任务的候选者。用户想要接受这个任务,需要人工的takeTask。
相关api—建立用户和用户组
ProcessEngine processEngine = Configuration.getProcessEngine();
IdentityService identityService = processEngine.getIdentityService();
 
identityService.createGroup("sales");
identityService.createUser(“zhang", “zhang", “san");
identityService.createUser(“li", “li", “si");
 
identityService.createMembership(“zhang", "sales");
identityService.createMembership(“li", "sales");
 
任务分配器
任务分配器AssignmentHandler的方式,可以说是最灵活的任务分配方式了,它支持使用java代码来指定任务的分配者。
相关api:
public class MyAssignmentHandler implements AssignmentHandler{
private String name;
public String getName() {
return name;
}
public void setName(String name) { this.name = name; }
 
public void assign(Assignable assignable, OpenExecution execution) throws Exception {
assignable.setAssignee(name);
}
}
 相应的配置示例:
<task name="task1" g="339,146,92,52">
     <assignment-handler class="cn.javass.test.task.handler.MyAssignmentHandler">
      <field name="name">
      <string value="ok"/>
      </field>
     </assignment-handler>
      <transition to="end1"/>
   </task>
 
定义
 当需要流程并发执行的时候,就需要使用到fork-join活动的组合,fork活动可以使流程在一条主干上出现并行的分支,join活动则可以使流程的并行分支聚合成一条主干。
定义
java活动可以指定一个Java类的方法,当流程执行到此活动时,马上自动执行此Java方法。
 
相关属性
class属性用来指定此Java类的全类名,要注意这个类要有public无参的默认构造方法。
method属性用来指定调用的方法。
var属性存储方法执行结果的流程变量名称。
public class MyJava {
private String user1;
private String user2;
…user1和user2的setter
public String sayHello(String arg1,String arg2){
 
System.out.println("user1=="+user1);
System.out.println("user2=="+user2);
System.out.println("arg1=="+arg1);
System.out.println("arg2=="+arg2);
 
return “Hello";
}
}
 
为Java类设置属性和为方法传递参数
在注册的时候,可以注册一个固定的值,也可以引用pi级的变量。
 <java g="246,135,92,52" name="java1" class="cn.javass.test.java.MyJava" method="sayHello" var="manager">
     <field name="user1"><object expr=“#{user1}”/></field>
     <field name="user2"><string value="user2“/></field>
     <arg><string value="xyz“/></arg>
     <arg><object expr="#{abc}“/></arg>
      <transition to="task1"/>
   </java>
 
定义
script活动可以指定一个表达式,当流程执行到此活动时,马上自动执行此表达式,默认用的是juEL。
 
相关属性
使用script活动有两种方式,一种是通过脚本表达式的方式,另外一种是通过脚本文本的方式。
1:脚本表达式的方式:就是在script活动上,使用expr属性来指定脚本表达式,用var属性来表示存储执行结果的流程变量名称。
2:脚本文本的方式:就是在script活动下添加text子活动,在text子活动里面写脚本表达式,同样使用var来表示存储执行结果的流程变量名称。
 
定义
 sql活动能够支持使用sql直接从数据库中查询数据,并将结果返回到流程变量中。
 
sql活动的属性
var属性存储sql执行结果的流程变量名称。
unique属性,此属性为true时,返回结果为一行,结果将作为一个单独的对象存储;此属性为false时,返回结果为多行,结果将作为一个Set存储。
 
sql活动的子元素
query子元素用来设置sql查询语句。
parameters子元素用来设置sql的外部参数。
Sql活动示例:
<sql g="192,438,92,52" name="sql1" unique="true" var="sqlV">
<query>
select * from tbl_user where uuid=:uuid
</query>
<parameters>
<object name="uuid" expr="#{uuid}"></object>
</parameters>
  <transition to="hql1"/>
</sql>
 
定义
 hql活动能够支持使用hql直接从数据库中查询数据,并将结果返回到流程变量中。
 
nhql活动的属性
var属性存储hql执行结果的流程变量名称。
unique属性,此属性为true时,返回结果为一行,结果将作为一个单独的对象存储;此属性为false时,返回结果为多行,结果将作为一个Set存储。
 
hql活动的子元素
query子元素用来设置hql查询语句。
parameters子元素用来设置hql的外部参数。
HQL活动示例:
<hql name="hql1" g="404,457,92,52" unique="true" var="hqlV">
<query>
select o from Parent o where o.id=:id
</query>
<parameters>
<string name="id" value="22"/>
</parameters>
  <transition to="task2"/>
</hql>
 
定义
foreach活动使得通过一条单独的流程路径来执行多条流程分支的功能。
 
相关属性
in:将被迭代的集合。集合中的每个元素会生成一个新的同步分支。in执行任意类型的集合,数组和以逗号分隔的字符串。。
var:用来保存集合中当前元素的变量。这个变量会设置到同步流程分支中,并且只对这个流程分支可见。
 
与join活动连用
通常情况下,foreach活动后面是多次执行的活动,在这个活动后面应该跟一个join活动,并且把join活动的multiplicity设置成为foreach的数量,这样才会等到foreach的多个task执行完成,流程才继续向下,否则,只要有一个foreach的task完成了,流程就向下流转了。
配置示例,如果在jPDL里面配置如下:
<foreach name="foreach1" in="D1,D2,D3" var="nowDep">
<transition to="task5"/>
</foreach>
<task name="task5">
<transition to="join1"/>
</task>
<join name="join1" multiplicity="3">
<transition to="task6"/>
</join>
 
那么当流程运行到foreach1的时候,会转移到task5活动3次,也就是会生成3个task5的实例。
获取变量示例,在task5的实例里面,如何获取自己的nowDep呢?
很简单,根据自己的task实例的id来获取变量就可以了,如下:
String nowDep = ts.getVariable(taskInstance.getId(),“nowDep”);
定义
ules是一个自动活动,它会创建一个有状态的知识会话,在它中间放入一系列事实,然后触发所有规则。这些规则可以更新或创建流程变量,以后可以在流程中使用。事实可以被指定为rules活动的子元素。
相关子元素
fact:事实,相当于规则引擎的一条规则。
fact的属性:
var:变量名,作为fact 插入的变量名称。
expr:表达式,表达式的结果会作为一个事实插入。
 var 或 expr 必填一个。
 
注意:如果一个rules 活动只有一个外向转移,就会自动使用它。 而多个外向转移可以在rules活动后面显示的使用decision活动。
 
配置示例,如果在jPDL里面配置如下
<rules name="rule1">
<fact var="um"></fact>
<transition to="exclusive2"/>     
</rules>
<decision name="exclusive2">
<transition name="toT7" to="task7">
<condition expr="#{um.canDrink}"/>
</transition>
<transition name="toT8" to="task8">
<condition expr="#{!um.canDrink}"/>
</transition>
</decision>
 
配套的UserModel就是一个普通的VO
对应的规则文件示例如下:
rule "CheckCanDrink"
  when
    um : cn.javass.jbpm4.hello.UserModel( age > 18,uuid=="11")
  then
    um.setCanDrink( true );
end
启动流程的时候需要同步发布规则文件
rs.createDeployment().addResourceFromClasspath("cn/javass/jbpm4/hello/h2.jpdl.xml")
.addResourceFromClasspath("cn/javass/jbpm4/hello/rule1.drl")
.deploy();
在运行规则活动之前,需要设置好规则需要的变量,比如在启动流程的时候:
Map map = new HashMap();
UserModel um = new UserModel();
um.setUuid("11");
um.setAge(50);
map.put("um", um);
exe.startProcessInstanceByKey("h2",map);
 
jBPM事件机制介绍
jBPM的事件机制使得我们可以很方便的在流程、活动、任务生命周期的各个阶段插入定制的代码逻辑,以便实现特定的业务逻辑操作。正是这种机制赋予了jBPM无限的可扩展性。
事件(event)用来定位在流程执行过程中的特定的时间点,例如“流程实例开始”、“状态活动结束”等,可以在这些时间点上注册一系列的监听器。当流程的执行通过这些时间点时,监听器的代码就会被执行。
 
on活动
监听器在jpdl中可以被定为on活动。
on活动的event属性{start|end}指明了监听器是在进入还是结束时触发。
on活动的作用范围
on活动作为谁的子活动,就是为谁定义开始或结束事件,常见的活动,都可以定义为on的父活动。
比如on活动作为<process>的子活动,就表示监听流程的开始或结束。
on活动作为一些活动活动的子活动,如<state>、<task>、<decision>,表示监听这个活动的开始或结束。
on活动的子活动
on活动的子活动用来表示:当监听事件发生的时候,都可以触发什么样的“自定义代码”。
 典型的为<event-listener>,可以注册一个实现了EventListener接口的类。其他一些典型的自动活动(流程引擎不会停下来等的活动),也可以作为on活动的子活动。如前面学过的<java>、<sql>和<hql>。
 
监听器还可以作为<transition>元素的子元素
<event-listener>、<java>、<sql>、<hql>等自动活动还可以作为<transition>元素的子元素,在流经这个<transition>的时候被执行。
 
事件监听器实现示例
只需要实现EventListener接口即可。
 
public class MyEventListener implements EventListener{
public void notify(EventListenerExecution exection) throws Exception {
System.out.println("走出Decistion");
}
}
<?xml version="1.0" encoding="UTF-8"?>
 
<process name="test9" xmlns="http://jBPM.org/4.4/jpdl">
   <on event="start">
   <event-listener class="cn.javass.test.event.MyEventListener1">
   <field name="haha">
   <object expr="#{uuid}"/>
   </field>
   </event-listener>
   </on>
   <start name="start1" g="84,115,48,48">
      <transition to="task1"/>
   </start>
   <end name="end1" g="778,120,48,48"/>
<task name="task1" g="358,124,92,52" assignee="wang">
   <on event="start">
   <event-listener class="cn.javass.test.event.MyEventListener3">
   </event-listener>
   </on>
      <transition name="yes" to="end1" g="-47,-17">
      <event-listener class="cn.javass.test.event.MyEventListener5"/>
      </transition>
      <transition name="no" to="task2" g="-53,-17"/>
   </task>
   <task name="task2" g="536,218,92,52" assignee="zhang">
      <transition to="end1"/>
   </task>
</process>
 
 
分享到:
评论

相关推荐

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

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

    jbpm工作流引擎总结文档

    jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。

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

    - **jBPM4工作流应用开发指南:** 表明这是一个专注于jBPM4版本的工作流应用开发的指南,由胡奇编写。 - **胡奇:** 该标签重复提及胡奇,强化了指南作者的身份和该作品的关联性。 ### 部分内容知识点: 由于提供...

    JBPM工作流引擎内核设计思想及构架笔记分享

    在 JBPM 工作流引擎内核设计中,需要注意到以下几点: * 引擎内核应该是微内核的流程引擎架构,包含最基本的对象和服务,以及用于解决流程运行问题的调度机制和执行机制。 * 引擎内核的设计思想是围绕着如何解决一...

    jbpm4.0工作流引擎中文版

    jbpm4.0工作流引擎中文版 新的出来了 悄悄的 悄悄的

    基于java的jBPM4工作流引擎

    【基于Java的jBPM4工作流引擎】是企业级业务流程管理的重要工具,它提供了一种灵活且可扩展的方式来定义、执行和管理工作流。jBPM4是jBPM系列的一个版本,专为Java开发者设计,允许他们构建复杂的业务流程,通过编排...

    jbpm和shark工作流引擎对比.doc

    jbpm和shark工作流引擎对比 本文对jbpm和shark工作流引擎进行了深入的比较,涵盖了稳定性、易用性、灵活性、可监管性、扩展性和可维护性等多方面。工作流引擎是企业信息化建设中非常重要的一环,选择合适的工作流...

    jbpm工作流引擎介绍

    jbpm(Java Business Process Management)是一款开源的工作流引擎,它为业务流程自动化提供了一套强大的框架。jbpm致力于实现业务流程的建模、部署、执行和监控,是基于Java技术的,因此它天然地适用于Java开发环境...

    JBPM4工作流介绍.pptx

    PVM是JBPM4内部的工作流引擎,而JPDL用于描述和定义工作流过程。 通过使用JBPM4,开发者可以构建出高效且灵活的工作流解决方案,有效地应对业务流程的动态变化,同时确保系统的稳定性和可维护性。工作流管理系统...

    JBPM4工作流介绍.ppt

    本篇文章将对JBPM4工作流进行详细的介绍,涵盖工作流的概念、工作流引擎、工作流管理系统等方面的知识点。 一、工作流的概念 工作流是指在一个工作群组中,为了达成某一个共同目的而需要多人协力以串行或平行工作...

    jBPM4工作流示例jbpmDemo

    **jbPM4工作流示例jbpmDemo**是一款基于jBPM4的工作流管理系统实例,旨在帮助用户深入了解和掌握jBPM4工作流引擎的使用方法。jBPM4是一款强大的开源工作流管理系统,它提供了流程建模、执行以及监控等功能,广泛应用...

    jBPM4工作流应用开发指南完整版带书签

    虽然无法直接了解具体内容,但根据以上知识,可以认为“jBPM4工作流应用开发指南完整版带书签”是一份全面的文档,覆盖了jBPM4工作流的构建和运行所需的关键步骤和实践。开发者可通过这份指南获得在不同业务场景中...

    JBPM4.4工作流引擎实例demo

    jBPM4.4版本是该系统的一个重要里程碑,它在功能和性能上都有显著提升,为开发者提供了强大的工作流引擎实例,帮助他们实现业务流程自动化。 ### 1. jBPM工作流引擎的核心概念 - **流程定义**: 使用jBPM,开发人员...

    JBPM3.2.2工作流引擎源代码

    JBPM3.2.2源码,工作流引擎。JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源...

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

    **jBPM4工作流应用开发指南** jBPM4是一款强大的开源工作流管理系统,它为业务流程管理和执行提供了一套完整的解决方案。本指南将深入探讨jBPM4的特性和使用方法,帮助开发者实现高效的工作流应用开发。 **1. jBPM...

    李腾飞JBPM工作流引擎代码test01到test04

    【李腾飞JBPM工作流引擎代码test01到test04】是一系列关于使用JBPM工作流引擎进行程序开发的示例代码。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行和管理业务流程...

    Java四大主流开源工作流引擎分析Shark,osworkflow,jbpm,jflow

    本文将深入分析四个主流的开源工作流引擎:Shark、osworkflow、jbpm和jflow。 首先,Shark是Enhydra项目的一部分,Enhydra是一个涵盖广泛的技术栈,包括J2EE应用服务器、对象/关系映射工具以及工作流引擎等。Shark...

    JBPM工作流引擎

    JBPM工作流引擎是一种基于Java的开源工作流管理系统,它允许开发者和企业构建、部署和管理业务流程。JBPM提供了全面的工作流解决方案,包括流程设计、执行、监控和优化,旨在提高工作效率,简化复杂的业务操作。 ...

    jbpm-2.0-beta1.zip_java 工作流引擎_jbpm_jbpm-demo_工作流_工作流引擎

    jbpm-2.0-beta1是该系统的早期版本,其核心功能包括工作流引擎、流程建模工具以及一系列示例项目,如jbpm-demo,用于帮助用户更好地理解和应用jbpm。 工作流引擎是jbpm的核心组件,它负责解析和执行工作流定义...

Global site tag (gtag.js) - Google Analytics