7.5. JMS クラスタリングに関する注記

JBoss Messaging クラスタのノード1つが停止した場合、クラスタ内のバディが停止したサーバーのメッセージをデータベースから全てロードします。
停止したノードが停止時にXAトランザクションを実行している場合、トランザクションログが記述される場合もありますが、関連メッセージはクラスタの別のサーバーに移動されます。
停止したサーバーが起動すると、リカバリマネージャはトランザクションログに格納されたトランザクションのリカバリを試行します。このメッセージが別のサーバーに移動されている場合、関連メッセージがそのサーバーにないため、ローカルのJMSプロバイダーから適切なXAREsource を取得することができません。その結果、JBoss Transaction Serviceは以下を返します。
Could not find new XAResource to use for recovering non-serializable XAResource
これを解決するには、クラスタにある各ノードのJMS プロバイダやRecovery Manager を追加してください。例えば、クラスタにノードが3つあったとすると、以下をjbossts-properties.xmlに追加します。
<property name="com.arjuna.ats.jta.recovery.XAResourceRecovery.JBMESSAGINGREMOTE1"
          value="org.jboss.jms.server.recovery.MessagingXAResourceRecovery;java:/RemoteJMSProvider1"/>
   
      <property name="com.arjuna.ats.jta.recovery.XAResourceRecovery.JBMESSAGINGREMOTE2"
          value="org.jboss.jms.server.recovery.MessagingXAResourceRecovery;java:/RemoteJMSProvider2"/>
リモートのプロバイダは、JBOSS_HOME/server/default/deploy/jms-ds.xml で設定されます。
<mbean code="org.jboss.jms.jndi.JMSProviderLoader" name="jboss.jms:service=JMSProviderLoader,name=RemoteJMSProvider">
   <attribute name="ProviderName">MyRemoteJMSProvider</attribute>
   <attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
   <attribute name="FactoryRef">XAConnectionFactory</attribute>
   <attribute name="QueueFactoryRef">XAConnectionFactory</attribute>
   <attribute name="TopicFactoryRef">XAConnectionFactory</attribute>
   <attribute name="Properties">
      java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
      java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
      java.naming.provider.url=192.168.1.172:1099
   </attribute>
</mbean>

注記

java.naming.provider.url はリモート JMS インスタンスの IP アドレスとポートに解決する必要があります。
JNDI プロパティを設定し、クラスタにあるリモートノードに接続します。正しくリカバリを行うには、クラスタにある他の全ノードにそれぞれプロバイダとリカバリマネージャを追加します。