- PR -

struts2でservletのように常駐するオブジェクトを作成したい。

1
投稿者投稿内容
しろうさ
会議室デビュー日: 2006/07/13
投稿数: 4
投稿日時: 2008-07-09 03:16
お世話になります。

サーバーサイドJavaのフレームワークstruts2を用いてアプリケーション構築をしているのですが、servletの時にできた常駐するタイプの(解放されない)オブジェクトを作成する方法がどうしても分からずに困っています。

今回、2つほどどうしても常駐させたい理由がありまして、
アプリケーションで疑似乱数オブジェクトを使用して、初回アクセス時に乱数seedを初期化して、あとはそこから値を取得することによって十分複雑な乱数を取得したいことと、
初期化に時間が掛かるオブジェクトを毎回作成して無駄な時間を使いたくない理由です。

struts2のドキュメントを読んでいるのですがそれらしいメソッドが中々見つかりません。
分かる方がいらっしゃいましたらご教授お願いいたします。

環境はIDEがEclipse、
アプリケーションサーバーがTomcat5.5、
struts2.0です。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2008-07-09 09:01
 値は共有してよいんですよね?
そうであればクラス変数にでも値を格納しておけばよいだけでは?
しろうさ
会議室デビュー日: 2006/07/13
投稿数: 4
投稿日時: 2008-07-09 23:23
ありがとうございます。
クラス変数に動的な値を入れることを普段はしないので、忘れていました(汗

でも、あまりスマートな方法じゃないですよね。
メソッドにkeyを入れると、全てのクラスから同じオブジェクトを参照できるような方法が一番良いのですが、どなたか分からないでしょうか?
とりあえず、自分でも調べたいと思います。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-07-09 23:47
ServletContextは?

引用:

でも、あまりスマートな方法じゃないですよね。
メソッドにkeyを入れると、全てのクラスから同じオブジェクトを参照できるような方法が一番良いのですが、どなたか分からないでしょうか?


要件だけ聞くと、どっかのクラスのstatic変数に、
HashMapのインスタンスを持たせるだけでも十分かと思いますけどね。
なぜスマートではないのでしょう?
引用:

struts2のドキュメントを読んでいるのですがそれらしいメソッドが中々見つかりません。
分かる方がいらっしゃいましたらご教授お願いいたします。


Struts2とはレイヤの全く違う話なので、
そもそもStruts2でピンポイントな機能はないでしょう。
しろうさ
会議室デビュー日: 2006/07/13
投稿数: 4
投稿日時: 2008-07-10 02:39
解決
ありがとうございます。
根本的に探すところを間違えていたんですね(汗
どうも、Struts2を勉強し始めてからservletでの考え方をいろいろ変えさせられてたので、気にも止めていませんでした。

ActionContext ac = ActionContext.getContext();
ServletContext sc = (ServletContext) ac.get(StrutsStatics.SERVLET_CONTEXT);
のコードでServletContextを取得し、setAttributeでアプリケーション全体で一つのオブジェクトを共有できました。

ここからはあくまで追記ですが、
私は普段static変数は定数以外使わないように設計しているので、動的な値をstaticに入れることに違和感を感じます。
なので、スマートじゃないと感じました。
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2008-07-10 10:51
シングルトンパターンを勉強してみては?
しろうさ
会議室デビュー日: 2006/07/13
投稿数: 4
投稿日時: 2008-07-12 21:36
あれから、いろいろとデザインパターンを勉強してみました。
いくつかは知っていましたが、シングルトンパターンなど知らないのもいくつかあり、勉強になりました。
返答を頂いた皆様方には感謝いたします。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)