Spring Bean для настройки соединения Factory с JBoss HornetQ

Я беру приложение, которое в настоящее время выводит на ActiveMQ, и переназначаю его, чтобы использовать JBoss HornetQ, который был настроен для меня. Приложение является автономным (не запускается в контейнере EJB) и использует Spring 2 (хотя я обновился до Spring 3, чтобы получить доступ к атрибуту 'name').

Я сослался на примеры, которые выглядят так:

<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>

1 ответ

Решение

Я думаю, что лучше использовать JNDI NAD зависит только от JMS (не Hornetq).

1- Определите фабрику соединений в standalone.xml в Jboss:

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

2- Определите bean-компонент фабрики соединений с помощью jndi:

<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-брокера, когда захотите:

<dependency>
    <groupId>javax.jms</groupId>
    <artifactId>javax.jms-api</artifactId>
    <version>2.0</version>
   <scope>provided</scope>
</dependency>
Другие вопросы по тегам