JBoss 系列七十二:jBPM 6 新功能/特性介紹(API 層面)

概述

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;



發佈了113 篇原創文章 · 獲贊 3 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章