2

我有一个连接工厂的spring-bean到hornetQ:

   <bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory" >
            <constructor-arg value="false" />
            <constructor-arg ref="transportConfiguration" />
        </bean>

并且,这个 bean 正在使用它:

<bean name="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory"></property>
</bean>

当 'jmsTemplate' bean 启动时,所有异常都会失败:

无法将类型“org.hornetq.jms.client.HornetQConnectionFactory”的属性值转换为所需类型“javax.jms.ConnectionFactory”

即jmsTemplate 要求connectionFactory 是javax.jms.ConnectionFactory,但它不是。

问题,如何以及在何处下载“HornetQConnectionFactory”的正确实现以满足要求。

我在我的 pom.xml 中使用了这个 deps:

   <hornetq.version>2.2.13.Final</hornetq.version>
   ...
   <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-core</artifactId>
        <version>${hornetq.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-jms</artifactId>
        <version>${hornetq.version}</version>
    </dependency>
    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-spring-integration</artifactId>
        <version>${hornetq.version}</version>
    </dependency>
4

2 回答 2

4

最好的方法是使用 HornetQJMSClient.createConnectionFactory 方法

您直接使用该实现,并且会发生变化。

HornetQJMSClient 是 API 的一部分,因此可以更好地在版本之间保持合同。

您应该将您的示例转换为使用 HornetQJMSClient ...

关于您找到的博客,也许您应该指出这个问题/答案,因为该博客使用的是内部实现而不是公共 API。

于 2012-10-11T16:05:11.037 回答
2

我想我找到了解决方案:

只使用HornetQJMSConnectionFactory(里面有JMS字)。似乎 HornetQConnectionFactory 的旧实现是 javax.jms.ConnectionFactory,但现在不是。

于 2012-10-10T18:57:34.273 回答