JavaEE:Jbpm笔记

一、配环境
1.导包:
activation.jar
antlr-2.7.6.jar
asm.jar
bsh.jar
cglib.jar
commons-collections.jar
commons-logging.jar
dom4j.jar
hibernate3.jar
jboss-backport-concurrent.jar
jboss-j2ee.jar
jboss-retro-1.1.0-rt.jar
jbpm-identity.jar
jbpm-jpdl.jar
jcr-1.0.jar
log4j.jar
mysql-connector-java-5.1.5-bin.jar

2.复制四个文件,并对hibernate进行配置:
hibernate.cfg.xml
jbpm.cfg.xml
log4j.properties
流程图.zip


二、设计流程

1.安装jbpm-jpdl插件:
eclipse:将插件文件夹放在eclipse/dropins下
MyEclipse:在links目录下的com.genuitec.eclipse.MyEclipse.link文件中添加path=插件路径

2.设计流程图:
Decision节点:
判断选择功能,可以添加Handler,选择delegation,再写上处理类,处理类要实现DecisionHandler接口

Start、TaskNode、End、Transition(箭头):
可以添加Events,选择什么时候激活事件,只要在:node-leave为离开、node-enter为进入,在其中新建action,Details中选择Handler,指定处理类全名
整个流程可以用一个事件类,指第一个事件后,后面的action可以引用前面的action名称,要在action中写入前面action的名称,再选中Reference

通过TaskNode节点动态设置处理任务的员工名称:
Tasks-->New Task-->Assignment-->Handler-->写上处理类全名
处理类要实现AssignmentHandler接口,调用Assignable.setActorId("员工名称");

通过TaskNode节点动态设置处理任务的一组员工名称:
Tasks-->New Task-->Assignment-->Pooled Actors-->员工1,员工2

启动流程实例中设置,实现动态设置员工名称:
pi.getContextInstance().setVariable("键名","员工名称");
Tasks-->New Task-->Assignment-->Actor-->#{键名}     //相当于jsp中的${名}

启动流程实例中设置,实现动态设置一组员工名称:
pi.getContextInstance().setVariable("actorIds", new String[] { "", "" });
Tasks-->New Task-->Assignment-->Pooled Actors-->#{键名}

3.流程定义文档par(process archive):
包括:gpd.xml、processdefinition.xml(必须有)、processimage.jpg、classes文件夹
要压缩成.zip格式


三、用jbpm框架操作流程

1.建表
加载hibernate.cfg.xml文件,并在数据库中建表:
new Configuration().configure().buildSessionFactory();

2.部署流程定义
读取jbpm.cfg.xml文件:
JbpmConfiguration cfg = JbpmConfiguration.getInstance();

打开Session,并开始事务:
JbpmContext jbpmContext = cfg.createJbpmContext();

解析"流程图.zip"文件:
ProcessDefinition pd = ProcessDefinition.parseParResource("流程图.zip");
ProcessDefinition pd = ProcessDefinition.parseParZipInputStream(zipInputStream);

解析流程图包中的processdefinition.xml文件:
ProcessDefinition pd = ProcessDefinition.parseXmlResource("processdefinition.xml");
ProcessDefinition pd = ProcessDefinition.parseXmlInputStream(inputStream);
ProcessDefinition pd = ProcessDefinition.parseXmlReader(reader);

解析xml字符串:
ProcessDefinition pd = ProcessDefinition.parseXmlString(xmlString);

将流程保存到数据库表中(部署流程):
jbpmContext.deployProcessDefinition(pd);
jbpmContext.getGraphSession().deployProcessDefinition(pd);

回滚事务:
jbpmContext.setRollbackOnly();

提交或回滚 事务,并关闭Session:
jbpmContext.close();

3.显示流程定义
返回所有流程:
List<ProcessDefinition> list = jbpmContext.getGraphSession().findAllProcessDefinitions();
返回所有最新版本的流程:
List<ProcessDefinition> list = jbpmContext.getGraphSession().findLatestProcessDefinitions();

4.删除流程
删除指定id的流程:
jbpmContext.getGraphSession().deleteProcessDefinition(id值);

5.启动流程实例
获取指定流程名称的最新的版本:
ProcessDefinition pd = jbpmContext.getGraphSession().findLatestProcessDefinition("流程名");

创建一个指定流程的实例:
ProcessInstance pi = pd.createProcessInstance();

设置流程变量:
pi.getContextInstance().setVariable("变量名","值");

设置一组流程变量:
pi.getContentInstance().setVariable("变量名",new String[]{值1,值2});

离开开始节点,让指针跳到下一个节点:
pi.getRootToken().signal();

6.显示待办任务列表
查出该员工的未完成的任务列表:
List<TaskInstance> list = jbpmContext.getTaskList("员工名");
List<TaskInstance> list = jbpmContext.getTaskMgmtSession().findTaskInstances("员工名");

得到该流程实例的所有任务:
Collection<TaskInstance> taskInstances= pi.getTaskMgmtInstance().getTaskInstances();
TaskInstance ti = taskInstances.iterator().next();  //得到第一个任务实例,这方法用于自动执行开始任务用

查出属于小组任务列表:
List<TaskInstance> list = jbpmContext.getTaskMgmtSession().findPooledTaskInstances("该小组员工名");

7.办理任务
创建任务实例:
TaskInstance ti = jbpmContext.getTaskInstance("任务id");
TaskInstance ti = jbpmContext.getTaskMgmtSession().getTaskInstance("任务id");

将小组任务分配给某个员工(执行此操作后,该任务只属该员工,在小组中再无此任务):
TaskInstance ti = jbpmContext.getTaskInstance("小组任务id");
ti.setActorId("员工名");

获取流程变量值:
pi.getContextInstance().getVariable("变量名");

开始任务:
ti.start();

结束任务:
ti.end();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值