工作流及JBPM
一、业务流程示例
流程性运用:在业务规则中,不同的人参与不同的业务环节,最终形成业务结果。
在业务流程中参与的人员叫做参与者(participant);参与者所要完成的事项称之为活动(task也称为任务);每一个任务都需要操作数据。
JBPM是处理流程应用的,可以解决在业务流程中数据的处理以及在不同的参与者进行不同的任务时的协作。
二、工作流(Work Flow)
WFMC(工作流管理联盟),该组织推出了工作流XML(Wf-XML)和XML过程定义语言(XPDL)。
该组织规定:工作流就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务过程看作是一条河,其中流过的河水就是待审核的表单。
工作流属于计算机支持的协同工作(Computer Supported Cooperative Work,CSCW)的一部分。
三、工作流管理系统(Workflow Management System, WfMS)?
WFMC定义:工作流管理系统是一个软件系统,它完成工作流的定义和管理,并按照在计算机中预先定义好的工作流逻辑推进工作流实例的执行。其产品结构如附图。
工作流及工作流系统主要概念
流程定义:预先定义的业务流转逻辑
流程实例:业务的一次实际流转过程
参与者:任务的执行者
活动(任务):组成流程定义的节点
活动实例:组成流程实例的元素
流转:从一个节点到另一个节点的行为
工作列表:当前需要办理的任务集合
工作流引擎:工作流的核心组件,对流程实例、任务实例以及其状态进行管理
工作流系统核心模型
思考的问题:为什么要持久化?
最主要的原因是需要状态的延续。
工作流系统研究入口点
如何编写流程定义
如何部署流程
如何加载流程
如何启动流程
如何执行任务
如何完成任务
JBPM简介
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它的名称也改成JBoss jBPM。
就是它的商务逻辑定义没有采用目前的一些规范,如WfMC,XPDL, BPML, ebXML, BPEL4WS等,而是采用了它自己定义的JBoss jBPM Process definition language (jPdl)。jPdl认为一个商务流程可以被看作是一个UML状态图。jPdl就是详细定义了这个状态图的每个部分,如起始、结束状态,状态之间的转换,过图型化的流程定义,直观地描述业务流程。
jBPM的另一个特色是它使用Hibernate来管理它的数据库。Hibernate是目前Java领域最好的一种数据存储层解决方案,只要是 Hibernate 支持的数据库, jBPM 也就支持。通过Hibernate,jBPM将数据的管理职能分离出去,自己专注于商务逻辑的处理。
八、JBPM与之对应的一些概念和名词
1. 流程定义(ProcessDefinition)
定义了流程的业务逻辑,包含业务节点和流转。是有向图结构。
<process-definition name="请假">
<start-state name="start">
<transition name="to_state" to="部门经理审批"/>
</start-state>
<task-node name="门经理审批">
<task>
<assignment class=""/>
</task>
<transition to="end" name="to_end"/>
</task-node>
<end-state name="end"/>
</process-definition>
流程实例(ProcessInstance)
执行期间的体现,包含了流程定义被解释后的一些信息,诸如开始时间,结束时间等及其他一些相关信息。
任务(Task)
是ProcessInstance的组成部分,定义了活动具体的内容。
任务实例(TaskInstance)
Task被解释执行时的信息,包括:开始时间,结束时间,参与者id。
参与者(Actor)
问题:参与者规定为用户还是角色?
Token
概念来自Petri网,Petri网是1960年代由卡尔·A·佩特里发明的,适合于描述异步的、并发的计算机系统模型。Petri网既有严格的数学表述方式,也有直观的图形表达方式,既有丰富的系统描述手段和系统行为分析技术,又为计算机科学提供坚实的概念基础。由于Petri网能够表达并发的事件,被认为是自动化理论的一种。研究领域趋向认为Petri网是所有流程定义语言之母。
Petri网元素:
库所(Place)圆形节点;变迁(Transition)方形节点;有向弧(Connection)是库所和变迁之间的有向弧;令牌(Token)是库所中的动态对象,可以从一个库所移动到另一个库所。
Token是一个指针(运行期的概念),代表着一条执行路径,指向当前流程中正在执行的节点。在实例运行期间,Tokens可能是一树形结构。同一时刻,可能存在多个token,但是只有一个rootToken。
JBPM API
流程定义操作
1).发布流程定义:
//JBPM内部通过各种服务进行协作,服务接口从流程引擎中获得
ProcessEngine processEngine = Configuration.
getProcessEngine();
RepositoryService repositoryService
= processEngine.getRepositoryService();
//发布流程定义时会返回一个流程定义的Id
String depolyId = repositoryService.createDeployment().
addResourceFromClasspath("helloWorld.jpdl.xml")
.deploy();
.查看已发布的流程定义:
List<ProcessDefinition> list = repositoryService.
createProcessDefinitionQuery().list();
for(ProcessDefinition pd : list) {
System.out.println(pd.getId());
}
.删除流程定义
repositoryService.deleteDeploymentCascade(deployId);
级联删除的含义:当前流程定义若有流程实例,调用deleteDeployment()会报异常,需要使用deleteDeploymentCascade()方法。
流程控制
1).开始流程
ExecutionService executionService =
processEngine.getExecutionService();
ProcessInstance pi = executionService.
startProcessInstanceByKey("helloWorld");
//判断流程实例是否结束
//在流转到state时候会等待,直到外部触发器执行
System.out.println(pi.isEnded());
//执行等待的流程
pi = executionService.signalExecutionById(pi.getId());
System.out.println(pi.isEnded());
2).强制终止流程
executionService.endProcessInstance(
pi.getId(),"cancel");
3).删除流程实例
executionService.deleteProcessInstanceCascade(
pi.getId());
* JPBM与tomcat6.X冲突问题
原因是项目中WEB-INF\lib中的三个jar包(juel.jar, juel-engine.jar, juel-impl.jar)和tomcat6下lib中jar包(el-api.jar)冲突
解决方法:
将juel.jar, juel-engine.jar, juel-impl.jar这三个包复制到tomcat6下lib中,并删除原来的el-api.jar,切记要把WEB-INF\lib中的juel.jar, juel-engine.jar, juel-impl.jar删除。不然还是要冲突。
示例:
1.通过字符串发布流程
String xml = request.getParameter("xml");
repositoryService.createDeployment().addResourceFromString(
"process.jpdl.xml", xml).deploy();
2.获取最新流程
protected List<ProcessDefinition> getLastProcessDefinition(
HttpServletRequest request,
HttpServletResponse response) {
List<ProcessDefinition> processDefinitions =
repositoryService.createProcessDefinitionQuery().
orderAsc(ProcessDefinitionQuery.PROPERTY_NAME).list();
Map<String, ProcessDefinition> map =
new LinkedHashMap<String, ProcessDefinition>();
for (ProcessDefinition pd : processDefinitions) {
String key = pd.getKey();
ProcessDefinition definition = map.get(key);
if (definition == null ||
(definition.getVersion()) < pd.getVersion()) {
map.put(key, pd);
}
}
return new ArrayList(map.values());
}
3.删除流程定义
String id = request.getParameter("id");
ProcessDefinition pd = repositoryService.
createProcessDefinitionQuery().
processDefinitionId(id).uniqueResult();
repositoryService.deleteDeployment(pd.getDeploymentId());
4.启动流程
String key = request.getParameter("key");
ProcessInstance pi =
executionService.startProcessInstanceByKey(key);
5.查询流程
String pdId = request.getParameter("id");
return executionService.createProcessInstanceQuery()
.processDefinitionId(pdId).list();
6.执行流程实例
String pid = request.getParameter("pid");
executionService.signalExecutionById(pid);
3.控制流程的活动(节点)
1).控制流程的活动
Start(开始)、End(结束)、Decision(决定选流向)、Fork(分支)、Join(汇聚)、Sub-process(子流程)、State(等待状态)、Custom(操作流程)、Task(生成人工任务)
.原子活动(不会影响流向)
Java、Script、Sql、Hql、Mail
组织架构
在流程定义图上Assignment指定candidate-groups
ProcessEngine processEngine = Configuration.getProcessEngine();
IdentityService identityService
= processEngine.getIdentityService();
identityService.createGroup("admin");
//参数的含义:userId,givenName,familyName,email
identityService.createUser("user1", "user1", "user1");
identityService.createUser("user2", "user2", "user2");
identityService.createMembership("user1", "admin");
identityService.createMembership("user2", "admin");
TaskService taskService = processEngine.getTaskService();
//查询当前用户有多少候选任务
List<Task> groupTaskList =
taskService.findGroupTasks("user1");
Task task = groupTaskList.get(0);
taskService.takeTask(task.getId(), "user1");
taskService.completeTask(task.getId());
事件监听
<on event="start">
<event-listener class=
"com.fendou.wangke.ProcessStartListener"/>
</on>
<on event="end">
<event-listener class=
"com.fendou.wangke.ProcessEndListener"/>
</on>
监听器类需要实现EventListener接口
流程图跟踪
将流程定义文件和图打包成ZIP,例如:leave.zip
发布流程定义和流程图
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService =
processEngine.getRepositoryService();
ZipInputStream zis = new ZipInputStream(
this.getClass().getResourceAsStream("/leave.zip"));
repositoryService.createDeployment().
addResourcesFromZipInputStream(zis).deploy();
提供生成图片的JSP页面
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService =
processEngine.getRepositoryService();
ProcessDefinition processDefinition =
repositoryService.createProcessDefinitionQuery().
processDefinitionId(pid).uniqueResult();
InputStream is = repositoryService.getResourceAsStream(
processDefinition.getDeploymentId(), "leave.png");
byte[] b = new byte[1024];
int len = -1;
while((len = is.read(b,0,1024)) != -1) {
response.getOutputStream().write(b,0,len);
}
<img src="pic.jsp?id="
style="position:absolute;left:0px;top:0px">
动态显示
ExecutionService executionService =
processEngine.getExecutionService();
ProcessInstance processInstance =
executionService.findProcessInstanceById(id);
Set<String> activityName =
processInstance.findActiveActivityNames();
ActivityCoordinates ac = repositoryService.
getActivityCoordinates(processInstance.
getProcessDefinitionId(),
activityName.iterator().next());
<div style="position:absolute; border:3px solid red;
left:<%=ac.getX()%>px;top:<%=ac.getY()%>px;
width:<%=ac.getWidth()%>px;height:<%=ac.getHeight()%>px"/>
分享到:
相关推荐
本指南将深入探讨如何利用Eclipse与jBPM 4.4版本相结合,实现高效的工作流应用开发。 首先,我们要理解jBPM是什么。jBPM是一个开源的工作流管理系统,它提供了对业务流程建模、执行和监控的全面支持。jBPM 4.4是其...
工作流引擎jbpm学习笔记 jbpm是一个专业的工作流引擎,用于定义、管理和执行业务流程。它可以帮助我们简化工作流程的开发和维护,提高工作效率和可扩展性。 一、什么是公文流转? 公文流转是指公文在定义流转中的...
jbpm工作流整合是一个关键的主题,它涉及到企业级业务流程管理(BPM)系统的实施与集成。jbpm是一个开源的工作流管理系统,它提供了一套全面的工具和框架,用于设计、执行、监控和优化业务流程。这个压缩包可能包含...
**jbPM4工作流示例jbpmDemo**是一款基于jBPM4的工作流管理系统实例,旨在帮助用户深入了解和掌握jBPM4工作流引擎的使用方法。jBPM4是一款强大的开源工作流管理系统,它提供了流程建模、执行以及监控等功能,广泛应用...
工作流是一种计算机化的技术,...总之,工作流和JBPM(开源工作流引擎)是企业提升运营效率和流程自动化的重要工具。通过理解和应用这些概念,企业可以更好地管理和优化其业务流程,以适应不断变化的需求和市场环境。
**jBPM工作流详解** jBPM,全称Java Business Process Management,是Red Hat公司开发的一款开源的工作流管理系统,它提供了对业务流程的建模、执行和监控能力。jBPM不仅支持传统的工作流标准,如BPMN 2.0,还集成...
jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。
工作流引擎JBPM,全称为Java Business Process Management,是一款开源的工作流管理系统,主要用来管理和执行业务流程。然而,这里提到的是一个.Net版本的实现,这表明开发者或团队可能已经将JBPM的核心概念和功能...
jbpm是一款开源的工作流管理系统,主要面向Java开发者,它提供了强大的流程定义和执行能力,帮助企业或组织实现自动化的工作流程。jbpm-2.0-beta1是该系统的早期版本,其核心功能包括工作流引擎、流程建模工具以及一...
jBPM4作为该系列的一个版本,提供了一套完整的流程管理和执行框架,允许开发者构建灵活的工作流应用,以实现业务流程自动化。本指南由胡奇编写,旨在为开发者提供一个全面的参考,帮助他们快速学习和掌握使用jBPM4...
### jbpm Java工作流 教程 #### 一、jbpm简介 JBPM(Java Business Process Model)是Red Hat提供的一款开源的工作流引擎,用于在Java应用程序中实现业务流程管理(BPM)。它基于规范化的BPMN 2.0标准,支持图形化...
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...
### 工作流JBPM开发计划书 #### 一、项目背景与目标 在当前数字化转型的大背景下,企业越来越依赖于高效的工作流程管理来提升业务效率和服务质量。JBPM(JBoss流程管理)作为一款开源的工作流引擎,因其灵活性、可...
《jBPM User Guide》是Java开发者们在深入探索工作流管理时不可或缺的一份参考资料。jBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了完整的业务流程建模、执行、监控和管理工作能力...
### jBPM工作流开发详解 #### 一、引言 随着企业业务流程日益复杂,工作流管理系统(Workflow Management System, WfMS)逐渐成为提高工作效率、实现业务自动化的重要手段。jBPM作为一款功能强大的开源工作流引擎...
"java 工作流"和"jbpm 工作流"标签进一步明确了主题,这是一份关于使用Java语言和JBPM框架实现工作流的材料。 描述中提到的“jbpm工作流视频文件,B5实战_将复杂业务数据模型关联到流程”表明,这份资料可能是以...
jBPM(Java Business Process Management)是Jboss推出的一个开源工作流管理系统,它提供了对企业经营过程的建模、执行和监控能力。通过jBPM,可以实现业务逻辑和过程逻辑的分离,使得在不改变具体功能实现的前提下...
jbpm工作流是一款开源的工作流程管理系统,主要用于设计、执行和管理业务流程。它结合了Java技术和BPM(Business Process Management)理念,为开发者提供了一套强大的工具,使得企业能够更有效地自动化和优化业务...
【JBPM工作流全套学习资料】是一份详尽的学习资源,涵盖了JBPM工作流系统的基础到高级知识。JBPM(Java Business Process Management)是开源的企业级工作流管理系统,它允许开发者设计、部署和执行业务流程。这个...
jbpm工作流框架 BPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,使用它要...