Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(EJBコンテナ)


2.19.1 Singleton Session Beanの排他制御

Singleton Session Beanの排他制御には,次の二つの方法があります。

Singleton Session Beanを開発する場合,どちらの方法で排他制御を管理するかを決める必要があります。両方の方法を同時に使用することはできません。

〈この項の構成〉

(1) Container- Managed Concurrency

EJBコンテナによって排他制御が実行されます。それぞれのビジネスメソッドやタイムアウトメソッドは,ReadロックまたはWriteロックによって制御されます。Readロックを設定したメソッドの場合,複数のメソッドの処理を同時に実行できます。Writeロックを設定したメソッドの場合,一つのメソッドの処理が完了するまで,ほかのメソッドの呼び出しは実行されません。

ロックの種類は,Session Beanのクラス,またはオーバーライドしたクラスのメソッドに対して,アノテーションで指定します。明示的に指定しない場合は,Writeロックを指定した場合と同じように動作します。

なお,排他制御実行時に,処理実行待ちのタイムアウト時間を設定できます。タイムアウト時間は,@AccessTimeoutアノテーションによって指定できます。タイムアウトが発生した場合は,EJBコンテナによって,呼び出し元のクライアントに対してjavax.ejb.ConcurrentAccessTimeoutExceptionがスローされます。

(2) Bean-Managed Concurrency

Bean-Managed Concurrencyを指定した場合,EJBコンテナによってSingleton Session Beanに対する排他制御は実行されません。アプリケーション開発時に,排他制御に関する実装が必要です。目的に応じて,Java言語のSynchronizedやvolatileを使用して実装してください。