gpt4 book ai didi

java - 从 Camel 连接到 JBoss EAP6 上的队列

转载 作者:行者123 更新时间:2023-12-02 09:30:40 24 4
gpt4 key购买 nike

我在 JBoss EAP6 上的standalone.xml 文件中设置了一个 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>

我得到的异常是:

Error creating bean with name 'jmsinjection' defined in URL [bundle://79.37:0/META-INF/spring/camel-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.hornetq.jms.client.HornetQJMSConnectionFactory' to required type 'javax.jms.ConnectionFactory' for property 'connectionFactory'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.hornetq.jms.client.HornetQJMSConnectionFactory] to required type [javax.jms.ConnectionFactory] for property 'connectionFactory': no matching editors or conversion strategy found

根据javadoc,HornetQJMSConnectionFactory实现了javax.jms.QueueConnectionFactory,它扩展了javax.jms.ConnectionFactory,所以我不明白为什么我会得到这个异常。

我花了几个小时抓取 JBoss 论坛和文档,但找不到让它发挥作用的方法。

我的 Camel 配置有什么问题?如何解决?

最佳答案

该问题是由 OSGi 类加载器引起的。

Fuse ESB 已在类路径中加载了 javax.jms.ConnectionFactory 版本。

添加jboss-client.jar确实将HornetQJMSConnectionFactory添加到类路径中,而且还添加了ConnectionFactory的另一个版本。

解决方案是将以下所有依赖项添加到 bundle 中,并删除 jboss-client.jar,如 this page 所示。 :

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 实例存储库中找到具有正确版本的所有依赖项。名称可能有点不同。

关于java - 从 Camel 连接到 JBoss EAP6 上的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58013906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com