2014-09-22 106 views
1

我正在接收一个当前输出到ActiveMQ的应用程序,并将其重新命名为使用已为我设置的JBoss HornetQ。该应用程序是独立的(不在EJB容器中运行),并使用Spring 2(尽管我已更新到Spring 3以访问'name'属性)。用于设置JBoss HornetQ的连接工厂的Spring Bean

我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中的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> 

回答

0

我认为这是更好的使用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> 
+0

这样做可行,但应用on没有运行在J2EE服务器上下文中,因此它会抱怨java:前缀,而我放入的任何内容都会为该队列带回“未找到”错误。 我最终创建了一个测试java类,用于具有很多日志记录的连接,并且仍然有相同的错误。原来是需要更新的第三方JAR文件。 – user1819136 2014-09-24 10:34:56

+0

是的,java:前缀是针对jboss的。但是这个想法是使用jndi,并且仅取决于jms api,而不是hornetq文物。 – united 2014-09-24 19:15:31

相关问题