2008-08-27 34 views
6

私の理解によれば、ステートレスセッションBeanはビジネスロジックのコード化に使用されます。それらのインスタンスは複数の要求によって共有されるため、インスタンス変数にデータを格納することはできません。だから彼らはシングルトンのクラスに似ているようです。しかし、違いは、リクエストごとにステートレスセッションBeanの個別インスタンスを作成する(またはプールから再利用する)ことです。なぜステートレスセッションBeanはシングルスレッドですか?

私は、Java EE仕様ではシングルスレッドであると言われているという推測を見つけることができました。しかし、シングルスレッドと指定されている理由はありませんか?

答えて

5

SLSBはTXコンテキストのためにシングルスレッドであり、プリンシパルは呼び出されるとBeanインスタンスに関連付けられます。これらのBeanはプールされ、最大プール・サイズに達していない場合は、個別のスレッド(ベンダー依存)で処理されます。

SLSBがスレッドセーフであれば、すべての呼び出しはTxコンテキスト、セキュリティコンテキスト情報などを含むリクエスト情報を含むサーブレットdoGet/Postのように見えるはずです。

4

ステートレスセッションBeanがシングルスレッド化されている主な理由は、コンテナに対してスケーラビリティを高めるためです。コンテナは、実行時環境に関する多くの単純化仮定を行うことができます。もう1つの理由は、Beanが決して別のスレッドコンテキストで呼び出されることはないため、開発者はビジネスロジックの同期やリエントラントを心配する必要がないため、開発者の生活を楽にすることです。

私は元のEJB 1.0仕様のレビューで議論されていることを覚えています。私は仕様のゴールセクションを見るでしょう。仕様一覧については、http://java.sun.com/products/ejb/docs.htmlを参照してください。

関連する問題