9.2.8. クラス階層

JBoss Transaction Service のクラス階層を構成する主なクラスは例9.5「JBoss Transaction Service のクラス階層」にて詳しく説明しています。

例9.5 JBoss Transaction Service のクラス階層

StateManager		// Basic naming, persistence and recovery control
LockManager		// Basic two-phase locking concurrency control service
User-Defined Classes
Lock			// Standard lock type for multiple readers/single writer
User-Defined Lock Classes
AbstractRecord		// Important utility class, similar to Resource
RecoveryRecord	            // handles object recovery
LockRecord		// handles object locking
RecordList		// Intentions list
other management record types
AtomicAction		// Implements transaction control abstraction
TopLevelTransaction
Input/OutputBuffer // Architecture neutral representation of an objects’ state
Input/OutputObjectState	// Convenient interface to Buffer
ObjectStore			// Interface to the object storage services
      
耐障害性アプリケーションのプログラマは、LockManagerLockAtomicAction クラスが必要です。プログラマにとり重要なクラスは他に、UidObjectStateがあります。JBoss Transaction Service のほとんどのクラスはベースクラスStateManagerから派生しており、永続かつ回復可能オブジェクトを管理するのに必要な基本的機能を提供しています。これらの機能には、オブジェクトのアクティベーション、アクティベーション解除、ステートベースのオブジェクトリカバリへの対応が含まれています。LockManager クラスはStateManagerLock機能を使い、アトミックアクションのシリアル化プロパティ実装に必要な同時実行制御を提供します。アトミックアクション機能の実装は、AtomicActionTopLevelTransactionにより対応しています。
単純な例を見てみます。LockManagerから適切に派生したExampleがユーザ定義の永続クラスであると仮定します。アトミックなトランザクションTransを含むアプリケーションがop1という操作を呼び出すことでExampleタイプの (Oと呼ばれる) オブジェクトへアクセスします。すると、ステートが O に変更します。直列性プロパティでは、書き込みロックを変更前にOで取得する必要があるため、op1 のボディはConcurrency controller のsetlock への呼出しが含まれているはずです。
public boolean op1 (...)
{	
    if (setlock (new Lock(LockMode.WRITE) == LockResult.GRANTED)
	{
	    // actual state change operations follow 
	    ...
	}
	}
この場合LockManager クラス提供のsetlockメソッドが以下の機能を実行します。
  • 現在保持しているロックと書き込みロックとの互換性を確認します。可能であれば以下を行います。
  • StateManager 操作のactivateを呼出すことで、まだ行っていない場合はオブジェクトストアからOの最新永続ステートをロードします。その後、StateManager 操作のmodifiedを呼出し、Oが永続的かどうかにより、Oに対してRecoveryRecordPersistenceRecord のインスタンスを作成し、このインスタンスをTransRecordList へ挿入します。
  • Trans のRecordList にLockRecord インスタンスを作成、挿入
ロックを取得後しばらくしてからTransが中断された場合、AtomicActionrollback 操作は、様々な記録上にある適切なAbort 操作を呼び出すことで、Trans に紐付いたRecordList インスタンスを処理します。LockRecord クラスによる操作を実装することで、WRITE ロックを解除し、RecoveryRecord/PersistenceRecord がOの以前のステートをリストアします。
上記の作業はすべてアプリケーションプログラマの代わりに自動的にJBoss Transactionにより実行されます。プログラマはトランザクションを開始し、適切なロックを設定するだけで、JBoss Transaction Service とTransactional Objects for Java がパーティシパントの登録、永続性、同時実行制御、リカバリを行います。