1

ejb コンテナにステートレス セッション Bean があります。jsf2 フォームから呼び出すと問題なく動作しますが、もう一度フォームを呼び出すと、以前に挿入したのと同じデータが表示されます。ブラウザを閉じて再度開いても発生します。フォームに空のフィールドが表示されるまで、数分待たなければなりません。ステートレス セッション Bean は、リクエストごとに再作成されません。それはステートフルなもののように振る舞います。何が悪いの?

アプリケーションサーバー: Glassfish 3.0.1

4

2 に答える 2

2

私の最初の問題は、EJB3 + Struts2 でした。Struts は、リクエストがステートフルであっても、リクエストごとに新しいセッション Bean を作成します。

Struts はそれ自体では何もしません。指示されたことを実行するだけです。そして、あなたは物事を悪用しているだけだと思います。問題を説明するためにいくつかのコードを示すと役立つ場合があります。

JSF2 は、ステートレスであっても、リクエストごとに同じセッション Bean を再利用することがわかりました。

これは一般に当てはまりません。ステートレス セッション Bean (SLSB) の任意のインスタンスを取得できます。また、何らかの理由で特定の状況で同じインスタンスを取得した場合でも (おそらく Bean プールの構成が原因で)、SLSB を使用する場合、これはまったく問題にならないはずです。取得するインスタンスを気にする必要はありません。インスタンスの状態に依存します (ステートレスであるため)。

質問に戻りますが、SLSB を誤用していて、真実ではないことを期待していると思われます。

  • 呼び出しの間に新しく初期化されたインスタンスを取得することを期待しないでください。それはステートレスの意味ではありません。
    • 実際、得られるインスタンスについては何も期待しないでください。
  • SLSB インスタンスの状態に依存しないでください (ステートレスであるため、状態に依存することは想定されていません)。
    • リモート呼び出し間でインスタンス変数に依存しないでください。
    • 実際には、インスタンス変数の使用は避けてください。おそらくそれらは必要ありません。

関連する質問

于 2010-08-29T01:19:11.090 に答える
0

ステートレス セッション Bean は、リクエストごとに再作成されません。

これは正しい用語ではありません。リクエストごとにステートレス Bean の新しいインスタンスを作成する保証はありません。

コンテナーは、パフォーマンス上の理由から、ステートレス Bean のいくつかのインスタンスをプールします。

プールされたインスタンスの数は、コンテナーの構成によって異なります。

于 2010-08-28T12:52:37.697 に答える