2014-09-22 107 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

相關問題