2009-05-21 14 views
6

セッションビーン(ステートレスセッションBean、ステートフルセッションBean)同期されていますか?一度EJBと同期

+1

とは何ですか? –

+1

誰かが私にこの質問をしましたが、正しい答えは何でしょうか?私はEJBの中に同期メソッドを見なかった、私はEJBが同期されていないと言うだろう。ハッシュテーブルは同期されているのですか? –

+0

技術的にあなたの質問は明確ではありません。 Session Beansをスレッドセーフにする必要があるのですか?またはセッションBeanはスレッドセーフですか? –

答えて

6

1つのスレッドだけが、あなたの豆にアクセスします。これを管理するのはアプリケーションサーバーの責任です。だから、あなたはあなたの豆の中から同期を使用すべきではありません。これは、EntityManagerのような非スレッドセーフではなく、インスタンス値であり、同期の問題がない理由です。 EJB豆について

+0

ええ、うれしいことですが、誰かがインタビューでこの質問をしましたが、私は同じ方法で答えましたが、彼は私の答えに満足していませんでした。 –

+3

彼らはいつも手掛かりがない可能性があります。 –

+1

正確です。さらに、新しい@AccessTimeoutアノテーションを使用すると、呼び出し可能なスレッドがインスタンスが使用可能になるのを待つ時間を、移植可能な方法で正確に構成できます。また、新しい@Singleton Beanはマルチスレッドアクセスを許可するように設定できますが、デフォルトではそうではありません。その決定は、すべてのSession Bean(@Stateless、@Stateful、@Singleton)のデフォルト規則の一貫性を保つために行われました –

-1

非常に本当の事はあなたがEJB 3.0の豆を作成したら、次にEJBのメソッドがデフォルトで同期であるということです。

@Statelss クラスEJBclass {

無効のsomeMethod(){ }

}今

あなたはこれのsomeMethodは、それがで同期することができないみたいなエラーが表示されます同期するようになります場合にはこのレベルは同期しています。

EJB 3.0ビーンズは、スマートであり、パフォーマンスが良いです。

-1

エンタープライズJava Beanは同期されません。セッションBeanはejbコンテナによって維持されるため、アプリケーションレベルで同期ロジックを実装する必要があります。

+0

これは本当ですか?私は、JEE標準は非常に明確で、Entity Beansだけが現在のメソッドへのアクセスを設定できると考えています。私が間違っているなら、私を修正してください。 – icordoba

1

セッションBeanは、ログインしたユーザーが存在することを意味します。ユーザーが誤ってUIアクションをダブルクリックすると、2つのHTTP要求が2つの別々のスレッドで作成されます。

  • ステートレスBeanはシンクロナイズされません。すべてのスレッドは異なるインスタンスを取得し、どちらもロジックをパラレルに実行しています。どちらも同じリソースにアクセスできます!
  • Statefull Beanはコンテナによって同期されます。両方のスレッドは同じejbインスタンスを取得します。 2番目のスレッドが最初のスレッドを終了するのを待っています。問題ない。
1

ステートレス/ステートフルセッションBeanは、スレッドセーフです。各リクエストはBeanの専用インスタンスを取得するため、同期する必要はありません。

シングルトンセッションBeanは、共有のいずれかの容器(コンテナ管理並行 - CMC)によって同期される必要があるか、またはユーザによって( - BMCビーンは同時実行を管理しました)。

関連する問題