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

本文解析了jBPM6.0的主要更新,包括KieSession和TaskService两个核心接口,运行状态管理及服务注入机制。通过示例展示了如何使用KieSession执行规则和流程文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

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;



转载于:https://my.oschina.net/iwuyang/blog/197155

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值