【问题标题】:Camunda: cannot be cast to (same class)Camunda:不能转换为(同一类)
【发布时间】:2018-01-31 04:15:32
【问题描述】:

我在我的 maven 项目中包含了一个 .jarpom.xml

<dependencies>
    <dependency>
        <groupId>org.loopingdoge.acme.model</groupId>
        <artifactId>acme-model</artifactId>
        <version>1.0.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/acme-model.jar</systemPath>
    </dependency>
</dependencies>

acme-model.jar 包含 org.loopingdoge.acme.model.House 但这个演员表

public class HouseAdder implements JavaDelegate {

    public void execute(DelegateExecution delegateExecution) throws Exception {
        House house = (House) delegateExecution.getVariable("house");
    }
}

在 Wildfly 服务器上部署时出现此错误:

18:50:20,255 错误 [org.camunda.bpm.engine.context](默认任务 45)ENGINE-16004 关闭命令上下文时出现异常: org.loopingdoge.acme.model.House 不能转换为 org.loopingdoge.acme.model.House:java.lang.ClassCastException:org.loopingdoge.acme.model.House 不能转换为 org.loopingdoge.acme.model。屋 在 org.loopingdoge.acme.services.HouseAdder.execute(HouseAdder.java:13)

【问题讨论】:

  • 有同样的问题。了解如何将实例添加到流程执行中可能会有所帮助。

标签: java maven camunda


【解决方案1】:

当一个类被不同的类加载器加载时,就会发生这种情况。即使包和类名相同,java也会使它们不同。

您需要了解加载此类的方式。第一步,找到包含该类的 jars。

or/and read this on SO

【讨论】:

    【解决方案2】:

    遇到了同样的问题。进一步的分析表明,使用了两个不同的类加载器,如该线程中所述。在我的例子中,罪魁祸首是 spring boot 的 devtools,这个工具可能很多人都会在他们的 pom.xml 中使用。似乎 devtools 不能很好地与(在我的情况下)带有嵌入式 camunda 引擎的 camunda java 委托配合使用。

    【讨论】:

    • 这解决了我在使用带有 DevTools 的 Camunda Embedded 时遇到的问题。禁用 devtools 并重新启动应用程序。
    【解决方案3】:

    我猜你在多个地方都有这门课,例如将 jar 打包在 WildFly 和您部署的 WAR 中。检查你的类在类路径上只有一次。

    顺便说一句:如果不是绝对必要,最好不要使用系统依赖项。这就是 maven 存储库的用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2012-05-22
      • 2013-03-28
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 2021-06-21
      相关资源
      最近更新 更多