【问题标题】:Spring Bean for setting up a connectionFactory to a JBoss HornetQ用于设置连接工厂到 JBoss HornetQ 的 Spring Bean
【发布时间】:2014-11-16 08:20:35
【问题描述】:

我正在使用一个当前输出到 ActiveMQ 的应用程序,并重新指向它以使用为我设置的 JBoss HornetQ。该应用程序是一个独立的应用程序(不在 EJB 容器中运行),并使用 Spring 2(尽管我已更新到 Spring 3 以访问“名称”属性)。

我参考了一些例子,结果如下:

<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory">
    <constructor-arg name="ha" value="false"/>
    <constructor-arg name="initialConnectors">
        <bean name="transportConfiguration" class="org.hornetq.api.core.TransportConfiguration">
            <constructor-arg name="className" value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" />
            <constructor-arg name="params">
                <map key-type="java.lang.String" value-type="java.lang.Object">
                    <entry key="host" value="127.0.0.1" />
                    <entry key="port" value="5445" />
                </map>
            </constructor-arg>
        </bean>
    </constructor-arg>
</bean>

使用它会产生异常

  "org.springframework.beans.factory.BeanCreationException: Error creating bean with name connectionFactory' defined in class path resource [applicationContext.xml]: Instantiation of bean     failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not     instantiate bean class [org.hornetq.jms.client.HornetQJMSConnectionFactory]: Constructor threw exception; nested exception is java.lang.NoSuchFieldError:

我将构造函数“public HornetQJMSConnectionFactory(boolean ha, org.hornetq.api.core.TransportConfiguration... initialConnectors)”(取自我正在使用的 jboss-client.jar 文件中的类文件)匹配为据我所知。

我似乎也在匹配 TransportConfiguration 的构造函数,即“public TransportConfiguration(java.lang.String className, java.util.Map params)”

那么,谁能指出我在这里做错了什么?我觉得这会很愚蠢:)

我已尝试将类型附加到以下所有内容,但仍然得到相同的结果:

<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory">
    <constructor-arg name="ha" value="false" type="boolean"/>
    <constructor-arg name="initialConnectors" type="org.hornetq.api.core.TransportConfiguration[]">
        <bean name="transportConfiguration" class="org.hornetq.api.core.TransportConfiguration">
            <constructor-arg name="className" value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" type="java.lang.String"/>
            <constructor-arg name="params" type="java.util.Map">
                <map key-type="java.lang.String" value-type="java.lang.Object">
                    <entry key="host" value="127.0.0.1" />
                    <entry key="port" value="5445" />
                </map>
            </constructor-arg>
        </bean>
    </constructor-arg>
</bean>

【问题讨论】:

    标签: spring jboss jms hornetq


    【解决方案1】:

    我认为最好使用 jndi nad 只依赖于 jms(而不是 hornetq)。

    1- 在Jboss的standalone.xml中定义一个连接工厂:

    <connection-factory name="RemoteConnectionFactory">
        <connectors>
        <connector-ref connector-name="netty"/>
        </connectors>
        <entries>
            <entry name="java:jboss/exported/jms/ConnectionFactory"/>
        </entries>
    </connection-factory>
    

    2- 使用 jndi 定义连接工厂 bean:

    <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:/jboss/exported/jms/ConnectionFactory" />
        <property name="lookupOnStartup" value="false"/>
        <property name="proxyInterface" value="javax.jms.ConnectionFactory"/>
    </bean>
    

    所以您只依赖于 jms-api,并且将来您可以随时轻松更改您的 jms-broker:

    <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>javax.jms-api</artifactId>
        <version>2.0</version>
       <scope>provided</scope>
    </dependency>
    

    【讨论】:

    • 这本来可行,但是应用程序没有在 J2EE 服务器上下文中运行,因此它抱怨 java: 前缀和我放入的任何其他内容都为队列带来了“未找到”错误。我最终为具有大量日志记录的连接创建了一个测试 java 类,但仍然遇到相同的错误。原来是需要更新的第三方 JAR 文件。
    • 是的,java: 前缀是给 jboss 的。但这个想法是使用 jndi 并且仅依赖于 jms api,而不是 hornetq 工件。
    猜你喜欢
    • 2015-10-27
    • 2020-10-08
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多