概述
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;