概述
jBPM 6.0 最终版已与上月底发布,与jBPM 5相比有很大变化,本文从API编程的角度去简单说说jBPM 6,本文涉及到内容包括:
- 2个重要的接口
- 运行状态管理
- jBPM 服务注入 (CDI)
2个重要的接口
jBPM 6最主要的两个接口指的是KieSession (ProcessRuntime)和TaskService。
KieSession 是最常用与引擎交互的接口,一个KieSession允许应用与引擎建立一个iterative conversation,where the state of the session is kept across invocations. The reasoning process may be triggered multiple times for the same set of data. 当应用程序完成使用session,dispose()方法必须被调运,这样是为了free the resources and used memory。
使用KieSession执行企业规则文件的例子:
KieServices kieServices = KieServices.Factory.get();
KieContainer kContainer = kieServices.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession();
for( Object fact : facts ) {
kSession.insert( fact );
}
kSession.fireAllRules();
kSession.dispose();
使用KieSession执行企业流程文件的例子:
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("sample.bpmn"), ResourceType.BPMN2);
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
KieSession kSession = kbase.newStatefulKnowledgeSession();
kSession.startProcess("com.sample.processid");
kSession.signalEvent("SomeEvent", null);
kSession.startProcess("com.sample.processid");
kSession.dispose();
ProcessRuntime 是最高层的抽象接口,用来启动流程,创建一个流程(不启动),激活信号,取消一个流程,获取所有流程实例已经获取session相关的WorkItemManager。
TaskService可以看作是对外提供的一个统一接入点,用来获取所有TaskService服务。(The Task Service Entry Point serves as facade of all the other services, providing a single entry point to access to all the services)
运行状态管理
jBPM 6运行状态管理(Runtime Manager)使用本地 KieSession, 本地 TaskService,与jBPM 5相比,隐藏了复杂的设定过程。
Runtime Manager管理三种类型的session:
- Singleton session
- Session per request
- Session per process instance
如下为一个session管理过程示例:
RuntimeManager manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment);
RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(id));
KieSession ksession = runtime.getKieSession();
// do something here, e.g.
ksession.startProcess(“org.jbpm.hello”);
manager.disposeRuntimeEngine(engine);
manager.close();
jBPM 服务注入 (CDI)
jBPM 6默认安装到JEE6兼容的JBoss 7容器,CDI是JEE6的基本组件,jBPM 6也提供了 将jBPM相关的服务可以注入到CDI环境。
如下注册RuntimeManager示例:
@Inject
@Singleton
RuntimeManager singletonManager;
如下为注册TaskService示例:
@Inject
TaskService taskService;
来源:oschina
链接:https://my.oschina.net/u/163910/blog/197155