【问题标题】:Loading global event listener JBPM加载全局事件监听器 JBPM
【发布时间】:2018-10-19 22:30:46
【问题描述】:

我有 jbpm 系统 (wildfly+kie-server+workbench),我想在系统中使用一个全局 ProcessEventListener。我创建了简单的流程事件 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());
    }

我的 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>

已创建 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-server 上时,我得到了:

原因: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。而且我在 maven 依赖项中有 jbpm-flow 与“提供”范围。
在我的所有 jbpm 进程中使用一个侦听器是否正确?

【问题讨论】:

  • 尝试在workbench或kie-server的WEB-INF/lib目录下添加ProcessEventListener jar文件。
  • @Abhijit 没有这样的 ProcessEventListener.jar,因为它是 kie-api-6.5.0.Final.jar 的一部分,但是当我尝试将它放入 kie-server.war/WEB -INF/lib 我得到:无法启动服务 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: DMN
  • @Abhijit 而且kie-server和workbench已经在WEB-INF/lib中有kie-api-7.10.0.Final.jar
  • 抱歉造成混乱,我要求您在 WEB-INF/lib 中添加 simple-process-event-listener-1.0.jar 并且不要添加对“com.listener”模块的依赖
  • @Abhijit 是的,它有效! Thx,你可以把它写成答案,我会接受它

标签: java wildfly jbpm kie


【解决方案1】:

在 WEB-INF/lib 中添加 simple-process-event-listener-1.0.jar 并且不要添加对 'com.listener' 模块的战争文件依赖

【讨论】:

    【解决方案2】:

    在 wildfly-\modules\system\layers\base 路径下添加 process-event-listener.jar 文件,以便反映

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 2021-10-17
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      相关资源
      最近更新 更多