解決しようとしているJSFの難しい問題があります。注:私はJSFとJavaにかなり慣れていません。ユーザーがログインし、いくつかのチェックボックスを選択し、[送信]をクリックして、別のページに情報を追加し、DBに保存してログアウトする簡単なアプリケーションがあります。
私の本番環境では、ユーザーセッションデータがクロスまたはキャッシュされ、後続のユーザーセッションによって取得されるインスタンスが表示されます。たとえば、ユーザーAがデータを入力してから、ユーザーBがデータを入力すると、データを確認すると、ユーザーAが入力したものが表示されます。もちろん、これをテストで再現することはできません。
私はjsf1.2._12、richfaces 3.3.2、およびspring2.5.6を使用しています。アプリサーバーはJBoss5です。
私のJSFマネージドBeanはすべてセッションスコープです。この特定のマネージドBeanは、セッションスコープのビジネスオブジェクトとしてSpring Beanを呼び出し、最終的にはシングルトンのDAOを呼び出します。
ここに関連するfaces-configinfo
<managed-bean>
<description>ContactBean</description>
<managed-bean-name>ContactBean</managed-bean-name>
<managed-bean-class>com.package.ContactBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>dataElementBO</property-name>
<value>#{dataElementBO}</value>
</managed-property>
<managed-property>
<property-name>attributeBO</property-name>
<value>#{attributeBO}</value>
</managed-property>
<managed-property>
<property-name>dataElement2BO</property-name>
<value>#{dataElement2BO}</value>
</managed-property>
<managed-property>
<property-name>submissionBO</property-name>
<value>#{submissionBO}</value>
</managed-property>
<managed-property>
<property-name>selectedList</property-name>
<property-class>java.util.ArrayList</property-class>
<list-entries />
</managed-property>
<managed-property>
<property-name>enteredContact</property-name>
<property-class>java.util.ArrayList</property-class>
<list-entries />
</managed-property>
</managed-bean>
そして私のアプリ-春の豆が呼ばれるためのコンテキスト
<bean id="submissionBO" class="com.package.submissionBOImpl" scope="session">
<property name="submissionDAO">
<ref bean="submissionDAO" />
</property>
</bean>
Webサーバーのログを表示するときに、この問題は、ユーザーAとBが同時にログインしていなかった場合に発生しました。ユーザーAがログアウトし、約20分後にユーザーBがログインしました。
セッションスコープのBeanの使用が他のユーザーのデータとどのように交差する可能性があるのかわかりません...これらがどのようにスコープされているのか理解できないことがありますか?必要に応じて、モックアップしたコードを添付できます。前もって感謝します!