在文档中,有例子可以创建自己的流程,用的是ProcessFactory
在devguild中的7.4的ExternalActivity中提到第一次
实际拿到jBPM4.4中,没有这个ProcessFactory。
网上找资料,在论坛上找到了处理方法(http://community.jboss.org/message/529684 )
现在用 ProcessDefinitionBuilder 代替了 ProceeFactory
ProcessDefinitionBuilder 的使用如下:
- 通过startProcess启动一个Process的定义,返回ProcessDefinitionBuilder对象
- 增加Activity:
调用ProcessDefinitionBuilder 的 startActivity 方法,增加 Activity 进入 ProcessDefinition;
Activity设置完成,使用 endActivity 方法告诉 ProcessDefinition,这个Activity定义结束了;
流程的转向用transition()函数增加; - 需要定义一个启动动作:
需要一个启动元素,在创建流程实例的时候,第一个先到达这个元素;
这个元素在启动流程(ProcessDefinitionImpl调用startProcessInstance的时候要寻找这个元素的)
定义的方法是在设置Activity的时候,调用ProcessDefinitionBuilder的initial方法来确定的;
- 增加Activity:
- 流程定义结束,调用endProcess告诉ProcessDefinitionBuilder,流程定义结束,返回ProcessDefinitionImpl
示例如下:
public static void main(String[] args) throws Throwable {
// 开始一个流程定义
ProcessDefinitionBuilder builder = ProcessDefinitionBuilder.startProcess("Hello World");
// 开始增加Activity:自己定义的Activity要实现ActivityBehaviour接口
// 第一个Activity定义为启动节点,这个由调用initial()来确定的
// Activity定义结束,调用endActivity();
// 流向由transition来定义:
// 可以transition(String to) 或者 transition(String to, String name) 2种方式
builder.startActivity(new StartActivity())
.initial()
.transition("hello display")
.endActivity();
builder.startActivity("hello display", new Display("Hello"))
.transition("world display")
.endActivity();
builder.startActivity("world display", new Display("World")).endActivity();
// 流程定义结束,调用 endProcess确认
ProcessDefinitionImpl processDefinition = builder.endProcess();
// 开始一个流程
ClientProcessInstance clientProcessInstance = processDefinition.startProcessInstance();
...
}