JBPM入门介绍

Jbpm是一种工作流引擎,常用来做OA系统等。

工作流系统研究切入点(如何去学习工作流的一个思路,这是一个业务流程的思路)

1.编写流程定义

2.部署流程

3.加载流程

4.启动流程

5.执行任务

6.完成任务

流程的定义:预定义的业务流转逻辑

流程实例:业务的一次实际流转过程

参与者:任务的执行者

活动(任务):组成流程定义的节点

活动实例:组成流程实例的元素

流转:从一个节点到另一个节点这一行为

工作列表:当前需要办理的任务集合

工作流的核心组件,对流程实例进行管理

Token是和指针(运行期的概念)代表着一条执行路径,指向当前流程中正在执行的节点在实例运行期间,tokens可能是一个树形结构,同一时刻可能存在多个token但是只有一个root token

-------------------------------------------------------------

针对Jbpm如何去按上面的思路去做呢?

1.流程的定义:可以用图形化的工具也可以自己手工写。

2.部署流程:通过加载xml文件,把xml信息转换成java信息。发布流程

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

GraphSession graphSession=jbpmContext.getGraphSession();

ProcessDefinition processDefinition=ProcessDefinition.parseXmlResource("org/test/a.xml");

//部署流程定义,如果已经存在同名的定义,则版本号会自动累加

graphSession.deployProcessDefinition(processDefinition);

jbpmContext.close();

3.加载流程和启动流程:

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

GraphSession graphSession=jbpmContext.getGraphSession();

//加载流程的定义

ProcessDefinition processDefinition=graphSession.loadProcessDefinition(processDefinitionID);//这个Id是流程的Id

//创建流程实例,启动流程

ProcessInstance processInstance=new ProcessInstance(processDefinition);

//此时,rootToken指向流程定义的第一个节点

jbpmContext.save(processInstance);

jbpmContext.close();

4.获取工作列表

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

TaskMgmtSession mgmtSession=jbpmContext.getTaskMgmtSession();

//只能获取尚未完成的任务列表(代办任务)

List list=taskMgmtSession.findTaskInstance(userId);//userid为参与者的id

//如果需要灵活的列表获取接口,需要直接使用hibernate session对象对数据进行查询

TaskInstance instance=mgmtSession.getTaskInstance(Long.parseLong(taskId));

//这两种获取列表的方式不太一样,第一个返回List,第二个返回TaskInstance对象

5.执行任务

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

TaskMgmtSession mgmtSession=jbpmCotext.getTaskMgmtSession();

TaskInstance taskInstance=mgmtSession.getTaskInstance(Long.parseLong(taskId));

taskInstance.start(); //start方法的调用标识着一个任务执行的开始,任务的开始时间会被填充

jbpmContext.save(taskInstance);

jbpmContext.close();

6.结束任务

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

TaskMgmtSession mgmtSession=jbpmContext.getTaskMgmtSession();

TaskInstance taskInstance=mgmtSession.getTaskInstance(Long.parseLong(taskId));

taskInstance.end();

jbpmContext.save(taskInstance);

jbpmContext.close();

//end方法的调用1.当前的任务实例结束,任务结束时间会被填充。2.下一个节点的初始化3.当前任务的结束和下一

//个流程的开始是在一个事物内完成,从而保证了数据的完成性

-------------------------

如何给任务设置参与者

1.用变量传递参与者Id

值一般的web层确定

2.定义配置

<task-node name="collection">

<task>

<assignment class="com.modern.Test">

<assignment actor-id='#{userid}'>

</task>

</task-node>

3.Handler实现

public class F implements AssignmentHandler{

public void assign(Assignable arg0,ExecutionContext arg1)throws Exception{

String actorId=(String)arg1.getVariable("userId");

arg0.setActorId(actorId);

}

}



---------------------

Context标识着事物

它的的底层序列化是用hibernate实现的,createContext是开启hibernatesession的过程,close 是关闭hibernatesession的过程

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

try{

TaskInstance taskInstance=

.............do your process operations.............

}catch(Exception e){

}finally{

jbpmContext.close();

}

---------------------------------------

两种session的用法:

GraphSession的典型用法

职责;GraphSession处理相关的数据持久化操作,主要是ProcessDefinition 和ProcessInstance

TaskMgmtSession 的典型用法:

职责:1.TaskInstance相关的数据的查询操作

2.TaskInstance数据通过ProcessInstance进行保存它没有save方法,save是通过对processInstance的操作实现的

**********************************

jbpm是工作流的一种

jbpm_processdefinition 是工作流的流程定义

jbpm_processInstance是工作流的实例

jbpm_id_user是一个参与者

jbpm_token是这Token的一个表,其中node记录正在执行的节点

jbpm_bytearray存所上传的3个文件,生成图片是为了流程跟踪

jbpm_byteblock存的是上传文件里的内容
发布了38 篇原创文章 · 获赞 0 · 访问量 1965
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章