您的位置:首页 > 产品设计 > 产品经理

Jbpm 4.4学习笔记(二)

2013-11-01 22:53 429 查看
jbpm是面向流程编程的框架。

1.key是文件名称,类似于startProcessInstanceByKey这样的方法就是按照文件名查找

2.state,状态节点为典型的等待状态,它不会向任务列表添加任务。

task节点本质上还是state的一种,只是多了个参与者。当一个流程运行到任务节点(task)时会生成Task Instance对象,并添加到参与人的任务列表当中,之后处于等待状态,直到参与人完成任务。

可以使用assignee、swimelane等把任务分配到某个人或某个组,对应的用户可以执行completeTask结束任务。

3.ProcessEngine是一个工厂类,可以用get方法获取6大service类。jbpm只包含6个service类。

Jbpm的核心

①ProcessEngine 流程引擎

②RepositoryService 主要用于发布流程定义

③ExecutionService 流程执行服务

④TaskService 主要是任务服务,控制task的各项操作。主要目的是体工队任务列表的访问途径。

4.流程变量,更确切的将应该为流程局部变量,指的是在一个流程实例中可以共享的数据信息,也就是指变量的值得作用域。类似于ThreadLocal

流程变量在流程外部,通过ExecutionService提供的方法进行访问。

举个例子

@Test//创建流程实例时放入变量
public void testVariable(){
ExecutionService executionService = processEngine.getExecutionService();
Map<String,Object> map = new HashMap<String,Object>();
map.put("teacher", "zhangsan");
map.put("a", "aaaa");
ProcessInstance pi = executionService.startProcessInstanceByKey("hi",map);
System.out.println(pi.getId());
}

@Test//读取流程实例中的相关变量
public void testReadVariable(){
ExecutionService executionService = processEngine.getExecutionService();
ProcessInstance  pi = executionService.findProcessInstanceById("hi.500001");
String str  = (String) executionService.getVariable(pi.getId(), "a");
System.out.println(str);
}

5.jbpm中使用ExecutionService来控制对state的signal操作。

使用TaskService控制task的各项操作。

6.jbpm对于所有的流程执行操作默认都是同步的。比如一个多个线性的自动执行活动中,默认是一个活动执行完毕才执行下一个活动。

活动的异步属性continue有三种值可选,sync,async和exclusive

sync:默认值,表示同步执行,使用当前事务

async:启动异步执行,当前事务被自动提交,活动在一个新事物中执行。

exclusive:与async不同的是,此异步信息具有独占性。

当需要流程并发执行的时候,就需要使用fork-join节点的组合。fork活动可以使流程在一条主干上出现并行的分支,join活动则可以使流程的并发分支聚合成一个主干。

7.spring和jbpm整合

jbpm中整合spring目的是将jbpm的事务由spring来管理,这样可以和业务系统事务结合。需要修改三点:



<import resource="jbpm.tx.hibernate.cfg.xml" />

改为

<import resource="jbpm.tx.spring.cfg.xml" />

②在jbpm.cfg.xml中,根节点中加入下面的节点:

<process-engine-context>
<string name="spring.cfg" value="applicationContext.xml" ></string>
</process-engine-context>

③事务管理器的配置,如果事务管理器默认名称为transactionManager,那么此处不用修改,否则需要到jbpm的包中修改

<spring-transaction-interceptor   transaction-manager="txManager" />


在spring中加入jbpm的service API

①sessionFactory 配置,这样的话,我们的业务系统和jbpm可以共同使用一个sessionFactory

<bean id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property  name="configLocation" >
<value>classpath:jbpm.hibernate.cfg.xml</value>
</property>
</bean>

②jbpmHelper 配置,通过这个类,我们可以获取 service API

<bean id="jbpmSpringHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" >
<property name="jbpmCfg">
<value>jbpm.cfg.xml</value>
</property>
<!-- 如果名称就是jbpm.cfg.xml,那么可以不设置。springHelper.jbpmCfg属性的默认值就是 jbpm.cfg.xml-->
</bean>


<bean id="processEngine" factory-bean="jbpmSpringHelper" factory-method="createProcessEngine"></bean>
<bean id="executionService"  factory-bean="processEngine" factory-method="getExecutionService" ></bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: