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 アドレスとポートに解決する必要があります。