Camel 和 Quartz2 以及一些机器的奇怪问题

Strange trouble with Camel and Quartz2 and some machines

我有一个包含以下 Camel 路线的 WAR 文件:

qtz.expression read from property file and set value as: 0/30+*+*+*+*+?

    from("quartz2://schedulerVigenciaClienteEnvase?cron={{qtz.expression}}")
            .handleFault()
            .log("Testing job")
            .process("testProcessor");

它使用 Camel 2.20 和 Camel Quartz2。下面是POM文件里面的依赖。

<dependencies>
    <!-- ${camel.version} contains 2.20.2 value -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
       <version>${camel.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
      <version>${camel.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-servlet</artifactId>
      <version>${camel.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-quartz2</artifactId>    
      <version>${camel.version}</version>   
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jms</artifactId>
        <version>${camel.version}</version>
    </dependency>  
</dependencies>

问题是在某些使用相同 Java 版本的机器上,每个 Quartz 触发时刻都会产生以下异常。

2018-03-22 18:54:00,005 JobRunShell ERROR Job Camel_camel-1.schedulerVigenciaClienteEnvase threw an unhandled Exception: 
**java.lang.NoSuchMethodError: org.apache.camel.impl.DefaultMessage.<init>(Lorg/apache/camel/CamelContext;)V**
    at org.apache.camel.component.quartz2.QuartzMessage.<init>(QuartzMessage.java:33) ~[camel-quartz2-2.20.2.jar:2.20.2]
    at org.apache.camel.component.quartz2.CamelJob.execute(CamelJob.java:57) ~[camel-quartz2-2.20.2.jar:2.20.2]
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [quartz-2.3.0.jar:?]
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.3.0.jar:?]
2018-03-22 18:54:00,006 ErrorLogger                    ERROR Job (Camel_camel-1.schedulerVigenciaClienteEnvase threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-2.3.0.jar:?]
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) **[quartz-2.3.0.jar:?]**
**Caused by: java.lang.NoSuchMethodError: org.apache.camel.impl.DefaultMessage.<init>(Lorg/apache/camel/CamelContext;)V
    at org.apache.camel.component.quartz2.QuartzMessage.<init>**(QuartzMessage.java:33) ~[camel-quartz2-2.20.2.jar:2.20.2]
    at org.apache.camel.component.quartz2.CamelJob.execute(CamelJob.java:57) ~[camel-quartz2-2.20.2.jar:2.20.2]
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.3.0.jar:?]

java.lang.NoSuchMethodError: org.apache.camel.impl.DefaultMessage.(Lorg/apache/camel/CamelContext;)V

为什么使用相同的 JVM 版本和 OS。

如有任何建议,我们将不胜感激。

找到问题和解决方案,在项目中我们使用的是ActiveMQ,所以,有一个叫做activemq-all的依赖,里面包含了一个内部的Camel实现碰撞在类加载时(有时,不总是)。最终解决方案是用以下列表替换此依赖项:

<!-- Apache Active MQ Jars -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-broker</artifactId>
        <version>${activemq.version}</version>     
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>${activemq.version}</version>     
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-pool</artifactId>
        <version>${activemq.version}</version>      
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-camel</artifactId>
        <version>${activemq.version}</version>      
    </dependency>