У меня есть система jbpm (wildfly
+ kie-server
+ workbench
), и я хочу использовать один глобальный ProcessEventListener
в системе.Я создал простой обработчик событий процесса:
public class SimpleProcessEventListener implements ProcessEventListener {
public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
System.out.println("Before Node triggered: " + event.getNodeInstance().getNodeName());
}
...
public void afterVariableChanged(ProcessVariableChangedEvent event) {
System.out.println("After Variable changed: " + event.getVariableId());
}
Мой pom.xml:
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>simple-process-event-listener</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-flow</artifactId>
<version>6.5.0.Final</version>
<scope>provided</scope>
</dependency>
</dependencies>
Когда я добавляю его как зависимость развертывания и объявляю его в качестве прослушивателя событий в моем проекте jbpm черезна рабочем месте все работает отлично.
Но сейчас у меня много проектов, и неудобно прикреплять прослушиватель событий к каждому проекту.Итак, я создал новый модуль в wildfly:
<module xmlns="urn:jboss:module:1.1" name="com.listener">
<resources>
<resource-root path="simple-process-event-listener-1.0.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="org.slf4j"/>
</dependencies>
</module>
Создан уровень сервера deploy-descriptor.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<deployment-descriptor xsi:schemaLocation="http://www.jboss.org/jbpm/deployment-descriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit>org.jbpm.domain</persistence-unit>
<audit-persistence-unit>org.jbpm.domain</audit-persistence-unit>
<audit-mode>JPA</audit-mode>
<persistence-mode>JPA</persistence-mode>
<runtime-strategy>SINGLETON</runtime-strategy>
<marshalling-strategies/>
<event-listeners>
<event-listener>
<resolver>reflection</resolver>
<identifier>org.example.SimpleProcessEventListener</identifier>
<parameters/>
</event-listener>
</event-listeners>
<task-event-listeners/>
<globals/>
<work-item-handlers/>
<environment-entries/>
<configurations/>
<required-roles/>
<remoteable-classes/>
<limit-serialization-classes>true</limit-serialization-classes>
</deployment-descriptor>
Поэтому, когда я создаю новый процесс jbpm и внедряю его в kie-сервер через верстак У меня есть:
Причина: java.lang.NoClassDefFoundError: Не удалось связать org / example / SimpleProcessEventListener (модуль "com.listener" из локального загрузчика модулей @ 3c19aaa5 (finder: локальный модуль поиска @ 3349e9bb (корни: / opt / jboss / wildfly / modules, / opt / jboss / wildfly / modules / system / layer / base))): org / kie / api / event / process / ProcessEventListener
Так что, очевидно, он пытается использовать мой слушатель, но не может найти org.kie.api.event.process.ProcessEventListener
, который реализован моим слушателем.
Так что мне делать?Почему он не загружен?Он принадлежит к kie-internal-api.И у меня есть jbpm-поток в зависимости maven с «предоставленной» областью действия.
Это правильный способ использовать один слушатель во всех моих процессах jbpm?