ejb コンテナにステートレス セッション Bean があります。jsf2 フォームから呼び出すと問題なく動作しますが、もう一度フォームを呼び出すと、以前に挿入したのと同じデータが表示されます。ブラウザを閉じて再度開いても発生します。フォームに空のフィールドが表示されるまで、数分待たなければなりません。ステートレス セッション Bean は、リクエストごとに再作成されません。それはステートフルなもののように振る舞います。何が悪いの?
アプリケーションサーバー: Glassfish 3.0.1
ejb コンテナにステートレス セッション Bean があります。jsf2 フォームから呼び出すと問題なく動作しますが、もう一度フォームを呼び出すと、以前に挿入したのと同じデータが表示されます。ブラウザを閉じて再度開いても発生します。フォームに空のフィールドが表示されるまで、数分待たなければなりません。ステートレス セッション Bean は、リクエストごとに再作成されません。それはステートフルなもののように振る舞います。何が悪いの?
アプリケーションサーバー: Glassfish 3.0.1
私の最初の問題は、EJB3 + Struts2 でした。Struts は、リクエストがステートフルであっても、リクエストごとに新しいセッション Bean を作成します。
Struts はそれ自体では何もしません。指示されたことを実行するだけです。そして、あなたは物事を悪用しているだけだと思います。問題を説明するためにいくつかのコードを示すと役立つ場合があります。
JSF2 は、ステートレスであっても、リクエストごとに同じセッション Bean を再利用することがわかりました。
これは一般に当てはまりません。ステートレス セッション Bean (SLSB) の任意のインスタンスを取得できます。また、何らかの理由で特定の状況で同じインスタンスを取得した場合でも (おそらく Bean プールの構成が原因で)、SLSB を使用する場合、これはまったく問題にならないはずです。取得するインスタンスを気にする必要はありません。インスタンスの状態に依存します (ステートレスであるため)。
質問に戻りますが、SLSB を誤用していて、真実ではないことを期待していると思われます。
ステートレス セッション Bean は、リクエストごとに再作成されません。
これは正しい用語ではありません。リクエストごとにステートレス Bean の新しいインスタンスを作成する保証はありません。
コンテナーは、パフォーマンス上の理由から、ステートレス Bean のいくつかのインスタンスをプールします。
プールされたインスタンスの数は、コンテナーの構成によって異なります。