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
インスタンスを呼出したい場合、hasMoreResources
がfalse
を返し現在のスキャン作業を終了するように指示を出すと、次のリカバリスキャン時にはtrue
が必ず返されるようにします。