質問: ### 前提・実現したいこと JavaのWebアプリケーションを作成する際に、Controller、Service、Repositoryの3Layerに分割し、各Layerで共通して使用する情報(ユーザ情報等)をThreadLocalに登録して各Layerから使用するといったことを行っています。 ### 発生している問題 WebアプリケーションでThreadLocalを使用した場合、メモリーリークの要因となる為、使用をやめたいと思っています。 各Layerで共通して使用する情報をThreadLocal以外で管理する場合、どのような方法があるかご助言をいただければと思います。 ### 補足情報(言語/FW/ツール等のバージョンなど) 言語:Java FW:Struts2、SpringFramework
回答: **CDI** を使って制御するのが良いのではないでしょうか。 下記リンクの記事に、そのものズバリの記述がありました。 JavaEE使い方メモ(CDI)- Qiita http://qiita.com/opengl-8080/items/431de9175dca33a09ba8#スコープ > > 1回のリクエストの中で共有管理したいデータなどがあった場合、これまでは ThreadLocal などを使ってドキドキしながら管理していたが、 @RequestScoped を使えばそのへんの管理を全て CDI コンテナに任せられるようになる。 > > > CDIを導入しなければならないので面倒かも知れませんが、スコープによってオブジェクトの生存期間を細やかに設定することができ後始末はCDI側がやってくれますので、導入してしまえば楽になると思います。 (と言いつつ私はつかいこなせてはいませんが...)