[英]JBoss EAP6 + HornetQ - Unsure how to create a queue connection to HornetQ
[英]Connect to a queue on JBoss EAP6 from Camel
我在 Standalone.xml 文件中的 JBoss EAP6 上设置了 HornetQ JMS 队列。
<hornetq-server>
[...]
<jms-connection-factories>
<connection-factory name="RemoteConnectionFactory">
<connectors>
<connector-ref connector-name="netty"/>
</connectors>
<entries>
<entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
</entries>
</connection-factory>
</jms-connection-factories>
<jms-destinations>
<jms-queue name="WorkflowExecution">
<entry name="/queue/MyQueue"/>
<entry name="java:jboss/exported/queue/MyQueue"/>
</jms-queue>
</jms-destinations>
</hornetq-server>
队列工作正常,我可以使用 Hermes JMS 等工具在其上发送消息。
我正在开发一个在 Fuse 4.4 中运行的独立客户端应用程序,它必须通过 Camel 路由向队列发送消息,但我不知道如何在配置中设置连接器。
这是我尝试在 camel-context.xml 文件中设置的内容:
<bean id="jmsinjection" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory">
<bean class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/RemoteConnectionFactory" />
<property name="jndiEnvironment">
<props>
<prop key="java.naming.provider.url">remote://myEAPurl:port</prop>
<prop key="java.naming.factory.initial">org.jboss.naming.remote.client.InitialContextFactory</prop>
</props>
</property>
</bean>
</property>
</bean>
我得到的例外是:
在 URL [bundle://79.37:0/META-INF/spring/camel-context.xml] 中定义名称为“jmsinjection”的 bean 创建错误:bean 初始化失败; 嵌套异常是 org.springframework.beans.ConversionNotSupportedException:无法将类型“org.hornetq.jms.client.HornetQJMSConnectionFactory”的属性值转换为属性“connectionFactory”所需的类型“javax.jms.ConnectionFactory”; 嵌套异常是 java.lang.IllegalStateException:无法将类型 [org.hornetq.jms.client.HornetQJMSConnectionFactory] 的值转换为属性“connectionFactory”所需的类型 [javax.jms.ConnectionFactory]:找不到匹配的编辑器或转换策略
根据javadoc, HornetQJMSConnectionFactory
实现了javax.jms.QueueConnectionFactory
,它扩展了javax.jms.ConnectionFactory
,所以我不明白为什么会出现这个异常。
我花了几个小时刮擦 JBoss 论坛和文档,但找不到让它工作的方法。
我的骆驼配置有什么问题? 如何解决?
问题是由于 OSGi 类加载器造成的。
Fuse ESB 已经在类路径中加载了一个javax.jms.ConnectionFactory
版本。
添加jboss-client.jar
确实将HornetQJMSConnectionFactory
添加到类路径,但也添加了另一个版本的ConnectionFactory
。
解决方案是将以下所有依赖项添加到包中并删除jboss-client.jar
,如本页所示:
hornetq-core
hornetq-jms
jboss-ejb-client
jboss-logging
jboss-logmanager
jboss-marshalling
jboss-marshalling-river
jboss-remote-naming
jboss-remoting
jboss-sasl
netty
remoting-jmx
xnio-api
xnio-nio
您可以直接在 JBoss EAP 实例存储库中找到所有具有正确版本的依赖项。 名字可能有点不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.