ステートレス セッション Bean がシングル スレッドであるのはなぜですか?
質問
私の理解によれば、ステートレス セッション Bean はビジネス ロジックのコード化に使用されます。インスタンスは複数のリクエストで共有されているため、インスタンス変数にデータを保存できません。したがって、これらはシングルトンクラスに似ているようです。ただし、違いは、リクエストごとにステートレス セッション Bean の個別のインスタンスを作成する (またはプールから再利用する) ことです。
グーグルで調べたところ、Java EEの仕様ではシングルスレッドであると想定されているという根拠が見つかりました。しかし、なぜ次のように指定されているのかわかりません シングルスレッド?
解決
SLSB は TX コンテキストのためシングルスレッドであり、プリンシパルは呼び出されたときに Bean インスタンスに関連付けられます。これらの Bean はプールされ、最大プール サイズに達しない限り、別のスレッドで処理されます (ベンダーに依存します)。
SLSB がスレッド セーフに設計されている場合、すべての呼び出しは、 Tx Context 、 Security Context 情報などを含むリクエスト情報を持つサーブレット doGet/Post のように見えるでしょう。したがって、少なくともコードはきれいに見えます(開発者に依存します)。
他のヒント
ステートレス セッション Bean がシングル スレッドである主な理由は、コンテナのスケーラビリティを高めるためです。コンテナーは、ランタイム環境に関して多くの単純化された仮定を立てることができます。2 番目の理由は、Bean が別のスレッド コンテキストで呼び出されることがないため、開発者はビジネス ロジックの同期や再入について心配する必要がないため、開発者の作業が楽になることです。
この理由は、元の EJB 1.0 仕様のレビューで議論されたことを覚えています。仕様の目標セクションを見てみましょう。見る http://java.sun.com/products/ejb/docs.html 仕様一覧については。