2

我将 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 除外)“演示”从这里安装:

http://sourceforge.net/projects/jbpm/files/jBPM%206/jbpm-6.0.0.Final

谢谢!

4

2 回答 2

5

您的资源文件夹中有 kmodule.xml 吗?如果不是,那可能就是问题所在。您可以拥有一个非常简单的 xml 文件,例如:

<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://jboss.org/kie/6.0.0/kmodule">
</kmodule>
于 2016-09-05T08:35:30.613 回答
0

将您的 kieSession 作为构造函数参数传递给您的 workItemHandler。然后您的 kieSession 可用于您的 workItemHandler。

您可以在需要时使用适当的 kieSession 注册您的 workItemHandler,而不必只注册一次。

或者你在开始时通过 rulesManager 并按需生成一个 kieSession

于 2020-01-01T23:54:06.593 回答