Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Camel连接到JBoss EAP6上的队列_Java_Jboss_Apache Camel_Jms_Jboss6.x - Fatal编程技术网

Java 从Camel连接到JBoss EAP6上的队列

Java 从Camel连接到JBoss EAP6上的队列,java,jboss,apache-camel,jms,jboss6.x,Java,Jboss,Apache Camel,Jms,Jboss6.x,我在JBoss EAP6上的standalone.xml文件中设置了一个HornetQ JMS队列 <hornetq-server> [...] <jms-connection-factories> <connection-factory name="RemoteConnectionFactory"> <connectors> <connect

我在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-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中定义了名为“jmsinjection”的bean时出错[bundle://79.37:0/META-INF/spring/camel context.xml]: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,如所示:


您可以直接在JBoss EAP实例存储库中找到所有版本正确的依赖项。名字可能有点不同。

你试过显式转换吗?@FranciscoMelojunior你能解释一下吗?
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