私はSpring 3を使用しています。コントローラが要求を取得すると、サービスBeanで@Async
というアノテーションが付けられたメソッドsomeMethod()
に制御が渡されて戻ります。私はsomeMethod()
のHttpSessionオブジェクトにアクセスすると、私はこの例外を受け取る最初に受信したスレッドの外部でHttpSessionにアクセスする
java.lang.IllegalStateException: No thread-bound request found: Are you
referring to request attributes outside of an actual web request, or
processing a request outside of the originally receiving thread? If you are
actually operating within a web request and still receive this message, your
code is probably running outside of DispatcherServlet/DispatcherPortlet: In
this case, use RequestContextListener or
RequestContextFilter to expose the current request.
どのように私はこの問題を解決することができますか?
あなたのソリューションはシンプルで良いですが、コントローラレイヤだけでなくビジネスレイヤやデータレイヤでも必要な場合は、どこにユーザー固有のデータを保存できますか?あるいは、これらのデータをメソッド引数で渡す必要がありますか?後者は唯一の解決策ですか? –
@OleksandrBondarenko:考えてみましょう。サービス層のセッションにアクセスすると、隠れた結合と非明示的な依存関係が導入されます。引数を介してこのデータをすべて渡すことは、おそらく最良の選択肢です。 –
しかし、セッションの設定はどうですか?リクエストの外でHttpSessionにアクセスできるというあなたのアサーションをバックアップするためのドキュメントがありますか? – mjaggard