当前位置: 首页 > 知识库问答 >
问题:

为什么Camunda试图在错误的进程引擎中执行任务侦听器?

柯奕
2023-03-14

我有三个使用共享数据库的Camunda引擎:

  • 核心-工作流
  • 核心-进程
  • 域-你好-世界

在core-workflow中有starter_wrapper_process.bpmn。该流程启动核心流程中定义的WrapperProcess.bpmn。最后,wrapperprocess.bpmndomain-hello-world引擎启动domainprocess.bpmn。

    null

这段代码必须位于core-processs中,domain-hello-world开发人员必须能够创建和运行他们的流程,而不必考虑这段代码。

因此,活动Start domain process有两个任务侦听器(tab侦听器),它们应该在域进程开始之前和结束之后执行DomainProcessStartFinishTaskListener。

由于这个侦听器是从core-processes引用并在core-processes中定义的,我假设它将在core-processes中运行(前提是所有引擎都在部署感知模式下运行)。

但事实并非如此。

假设我启动了所有三个引擎,并通过任务列表启动starter process。在控制台输出中,我看到DomainProcessStartFinishTaskListener.notify,这意味着启动监听器已经成功执行。

接下来,我转到任务列表并完成人工任务。

ENGINE-09008 Exception while instantiating class 'org.example.DomainProcessStartFinishTaskListener': ENGINE-09017 Cannot load class 'org.example.DomainProcessStartFinishTaskListener': org.example.DomainProcessStartFinishTaskListener

在它的底部,您可以看到ClassNotFoundException:

Caused by: org.camunda.bpm.engine.ClassLoadingException: ENGINE-09017 Cannot load class 'org.example.DomainProcessStartFinishTaskListener': org.example.DomainProcessStartFinishTaskListener
    at org.camunda.bpm.engine.impl.util.EngineUtilLogger.classLoadingException(EngineUtilLogger.java:146)
    at org.camunda.bpm.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:111)
    at org.camunda.bpm.engine.impl.util.ClassDelegateUtil.instantiateDelegate(ClassDelegateUtil.java:46)
    ... 187 more
Caused by: java.lang.ClassNotFoundException: org.example.DomainProcessStartFinishTaskListener

这是可以理解的--org.example.domainProcessStartFinishTaskListener是在core-processs中定义的(而不是在domain-hello-world中)。

我不明白的是,为什么是domain-hello-world尝试执行任务侦听器,该任务侦听器在位于core-processs的BPMN文件中被引用。DomainProcess不包含任何任务侦听器,也不引用org.example.DomainProcessStartFinishTaskListener

为了使org.example.domainProcessStartFinishTaskListener始终在core-processs中执行(在域进程开始之前和结束之后),我需要如何修改代码?

更新1:如下所示,设置启动域进程Async-after活动没有帮助(提交。

更新2:我尝试在所有进程(提交)的所有活动中设置Async-beforeAsync-after。我仍然得到同样的错误。

更新3:作为一种变通方法,我将结束侦听器移到调用活动之后的事件中。

共有1个答案

羊舌子瑜
2023-03-14

如果执行是在错误的类加载器(这里是域进程)中发起和运行的,则会发生此错误。a)确保您的进程引擎配置为部署感知的。b)如果这还不够,请尝试将域进程的end事件上的async before更改为async after。c)解决办法是在调用活动上设置async after,并将调用活动上的end listen更改为后续序列流上的take listener。

 类似资料:
  • 我在我的一个工作流应用程序中使用了Camunda BPMN2.0。在我的一个服务任务中,我在start事件中创建了一个执行侦听器,在create事件中创建了一个任务侦听器。我不确定在开始时同时分配这些是否合适。如果是正确的,它们中的哪一个将首先执行--执行监听器或任务监听器,分别在start或create事件中执行?

  • 我有两个屏幕..首先是闪屏,在这里我借助firebase.auth()检查用户是否已经存在。onAuthStateChanged侦听器。如果用户为空,它将转到另一个firebase.auth()的登录屏幕。onAuthStateChanged侦听器用于在电话验证后获取用户,如果用户之前未注册,则将用户移至UserDetails屏幕以获取更多用户信息,或者移至主屏幕..同样的检查也在闪屏上进行,以确

  • 我有一个文件,看起来像这样 wsimport任务从wsdl文件生成所需的一些java文件。生成需要一些时间,所以我不希望每次构建jar或编译程序时都执行它。 wsclean任务旨在当wsdl发生更改时使用。 首先,我运行wsimport任务并确认文件生成正确,它们就是! 但是现在,当我运行gradle jar时,生成的文件被删除了。为什么? 当我注释掉wsclean任务时,jar任务成功地继续。为

  • 我实现了Spring云任务示例中给出的示例批处理作业示例。其中使用的 Spring 引导版本是 2.0.1.RELEASE。由于我必须移植另一个作业,因此我必须启动云任务,因此我想找到兼容的最旧版本。使用 1.3.2.RELEASE 创建的批处理作业的 jar 作为 Spring 引导版本成功运行。但是当我在将其添加为应用程序后从 Spring 云数据流的 UI 运行它时,出现以下错误:

  • 我有使用名为Server的类实例的TestNG测试。这个实例是在我的测试中使用SpringTest框架自动连接的。正如这里所建议的,我希望通过实现TestExecutionListener接口,在beforeTestClass()和afterTestClass)方法中外部化服务器的启动和停止。为此,我首先使用Java反射获取测试类中的Server字段,然后分别在beforeTestClass()和

  • 错误:任务执行失败 ': app:使用合并Java Res For Debug转换资源'。 com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException: APK META-INF/LICENSE File1中复制的重复文件: C:\用户Jithin-P