簡體   English   中英

部署到 JBoss EAP 7 時出現 Camel 2.25.4 運行時錯誤

[英]Camel 2.25.4 runtime error when deployed to JBoss EAP 7

以下運行時錯誤發生在之前部署在 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')

有一個使用 5.16.4 版本的 ActiveMQ jar 部署的自定義 ActiveMQ 模塊。 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

這看起來像是一個類加載問題,您在多個地方(例如在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>

另一種解決方案是通過設置<add-logging-api-dependencies value="false"/>來修改 EAP 配置中的日志記錄子系統,以便 EAP 不再將日志記錄 API 添加到所有應用程序,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM