2014-09-22 4 views
1

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

Я refered на примеры, которые выходят как:

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

Я соответствующий конструктор «общественного HornetQJMSConnectionFactory (булево га, org.hornetq .api.core.TransportConfiguration ... initialConnectors) "(Получается из файла класса в файле jboss-client.jar, который я использую), насколько я могу видеть.

Я также, кажется, соответствующий конструктор для TransportConfiguration, что «общественное TransportConfiguration (java.lang.String имя класса, 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> 

ответ

0

Я думаю, что это лучше, используя JNDI НАД зависит только от 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- Определите связь-заводской боб с помощью 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-broker всякий раз, когда захотите:

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

Это сработало бы, однако применение on не работает в контексте сервера J2EE, поэтому он жалуется на префикс java: prefix и все остальное, что я добавил, возвратил ошибку «не найден» для очереди. Я закончил создание тестового класса java для соединения с большим количеством протоколирования и по-прежнему получил ту же ошибку. Оказалось, что это файл сторонних разработчиков JAR, который необходимо обновить. – user1819136

+0

Да, префикс java: для jboss. Но идея заключалась в использовании jndi и зависела только от jms api, а не от hornetq артефактов. – united