Доступ к KieSession из jbpm6 WorkItemHandler
Я использую консоль jbpm (6.0.0.Final) с пользовательскими обработчиками рабочих элементов. Я встроил JAR-обработчик пользовательских рабочих элементов в мою WAR-консоль jbpm, как описано в посте № 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" install отсюда:
http://sourceforge.net/projects/jbpm/files/jBPM%206/jbpm-6.0.0.Final
Спасибо!
1 ответ
Есть ли у вас kmodule.xml в вашей папке ресурсов? Если нет, может быть, в этом проблема. Вы можете иметь довольно простой XML-файл, например:
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/kie/6.0.0/kmodule">
</kmodule>
Передайте свой kieSession в свой workItemHandler в качестве параметра конструктора. Тогда ваш kieSession доступен вашему workItemHandler.
Вы можете зарегистрировать свой workItemHandler, когда он вам нужен, с помощью соответствующего kieSession, вам не нужно делать это только один раз.
Или вы передаете rulesManager в начале и генерируете kieSession по запросу