2.19.1 Singleton Session Beanの排他制御
Singleton Session Beanの排他制御には,次の二つの方法があります。
-
Container-Managed Concurrency
EJBコンテナでメソッドレベルのインスタンスの処理状況を管理します。
-
Bean-Managed Concurrency
Enterprise Beanですべての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を使用して実装してください。