一,装载流程:
第一种:
第二种:
二,创建一个流程实例:
第一种方法:ProcessInstance processInstance = new ProcessInstance(processDefinition);
第二种方法:processInstance = jbpmContext.newProcessInstanceForUpdate("websale");
三,取得流程实例,流程实例数据环境
三,创建一个事务实例:TaskInstance taskInstance=processInstance.getTaskMgmtInstance().createStartTaskInstance();
四,创建一个流程实例数据环境:
ContextInstance contextInstance = processInstance.getContextInstance();
流程环境变量可以存取变量:contextInstance.getVariable("item");
五,创建令牌:
Token token = processInstance.getRootToken();//等于processDefinition.getStartState();
六, 现在开始流程执行,离开start-state 结束默认的转换(transition)
token.signal();
七,保存事务
八,jbpm数据库表创建和删除:
第一种:
第二种:
九,jbpm session创建
JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
十,任务分派
在jBPM, 推 和 拉l 模式 (看下面) 的任务分派可以组合使用. 流程能计算任务的责任并把它"推"到他/她的任务清单里(tasklist).或者另外的方法, 把任务分配给参与者池, 这种情况下池中的每一个参与者可以"拉"任务并且把它们放到参与者个人的任务清单中(tasklist).
1,分配接口:通过接口AssignmentHandler来分配任务实例:
public interface AssignmentHandler extends Serializable {
void assign( Assignable assignable, ExecutionContext executionContext );
}
一个分配handler实现在任务实例建立的时候被调用. 在这个时候,任务实例可以分配给一个或多个参与者.
2,AssignmentHandler 实现可以调用 Assignable 方法(setActorId或 setPooledActors )来分配任务.
可分配的要么是一个 TaskInstance 或者 SwimlaneInstance (= 流程角色).
3, 分配一个TaskInstance给用户, 调用 Assignable.setActorId(String actorId) .
分配一个TaskInstance给候选参与者池, 调用 Assignable.setPooledActors(String[] actorIds).
4,流程中的每个任务都可以用在运行时间执行分配handler的实现关联起来.
5,推模式:任务实例的actorId 表明对指定任务责任的. TaskInstance 缓存的参与者是任务参与者的候选人.
典型的,TaskInstance 的actorId将引用一个用户. 缓存的参与者可以引用用户和组.
6,拉模型:
获取集中的任务典型两个步骤操作:
1)从身份组件得到给定用户所有的组
2)根据用户的actorId和从用户组得到的actorId来得到所有共有的任务
得到给定用户的所有共有的任务的清单通过方法 TaskMgmtSession.findPooledTaskInstances(String actorId) 或 TaskMgmtSession.findPooledTaskInstances(List actorIds) .
为了防止多个用户在同一个共有的任务上工作, 更新TaskInstance 为用户的actorId就可以了.
做了这个, 任务实例将不会显示在共有的任务清单里,但只在用户的个人任务清单里.
设置TaskInstance 的actorId 为null,将会把任务实例放回共有的任务里.
7,个人任务清单是所有所有指定actorId作为用户的 TaskInstances.这个清单的获得是用过 TaskMgmtSession.findTaskInstances(String actorId).
8,泳道:泳道(swimlane)是流程角色
所有分派是在给定swimlane任务实例上完成.
9,任务事件:任务有动作关联. 有4个标准任务事件类型定义: task-create, task-assign, task-start 和 task-end.
task-create 在任务实例建立的时候被产生.
task-assign 当任务实例被分配的时候产生.你可以访问前一个参与者通过 executionContext.getTaskInstance().getPreviousActorId()
task-start 是当 TaskInstance.start()被调用时产生 .
task-end 当 TaskInstance.end(...)被调用时产生 .
10,任务定时器:任务定时器指明的事情是 cancel-event 可以定制的.默认的, 任务上的定时器在任务结束时,将被放弃 (= 完成).
cancel-event 类型能被用逗号分隔的多个事件列表.
11,任务控制器:任务是用来收集用户输入的.任务控制器为用户接口应用程序提供流程变量的视图.
任务控制器有2个责任:第一个, 从流程变量里提取信息. 从流程变量里提取的信息表示作为一个指定的参数的集合.参数用做来自用户接口表单的输入. 第二个责任是保存用户提交的参数到流程变量里.
输入流程变量的二种方式:1)任务控制器在task元素中指定.
例
name 属性引用流程变量的. access 属性指明变量是否readable, writable and 或 required. 这个信息可以用于用户接口来产生正确的表单控制. access 属性是任意的并且默认 access 是 read,write .mapped-name 是任意的并且表示用户接口的标签用于表示一个参数.
2)你可以写你自己的 TaskControllerHandler 实现.
例:
12,身份组件:用户管理,组和权限管理一般都称做身份管理.