4.2. XAConnectionsのリカバリ

障害から回復時に、保留となっているトランザクションを解決するため、JBossJTS は障害発生前に利用していたデータベースに再接続する機能を必要とします。通常実行時にトランザクションサービスが接続情報の大半を保存しており、この情報をリカバリ時に使うことで接続の再構築が可能です。ただし、書き込み中に障害が発生すると、情報の一部を失ってしまう可能性もあります。これらの接続を再構築するために、アプリケーションが利用している可能性のある各データベースに対し、JBossJTA インターフェースcom.arjuna.ats.jta.recovery.XAResourceRecovery 実装を1つ提供する必要があります。

注記

JBossJTA提供のトランザクショナルJDBC 2.0 ドライバを利用している場合、リカバリを実行するために別途作業を行う必要はありません。
XAResourceRecovery インスタンスについてリカバリシステムに通知するには、プロパティ経由でクラス名を指定します。propertiesファイルにあるプロパティあるいは、ランタイム時に登録されたプロパティでcom.arjuna.ats.jta.recovery.XAResourceRecovery の名で始まるものについてはこれらのプロパティを示すとみなされ、値は、com.arjuna.ats.jta.recovery.XAResourceRecoveryOracle=com.foo.barRecoveryなどのクラス名となります。
作成時にインスタンスに渡される追加情報は、com.arjuna.ats.jta.recovery.XAResourceRecoveryOracle=com.foo.barRecovery;myData=helloなどのように、セミコロンのあとに指定することができます。

注記

これらのプロパティは、property ファイルのJTAセクションに入れる必要があります。
リカバリ時のエラーについては報告されます。
public interface XAResourceRecovery
{
    public XAResource getXAResource () throws SQLException;
      
    public boolean initialise (String p);
      
    public boolean hasMoreResources ();
};
各メソッドは、以下の情報を返すはずです。
initialize
このインスタンスが作成されてから、プロパティ値の定義にて最初のセミコロンの後にある追加情報はオブジェクトに渡されます。このオブジェクトは実装固有の形式でこの情報を利用することができます。
hasMoreResources
XAResourceRecovery 実装は、複数のXAResource インタンスを提供可能です。getXAResourceへ呼び出す前に、hasMoreResources を呼出し、さらに接続を取得する必要があるかを決定します。戻り値がfalseの場合、このリカバリ一括処理時にgetXAResource は再度呼び出されず、このインスタンスは次のリカバリスキャンまで無視されます。
getXAResource
XAResource オブジェクトのインスタンスを返します。これがどのように作成されるか (また、コンストラクタに対するパラメータがどのように取得されるか) は、XAResourceRecovery 実装によって決まります。このクラスのコンストラクタに対するパラメータは、最初のドライバやデータソース作成時に利用されるパラメータと類似していなければならず、さらにはリカバリ実行に利用可能な新規のXAResources インスタンス作成に十分な数が必要です。

注記

リカバリマネージャが一括処理を行っている最中に、ご利用中のXAResourceRecoveryインスタンスを呼出したい場合、hasMoreResourcesfalse を返し現在のスキャン作業を終了するように指示を出すと、次のリカバリスキャン時にはtrueが必ず返されるようにします。