9.2.8. クラス階層
JBoss Transaction Service のクラス階層を構成する主なクラスは例9.5「JBoss Transaction Service のクラス階層」にて詳しく説明しています。
例9.5 JBoss Transaction Service のクラス階層
耐障害性アプリケーションのプログラマは、
LockManager、Lock、AtomicAction クラスが必要です。プログラマにとり重要なクラスは他に、UidやObjectStateがあります。JBoss Transaction Service のほとんどのクラスはベースクラスStateManagerから派生しており、永続かつ回復可能オブジェクトを管理するのに必要な基本的機能を提供しています。これらの機能には、オブジェクトのアクティベーション、アクティベーション解除、ステートベースのオブジェクトリカバリへの対応が含まれています。LockManager クラスはStateManager と Lock機能を使い、アトミックアクションのシリアル化プロパティ実装に必要な同時実行制御を提供します。アトミックアクション機能の実装は、AtomicAction や TopLevelTransactionにより対応しています。
単純な例を見てみます。
LockManagerから適切に派生したExampleがユーザ定義の永続クラスであると仮定します。アトミックなトランザクションTransを含むアプリケーションがop1という操作を呼び出すことでExampleタイプの (Oと呼ばれる) オブジェクトへアクセスします。すると、ステートが O に変更します。直列性プロパティでは、書き込みロックを変更前にOで取得する必要があるため、op1 のボディはConcurrency controller のsetlock への呼出しが含まれているはずです。
この場合
LockManager クラス提供のsetlockメソッドが以下の機能を実行します。
- 現在保持しているロックと書き込みロックとの互換性を確認します。可能であれば以下を行います。
StateManager操作のactivateを呼出すことで、まだ行っていない場合はオブジェクトストアからOの最新永続ステートをロードします。その後、StateManager操作のmodifiedを呼出し、Oが永続的かどうかにより、Oに対してRecoveryRecordかPersistenceRecordのインスタンスを作成し、このインスタンスをTransのRecordListへ挿入します。- Trans のRecordList にLockRecord インスタンスを作成、挿入
ロックを取得後しばらくしてから
Transが中断された場合、AtomicActionのrollback 操作は、様々な記録上にある適切なAbort 操作を呼び出すことで、Trans に紐付いたRecordList インスタンスを処理します。LockRecord クラスによる操作を実装することで、WRITE ロックを解除し、RecoveryRecord/PersistenceRecord がOの以前のステートをリストアします。
上記の作業はすべてアプリケーションプログラマの代わりに自動的にJBoss Transactionにより実行されます。プログラマはトランザクションを開始し、適切なロックを設定するだけで、JBoss Transaction Service とTransactional Objects for Java がパーティシパントの登録、永続性、同時実行制御、リカバリを行います。