我正在使用jbpm-console(6.0.0.Final)和自定义工作项处理程序。我在我的jbpm-console WAR中嵌入了一个自定义工作项处理程序JAR,如第7篇文章中所述:
https://community.jboss.org/thread/221748
到目前为止,这一切都很好,因为我可以在jbpm-console中成功启动流程定义,并启动我的自定义WorkItemHandler代码。
但是,在我的WorkItemHandler中,我想在ProcessInstance上设置一些变量。当我尝试这样的事情时:
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
// BLOWS UP HERE
//
KieSession session = kContainer.newKieSession();
WorkflowProcessInstance processInstance =
session.getProcessInstance(workItem.getProcessInstanceId());
// SET VARIABLE
processInstance.setVariable("foo", "bar");
}
“无法找到默认的KieSession”:
11:21:03,177 ERROR Exception: java.lang.RuntimeException: Cannot find a default KieSession
at org.drools.compiler.kie.builder.impl.KieContainerImpl.findKieSessionModel(KieContainerImpl.java:302) [drools-compiler-6.0.0.Final.jar:6.0.0.Final]
at org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:295) [drools-compiler-6.0.0.Final.jar:6.0.0.Final]
at org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:278) [drools-compiler-6.0.0.Final.jar:6.0.0.Final]
我在这里缺少什么?我是否需要另外设置一些东西?我只是使用开箱即用(除了自定义工作项处理程序嵌入式jar)“demo”安装从这里:
http://sourceforge.net/projects/jbpm/files/jBPM%206/jbpm-6.0.0.Final
谢谢!
答案 0 :(得分:5)
资源文件夹中是否有kmodule.xml?如果不是,也许这就是问题所在。你可以有一个非常简单的xml文件,如:
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/kie/6.0.0/kmodule">
</kmodule>
答案 1 :(得分:0)
将kieSession作为构造函数参数传递到workItemHandler中。 然后,您的kieSession可用于workItemHandler。
您可以在需要时通过适当的kieSession注册workItemHandler,而不必只执行一次。
或者您在开始时通过rulesManager并根据需要生成一个kieSession