0

ローカルでは、私のアプリケーションは組み込みの netty ConnectionFactory に正常に接続され、起動やトピック メッセージの送信に問題はありません。私のローカル ボックスは、スタンドアロンの JBoss 5.1 とスタンドアロンの HornetQ です。

ただし、DEV サーバー (クラスター化された JBoss 5.1 およびクラスター化された HornetQ を実行) にデプロイすると、接続できず、次のスタック トレースが表示されます。

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/eShowroom]] (main) Exception sending context initialized event to listener instance of cla>\ss org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'topicConnectionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: ConnectionFactory not bound

私は、独自の JMS トピックを除いて、追加の構成を行わずに、デフォルトの組み込みの netty コネクタを使用しようとしています。DEV サーバーのセットアップは、私の制御範囲外であり、かなりブラック ボックスであるため、比較的わかりません。

applicationContext.xml (内$JBOSS_HOME/server/default/deploy/application.war/WEB-INF):

    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
       <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
                <prop key="java.naming.provider.url">jnp://${jboss.bind.address:localhost}:1099</prop>
                <prop key="java.naming.factory.url.pkgs">org.jboss.naming</prop>
            </props>
       </property>
    </bean>

    <bean id="topicConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate"></property>
        <property name="jndiName" value="/ConnectionFactory"></property>
    </bean>

    <bean id="cacheTopic" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate"></property>
        <property name="jndiName" value="/topic/myCacheTopic"></property>
    </bean>

    <bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver">
        <property name="jndiTemplate" ref="jndiTemplate"/>
        <property name="cache" value="true"/>
    </bean>

    <bean id="messageSendTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="topicConnectionFactory"/>
        <property name="destinationResolver" ref="jmsDestinationResolver"/>
        <property name="pubSubDomain" value="true"/>
    </bean>

hornetq-jms.xml (内$JBOSS_HOME/server/default/deploy/hornetq.sar)

    <connection-factory name="NettyConnectionFactory">
      <xa>true</xa>
      <connectors>
         <connector-ref connector-name="netty"/>
      </connectors>
      <entries>
         <entry name="/ConnectionFactory"/>
         <entry name="/XAConnectionFactory"/>
      </entries>
   </connection-factory>

   <connection-factory name="NettyThroughputConnectionFactory">
      <xa>true</xa>
       <connectors>
         <connector-ref connector-name="netty-throughput"/>
       </connectors>
        <entries>
            <entry name="/ThroughputConnectionFactory"/>
            <entry name="/XAThroughputConnectionFactory"/>
        </entries>
    </connection-factory>

   <connection-factory name="InVMConnectionFactory">
      <xa>true</xa>
      <connectors>
         <connector-ref connector-name="in-vm"/>
      </connectors>
      <entries>
         <entry name="java:/ConnectionFactory"/>
         <entry name="java:/XAConnectionFactory"/>
      </entries>
   </connection-factory>

私が簡単に見つけられるローカルと DEV の唯一の違いは、hornetq-configuration.xml にあります。

DEV hornetq-configuration.xml (hornetq-jms.xml と同じパス)

   <broadcast-groups>
      <broadcast-group name="bg-group1">
         <group-address>${hornetq.broadcast.bg-group1.address:231.7.7.7}</group-address>
         <group-port>${hornetq.broadcast.bg-group1.port:9876}</group-port>
         <broadcast-period>5000</broadcast-period>
         <connector-ref>netty</connector-ref>
      </broadcast-group>
   </broadcast-groups>

   <discovery-groups>
      <discovery-group name="dg-group1">
         <group-address>${hornetq.discovery.dg-group1.address:231.7.7.7}</group-address>
         <group-port>${hornetq.discovery.dg-group1.port:9876}</group-port>
         <refresh-timeout>10000</refresh-timeout>
      </discovery-group>
   </discovery-groups>

   <cluster-connections>
      <cluster-connection name="my-cluster">
         <address>jms</address>  
         <connector-ref>netty</connector-ref>
          <discovery-group-ref discovery-group-name="dg-group1"/>
      </cluster-connection>
   </cluster-connections>
4

1 に答える 1

0

したがって、何らかの理由で、これはクラスター化された環境でのタイミングの問題であることが判明しました。接続ファクトリを必要とする Bean は、スピンアップする前に、他のすべてが起動して実行されるまで待機することを余儀なくされました。

于 2013-09-26T17:15:28.160 に答える