我目前正在开发一个Java DSL路由,它将从JMS队列中获取消息,对其进行处理,并使用JPA将其放入数据库中 . 真的很简单:
public void configure() {
from("{{ribMessage.source}}")
.split(xpath("/RibMessages/*"))
.streaming()
.process(new RibMessageToEntityProcessor())
.to("{{ribMessage.destination}}");
}
正如您所看到的,我正在尝试使用camel属性,我在类路径的属性文件中定义了这些属性:
ribMessage.source=activemq:queue:in.item_q
ribMessage.destination=jpa:com.axstores.aim.entities.XMLImport
属性文件在spring中定义如下:
<bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
<property name="location" value="classpath:ribmessage.properties"/>
</bean>
我已经更新了activemq配置以包含camel.xml,并且我已将我的路由包添加到ActiveMQ camel.xml中 . 在启动期间,ActiveMQ正在找到我的路由,但后来看起来它无法找到我的属性,而是查找URI {} . 这当然失败了,日志中的下一行说Camel正在关闭 .
2014-02-01 23:31:20,278 | DEBUG | Searching for implementations of org.apache.camel.RoutesBuilder in packages: [com.axstores.aim] | org.apache.camel.impl.DefaultPackageScanClassResolver | main
2014-02-01 23:31:20,374 | DEBUG | Found: [class com.axstores.aim.routes.RibMessageToAimRoute] | org.apache.camel.impl.DefaultPackageScanClassResolver | main
...
2014-02-01 23:46:52,410 | TRACE | Starting service | org.apache.camel.support.ServiceSupport | main
2014-02-01 23:46:52,414 | TRACE | Getting endpoint with uri: {{ribMessage.source}} | org.apache.camel.spring.SpringCamelContext | main
2014-02-01 23:46:52,416 | INFO | Apache Camel 2.12.1 (CamelContext: camel) is shutting down | org.apache.camel.spring.SpringCamelContext | main
我怀疑我在配置中遗漏了一些东西,因为在我看来,我的 spring 配置文件根本就没有读过 .
有线索吗?需要更多信息?
2 回答
您需要将camel-jpa组件JAR添加到ActiveMQ代理的类路径中 . 以及JPA可能需要的其他JAR,例如JPA实现和JDBC驱动程序等等 .
因此,在克劳斯和彼得的帮助下,以及一些反复试验的帮助下,我终于能够通过我的路线开始运行ActiveMQ .
我的配置中遗漏了一件大事,基本上搞砸了其他一切 . Active MQ能够通过配置找到我的路由,但它似乎仍然没有加载我的spring配置 . 我终于想通了我必须将以下import语句添加到我的ActiveMQ camel.xml中,以便从我的jar文件中加载spring配置 .
添加这个允许ActiveMQ来解析我的ribmessage.properties,正如彼得在上面的评论中所提到的,这最初根本没有完成 . 这也加载了我的JPA配置,它揭示了一堆丢失的 jar ,正如克劳斯在上面的评论中指出的那样 .
对于这个项目,我正在使用EclipseLink和Oracle 11g,所以除了camel-jpa之外,我还必须将以下jar添加到ActiveMQ类路径中:
希望有人可以从我的经验中受益 . 我真的只在一周前发现了Camel,它似乎是构建集成的一个很棒的框架:-)