0

struts2、hibernate、springを使用しており、モデル駆動型パターンを使用しています。2人の異なるユーザーとセッション(異なるコンピューター)で同時にオブジェクトを正確にフェッチしようとすると、深刻な問題があるようです。

詳細...ユーザーと名前の2つのメンバーを持つProjectオブジェクトがあるとします。両方のユーザーがプロジェクトオブジェクト(もちろん、ユーザーごとに異なるオブジェクト)をフェッチしようとします。したがって、ユーザーAにはID 498のプロジェクトがあり、ユーザーBにはID499のプロジェクトがあります。

strutsアクションは、異なるIDのオブジェクトをフェッチしようとしていることを認識しますが、両方のユーザーが同じProjectオブジェクトインスタンスを持っているため、同じ結果が表示されます。ここで提供されるログで確認できます。

2011-12-08 14:07:21 LoginInterceptor [INFO]ユーザー17がpopulateProject、paramsを呼び出しています:id = 499 2011-12-08 14:07:21 LoginInterceptor [INFO]ユーザー4がpopulateProject、params:id=498を呼び出しています2011-12-08 14:07:21 ProjectAction [INFO] Obj:hbn.Project@e2df60d、セッションユーザーIDは17、obj.user.idは4 2011-12-08 14:07:21 ProjectAction [INFO] Obj :hbn.Project@e2df60d、セッションユーザーIDは4、obj.user.idは4

どうすれば解決できますか?

ありがとう、ロン。

4

1 に答える 1

3

議論に従って、私は問題の原因と解決策を投稿しています。スコープは、Springプラグインによって作成されるアクションに対して設定されておらず、デフォルトでは、スコープはsingletonです。struts2では、各アクションはドメインオブジェクトとしても機能するため、Struts2は常にリクエストごとにアクションの新しいインスタンスを作成し、それを値スタックに配置します。

上記の場合、スコープはsingletonであり、これが問題の原因でした。これは、両方のユーザーが同じアクションオブジェクトを持っているためです。設定により、問題が解決されsingleton scopeました。scope=prototype

詳細については、公式プラグインページを参照してください

Struts2-Springプラグイン

于 2011-12-08T15:08:48.323 に答える