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>
我有一个包含以下 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>