0
votes

I have jbpm system (wildfly+kie-server+workbench) and I want to use one global ProcessEventListener within the system. I've created simple process event lestener:

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());
    }

My 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>

When I add it as deployment dependency and declare it as event listener in my jbpm project via workbench everything works fine.

But now I have a lot of projects and It's uncomfortable to attach the event listener to every project. So I've created new module in 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>

Created deployment-descriptor.xml server level:

<?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>

So when I create a new jbpm process and deploy it on kie-server via workbench I've got:

Caused by: java.lang.NoClassDefFoundError: Failed to link org/example/SimpleProcessEventListener (Module "com.listener" from local module loader @3c19aaa5 (finder: local module finder @3349e9bb (roots: /opt/jboss/wildfly/modules,/opt/jboss/wildfly/modules/system/layers/base))): org/kie/api/event/process/ProcessEventListener

So It's obviously It is tried to use my listener but can't find org.kie.api.event.process.ProcessEventListener which is implemented by my listener.
So what should I do? Why is it not loaded? It belongs to kie-internal-api. And I have jbpm-flow in maven dependency with 'provided' scope.
Is it the right way to use one listener in all my jbpm processes?

2
Try adding ProcessEventListener jar file in WEB-INF/lib directory of workbench or kie-server.Abhijit Humbe
@Abhijit There is no such ProcessEventListener.jar, because it's a part of kie-api-6.5.0.Final.jar, but when I try to put it into kie-server.war/WEB-INF/lib I got: Failed to start service jboss.undertow.deployment.default-server.default-host./kie-server: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./kie-server: java.lang.NoSuchFieldError: DMNRoman Danilov
@Abhijit Moreover kie-server and workbench have already had kie-api-7.10.0.Final.jar in WEB-INF/libRoman Danilov
sorry for creating confusion, I was asking you to add simple-process-event-listener-1.0.jar in WEB-INF/lib and dont add dependency on 'com.listener' moduleAbhijit Humbe
@Abhijit yeah, It works! Thx, you can write it as answer and I will accept itRoman Danilov

2 Answers

1
votes

add simple-process-event-listener-1.0.jar in WEB-INF/lib and dont add war file dependency on 'com.listener' module

0
votes

add process-event-listener.jar file under the path wildfly-\modules\system\layers\base ,in order to reflect