Доступ к KieSession из jbpm6 WorkItemHandler

Я использую jbpm-console (6.0.0.Final) с пользовательскими обработчиками рабочих элементов. Я встроил пользовательский JAR-файл обработчиков рабочих элементов в свою jbpm-console WAR, как описано в сообщении № 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

Спасибо!


person user3133269    schedule 31.12.2013    source источник


Ответы (2)


У вас есть kmodule.xml в папке ресурсов? Если нет, возможно, это проблема. У вас может быть довольно простой XML-файл, например:

<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://jboss.org/kie/6.0.0/kmodule">
</kmodule>
person Efstathios Oikonomou    schedule 05.09.2016

Передайте свой kieSession в свой workItemHandler в качестве параметра конструктора. Затем ваш kieSession доступен для вашего workItemHandler.

Вы можете зарегистрировать свой workItemHandler, когда вам это нужно, с соответствующим kieSession, вам не нужно делать это только один раз.

Или вы передаете rulesManager в начале и генерируете kieSession по требованию.

person Adam Crow    schedule 01.01.2020