セッション Bean (ステートレス セッション Bean、ステートフル セッション Bean) は同期されていますか?
5 に答える
一度に 1 つのスレッドのみが Bean にアクセスします。これを管理するのはアプリケーションサーバー次第です。したがって、Bean 内から同期を使用しないでください。これが、EntityManager のような非スレッドセーフがインスタンス値になり、同期の問題が発生しない理由です。
ステートレス/ステートフル セッション Bean はスレッド セーフです。各リクエストは Bean の専用インスタンスを取得するため、同期する必要がないためです。
シングルトン セッション Bean は共有され、コンテナー (Container Managed Concurrency - CMC) またはユーザー (Bean Managed Concurrency - BMC) によって同期される必要があります。
EJB Bean について非常に真実なのは、EJB 3.0 Bean を作成すると、EJB のメソッドはデフォルトで同期化されるということです。
例えば
@Statelss クラス EJBclass {
void someMethod(){ }
}
このsomeMethod Synchronizeを作成すると、同期されているため、このレベルで同期できないようにエラーが表示されます。
EJB 3.0 Bean はスマートで、パフォーマンスも優れています。
エンタープライズ Java Bean は同期されません。セッション Bean は ejb コンテナーによって維持されるため、アプリケーション レベルで同期ロジックを実装する必要があります。