4.3. XAResouceRecovery の代わり
XAResourceRecovery
が利用する iterator ベースのアプローチは、ステート管理機能と併せて実装する必要があります。結果、必要のない複雑性を伴ってしまいます。JBoss Transaction Service では、パブリックインターフェースの実装を以下のように提供することができます。
com.arjuna.ats.jta.recovery.XAResourceRecoveryHelper { public boolean initialise(String p) throws Exception; public XAResource[] getXAResources() throws Exception; }
リカバリの一括処理中に、
getXAResources
メソッドが呼び出され、アレイの要素ごとにリカバリを試行します。リソースマネージャの大半は、recover
メソッドが複数のXid を返すことができるため、アレイ内に必要なのはXAResource
を1つのみとなっています。
XMLプロパティファイルで設定されJBoss Transaction Service によりインスタンス化される
XAResourceRecovery
インターフェースのインスタンスとは違って、XAResourceRecoveryHelper
のインスタンスはアプリケーションコードで構築され、XARecoveryModule.addXAResourceRecoveryHelper
を呼び出すことでJBoss Transaction Service に登録されます。
現在、
initialize
メソッドはJBoss Transaction Service により呼び出されるわけではありませんが、このメソッドを提供し今後のリリースでさらに設定オプションを追加できるようにしています。
リカバリマネージャから呼出しされなくなると、
XAResourceRecoveryHelper
インスタンスの登録を解除することができます。リカバリスキャンが実行されている間はしばらく、登録解除がブロックされます。
アプリケーションサーバーなど、データソースをデプロイ、アンデプロイする環境では、
XAResourceRecoveryHelper
インスタンスの追加、削除を動的に行う機能は便利です。このような場合、動作をクロスローディングする際は慎重に行ってください。