Загрузка глобального прослушивателя событий JBPM

У меня есть система 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());
    }

Мой пом.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 через workbench, все работает нормально.

Но сейчас у меня много проектов и привязывать обработчик событий к каждому проекту неудобно. Итак, я создал новый модуль в 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>

Создан уровень сервера deployment-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-сервере через workbench, я получаю:

Причина: java.lang.NoClassDefFoundError: не удалось связать org/example/SimpleProcessEventListener (модуль «com.listener» из локального загрузчика модулей @3c19aaa5 (искатель: локальный искатель модулей @3349e9bb (корни: /opt/jboss/wildfly/modules, /opt/jboss/wildfly/modules/system/layers/base))): org/kie/api/event/process/ProcessEventListener

Так что очевидно, что он пытается использовать мой слушатель, но не может найти org.kie.api.event.process.ProcessEventListener, который реализован моим слушателем.
Итак, что мне делать? Почему не загружается? Он принадлежит kie-internal-api. И у меня есть jbpm-flow в зависимости от maven с «предоставленной» областью действия.
Правильно ли использовать одного слушателя во всех моих процессах jbpm?


person Roman Danilov    schedule 19.10.2018    source источник
comment
Попробуйте добавить jar-файл ProcessEventListener в каталог WEB-INF/lib рабочей среды или kie-сервера.   -  person Abhijit Humbe    schedule 23.10.2018
comment
@Abhijit Такого ProcessEventListener.jar нет, потому что он является частью kie-api-6.5.0.Final.jar, но когда я пытаюсь поместить его в kie-server.war/WEB-INF/lib, я получаю: Failed для запуска службы jboss.undertow.deployment.default-server.default-host./kie-server: org.jboss.msc.service.StartException в службе jboss.undertow.deployment.default-server.default-host./kie- сервер: java.lang.NoSuchFieldError: DMN   -  person Roman Danilov    schedule 23.10.2018
comment
@Abhijit Более того, kie-server и workbench уже имеют kie-api-7.10.0.Final.jar в WEB-INF/lib   -  person Roman Danilov    schedule 23.10.2018
comment
извините за путаницу, я просил вас добавить simple-process-event-listener-1.0.jar в WEB-INF/lib и не добавлять зависимость от модуля com.listener   -  person Abhijit Humbe    schedule 25.10.2018
comment
@Abhijit да, это работает! Спасибо, вы можете написать это как ответ, и я приму его.   -  person Roman Danilov    schedule 26.10.2018


Ответы (2)


добавьте simple-process-event-listener-1.0.jar в WEB-INF/lib и не добавляйте зависимость военного файла от модуля com.listener

person Abhijit Humbe    schedule 27.10.2018

добавьте файл process-event-listener.jar по пути wildfly-\modules\system\layers\base , чтобы отразить

person Nagaraju Pendimi    schedule 24.11.2020