10.2.4. オブジェクトモデル
JBoss Transaction Service はオブジェクトに対して2種のモデルをサポートしています。ステートおよび同時実行制御の実装は、どのモデルを利用しているかにより変化します。
- シングル
- アプリケーションには、オブジェクトのコピーが1つのみ含まれています。このオブジェクトは1つのJVM内に置かれており、クライアントはすべてサーバーへの呼出しに対応する必要があります。単一モデルでは、パフォーマンスが優れていますが、SPOF (Single Point of Failure)を生み出します。マルチスレッドの環境では、1つのスレッドに障害が起こると、オブジェクトを障害から守ることができません。
- 複数
- 論理的には、オブジェクトのインスタンスは1つ存在します。オブジェクトの複製が複数のJVM間に分散されているのです。パフォーマンスはシングルモデルに比べると劣りますが、障害からはうまく隔離されます。
singleモデルがデフォルトとなっています。オブジェクト作成時に
com.arjuna.ats.arjuna.gandiva.ObjectName
クラスの適切なインスタンスを提供することで、オブジェクト毎にこれをオーバーライドすることができます。
注記
オブジェクトのインスタンス化前にモデルを変更することができますが、オブジェクトが有効な間、同じ状態に保つのであれば変更は必要ありません。
以下のメソッドを使い適切な
ObjectName
クラスを提供します。例については例10.6「オブジェクトモデル」 を参照してください。
ObjectName
の新規インスタンスを作成します。com.arjuna.ats.arjuna.ArjunaNames.StateManager_objectModel()
名を使いオブジェクトモデルの属性を設定します。
例10.6 オブジェクトモデル
{ ObjectName attr = new ObjectName(“SNS:myObjectName”); attr.setLongAttribute(ArjunaNames.StateManager_objectModel(), ObjectModel.SINGLE); AtomicObject obj = new AtomicObject(ObjectType.ANDPERSISTENT, attr); }