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インスタンスの追加、削除を動的に行う機能は便利です。このような場合、動作をクロスローディングする際は慎重に行ってください。