10.3. ロック管理と同時実行制御

JBoss Transaction Sevice の同時実行制御に関する情報はロックにより保持されます。これらのロックの一部は、複数のオブジェクトにより様々なプロセスで利用されます。このロックは、ステート情報に利用するオブジェクトストアと同じように、ロックストアに保存することができます。JBoss Transaction Service で利用するロックストアには制限付きのインターフェースがあり、実装に柔軟性を保ちます。ロックストアは、Unix ファイルシステムで様々な形式にて、あるいはリモートでもアクセスできるストアとして、共有メモリに実装することができます。

注記

JBoss Transaction Service クラスでは、デフォルトのロックストアは pure Java 実装となっており、複雑なロック実装を利用したい場合、ネーティブのメソッドを使う必要があります。

例10.8 LockStore クラスの例

public class LockStore
{
    public abstract InputObjectState read_state (Uid u, String tName)
	throws LockStoreException;
    
    public abstract boolean remove_state (Uid u, String tname);
    public abstract boolean write_committed (Uid u, String tName,
					     OutputObjectState state);
};

10.3.1. ロックストアの情報を選択

JBoss Transaction Service は複数のオブジェクトストア実装に対応しています。利用しているオブジェクトモデルがSingleの場合、オブジェクトの情報がロックストアからエクスポートされないため、ロックの保持にロックストアは必要ありません。しかし、Multiple モデルを使う場合、様々なランタイム環境により同時実行制御の情報を共有する必要がある場合があります。ロックストアの実装タイプを指定し、com.arjuna.ats.txoj.lockstore.lockStoreType プロパティを使い指定の実行環境内にて全オブジェクトに対して利用することができます。この変数は以下のいずれかになります。
BasicLockStore
これはインメモリ実装で、実行環境間における格納情報の共有には対応していません。必要であれば拡張しこの機能を含めることもできます。
BasicPersistentLockStore
これは、デフォルト実装です。ロック情報をローカルファイルシステムに格納します。同じファイルストアを共有する実行環境は、同時実行制御の情報を共有することができます。ロッキング情報が書き込まれるファイルシステムのルートは、Jboss Trasaction Service installationのディレクトリ内にある LockStore/ ディレクトリとなっています。この場所をオーバーライドするには、適宜にcom.arjuna.ats.txoj.lockstore.lockStoreDir を設定するか、CLASSPATHに場所を含めます。

lockStoreDir のプロパティをオーバーライドする方法

  • java -D com.arjuna.ats.txoj.lockstore.lockStoreDir=/var/tmp/LockStore myprogram
  • java –classpath $CLASSPATH;/var/tmp/LockStore myprogram