【问题标题】:Camel 2.25.4 runtime error when deployed to JBoss EAP 7部署到 JBoss EAP 7 时出现 Camel 2.25.4 运行时错误
【发布时间】:2022-06-14 23:59:30
【问题描述】:

早期部署在 JBoss EAP 6 + JDK 1.8 + Camel 2.18.4 上的 Java 8 项目迁移到 JBoss EAP 7.4 + JDK 11 + Camel 2.25.4 时会出现以下运行时错误:

java.lang.LinkageError: loader constraint violation: when resolving field "log" of type org.slf4j.Logger, the class loader 'deployment.XXX.war' @1b683b29 of the current class, org.apache.camel.component.sql.SqlProducer, and the class loader 'org.apache.activemq' @4724f2a0 for the field's defining type, org.apache.camel.impl.DefaultProducer, have different Class objects for type org.slf4j.Logger (org.apache.camel.component.sql.SqlProducer is in unnamed module of loader 'deployment.XXX.war' @1b683b29, parent loader 'app'; org.apache.camel.impl.DefaultProducer is in unnamed module of loader 'org.apache.activemq' @4724f2a0, parent loader 'app')

有一个自定义 ActiveMQ 模块与版本 5.16.4 的 ActiveMQ jar 一起部署。 Camel JMS 组件用于访问 ActiveMQ 服务器。详细日志条目:

2022-05-18 15:18:36,700 [EbAn6-1Cfh0bsHM] ERROR DefaultErrorHandler            - Failed delivery for (MessageId: ID-XXX-1652886967207-9-7 on ExchangeId: ID-XXX-1652886967207-9-6). Exhausted after delivery attempt: 1 caught: org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[ID-XXX-1652886967207-9-6]

 Message History
 ---------------------------------------------------------------------------------------------------------------------------------------
 RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
 [route146          ] [route146          ] [jms://BsidPollQueue                                                           ] [        37]
 [route146          ] [log585            ] [log                                                                           ] [         0]
 [route146          ] [setHeader421      ] [setHeader[body]                                                               ] [         0]
 [route146          ] [setHeader422      ] [setHeader[controllerId]                                                       ] [         9]
 [route146          ] [recipientList192  ] [recipientList[simple{Simple: sql:select c.NATIVE_CONTROLLER_ID, c.IP_ADDR, ct.] [         0]

 Stacktrace

 ---------------------------------------------------------------------------------------------------------------------------------------
 org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[ID-XXX-1652886967207-9-6]
      at org.apache.activemq//org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1842)
      at org.apache.activemq//org.apache.camel.impl.DefaultExchange.setException(DefaultExchange.java:389)
      at org.apache.activemq//org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:64)
      at org.apache.activemq//org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
      at org.apache.activemq//org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
      at org.apache.activemq//org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:715)
      at org.apache.activemq//org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:638)
      at org.apache.activemq//org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:248)
      at org.apache.activemq//org.apache.camel.processor.RecipientList.sendToRecipientList(RecipientList.java:173)
      at org.apache.activemq//org.apache.camel.processor.RecipientList.process(RecipientList.java:133)
      at org.apache.activemq//org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
      at org.apache.activemq//org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
      at org.apache.activemq//org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
      at org.apache.activemq//org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
      at org.apache.activemq//org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
      at org.apache.activemq//org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
      at org.apache.activemq//org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
      at org.apache.activemq//org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97)
      at org.apache.activemq//org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:113)
      at org.apache.activemq//org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:719)
      at org.apache.activemq//org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:679)
      at org.apache.activemq//org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:649)
      at org.apache.activemq//org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:317)
      at org.apache.activemq//org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:255)
      at org.apache.activemq//org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1167)
      at org.apache.activemq//org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1159)
      at org.apache.activemq//org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1056)
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      at java.base/java.lang.Thread.run(Thread.java:829)
 Caused by: java.lang.LinkageError: loader constraint violation: when resolving field "log" of type org.slf4j.Logger, the class loader 'deployment.XXX.war' @1b683b29 of the current class, org.apache.camel.component.sql.SqlProducer, and the class loader 'org.apache.activemq' @4724f2a0 for the field's defining type, org.apache.camel.impl.DefaultProducer, have different Class objects for type org.slf4j.Logger (org.apache.camel.component.sql.SqlProducer is in unnamed module of loader 'deployment.XXX.war' @1b683b29, parent loader 'app'; org.apache.camel.impl.DefaultProducer is in unnamed module of loader 'org.apache.activemq' @4724f2a0, parent loader 'app')
      at deployment.XXX.war//org.apache.camel.component.sql.SqlProducer.process(SqlProducer.java:115)
      at org.apache.activemq//org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
      ... 27 more

【问题讨论】:

  • 我的回答是否解决了您的问题?如果是这样,请将其标记为正确,以帮助将来遇到同样问题的其他用户。谢谢!

标签: spring apache-camel activemq jboss7.x java-11


【解决方案1】:

这看起来像是一个类加载问题,您在多个位置(例如,在 deployment.XXX.war 和另一个模块中)有一个包含 org.slf4j.Logger 的 jar,并且这些 jar 被同一个应用程序使用。您需要从其中一个位置删除该 jar,以便应用程序的类加载器仅加载一次 org.slf4j.Logger

一种解决方案是将jboss-deployment-structure.xml 修改(或添加)到您的部署中,并排除部署和任何子部署中的日志记录子系统,例如:

<?xml version="1.0"?>
<jboss-deployment-structure>
  <deployment>
    <exclude-subsystems>
      <subsystem name="logging"/>
    </exclude-subsystems>
  </deployment>
  <sub-deployment name="test.war">
    <exclude-subsystems>
      <subsystem name="logging"/>
    </exclude-subsystems>
  </sub-deployment>
</jboss-deployment-structure>

另一种解决方案是通过设置 &lt;add-logging-api-dependencies value="false"/&gt; 来修改 EAP 配置中的日志记录子系统,以便 EAP 不再将日志记录 API 添加到所有应用程序,例如:

        ...
        <subsystem xmlns="urn:jboss:domain:logging:8.0">
            <add-logging-api-dependencies value="false"/>
            ...

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多