質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

2回答

2356閲覧

@Webアプリケーションでの共有情報の格納先について

KeiMiya

総合スコア45

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2016/05/20 17:00

編集2016/05/20 17:01

###前提・実現したいこと
JavaのWebアプリケーションを作成する際に、Controller、Service、Repositoryの3Layerに分割し、各Layerで共通して使用する情報(ユーザ情報等)をThreadLocalに登録して各Layerから使用するといったことを行っています。

###発生している問題
WebアプリケーションでThreadLocalを使用した場合、メモリーリークの要因となる為、使用をやめたいと思っています。
各Layerで共通して使用する情報をThreadLocal以外で管理する場合、どのような方法があるかご助言をいただければと思います。

###補足情報(言語/FW/ツール等のバージョンなど)
言語:Java
FW:Struts2、SpringFramework

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

"ユーザー情報"が「ログインしているユーザーの情報」であるなら、SpringMVCならば@Scope("session")でセッション内で共通するBeanとして扱えますので、利用したいクラスにて@Autowiredを宣言するとよいでしょう。

Struts2+Springの組み合わせである場合は、Struts2の標準で提供されるSpringプラグインでもScopeにsessionは定義できませんので、ActionクラスからSpringのbeanへ処理を渡す際に、Struts2のリクエスト情報やセッション情報をSpring側へ渡せば共有ができます。
(ただし標準では…と書いたように、Struts2-Springプラグインを拡張することで実現は可能です)

投稿2016/05/29 03:46

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

CDI を使って制御するのが良いのではないでしょうか。
下記リンクの記事に、そのものズバリの記述がありました。

JavaEE使い方メモ(CDI)- Qiita
http://qiita.com/opengl-8080/items/431de9175dca33a09ba8#スコープ

1回のリクエストの中で共有管理したいデータなどがあった場合、これまでは ThreadLocal などを使ってドキドキしながら管理していたが、 @RequestScoped を使えばそのへんの管理を全て CDI コンテナに任せられるようになる。

CDIを導入しなければならないので面倒かも知れませんが、スコープによってオブジェクトの生存期間を細やかに設定することができ後始末はCDI側がやってくれますので、導入してしまえば楽になると思います。

(と言いつつ私はつかいこなせてはいませんが...)

投稿2016/05/26 14:27

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeiMiya

2016/06/01 15:50

ご回答ありがとうございます。 DIコンテナを使用して、実現するというのは非常に参考になりました。 今回はSpring Frameworkを使用していたので、そちらのDIコンテナを使用して実現しました。一部、AOPで実行するクラスからも共有情報を参照する必要があったので、ApplicationContextをインスタンス変数にDIし、メソッド内でgetBean()で共有情報を管理しているインスタンスを取得することにしました。(getBean()でインスタンスを取得するのに少し、違和感があったのですが、他に思い浮かばず。。。)
argius

2016/06/02 01:41

ご質問が「JavaのWebアプリケーションでの」ということだったので Java EEとしてのCDIと回答してみました。 Spring Frameworkの場合でも当てはまったみたいですね。良かったです。 実装の詳細につきましては、 Spring Frameworkについては詳しくないのでお答えできませんが、 どうしても違和感をぬぐいきれないようでしたら また個別に質問してみても良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問