- - PR -
JSP、サーブレットで利用するbeanのmapについて
1
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-12 13:02
JSP、サーブレットから利用するbeanのクラス変数にHashMapを利用したいと考えています。
サーブレットのクラス変数で、HashMapを利用する場合、同期処理のためにsynchronizedする必要があることは分かるのですが、beanのクラス変数で利用する場合はどうなのでしょうか? サーブレットと同様、synchronizedする必要があるのでしょうか? | ||||||||||||||||
|
投稿日時: 2004-04-12 14:44
こんにちわ。
何のためにHashMapを使うのかで違ってくると 思うんですど、何にそのオブジェクトを使うのでしょ? というかbeanか。beanはどういう動きを想定してるんでしょ? 例えば、beanがrequestなどに格納されるような ケースだと同期処理は必要ないと思いますが。 sessionに格納されるケースでも個人的にはいらない ような気もしますが。。 やはり、とりあえすそのbeanとHashMapの役割に よりますね。 | ||||||||||||||||
|
投稿日時: 2004-04-12 15:18
回答ありがとうございます。
> 何のためにHashMapを使うのかで違ってくると > 思うんですど、何にそのオブジェクトを使うのでしょ? 説明足らずで、申し訳ありません。 現在帳票をフォルダ別に保管して、閲覧するシステムを構築中です。 このフォルダ情報はデータベースに格納してあるのですが、ユーザがアクセ ス可能なフォルダを、セッションbean内のHashMapへ保管しようと考えてい ます。 セッションbeanへの保管はサーブレットを利用する予定です。 サーブレットがマルチスレッドで動作しているため、そこで利用するbeanの HashMapがサーブレットのクラス変数と同じように共有されることがないか を確認したく、今回の質問をさせていただきました。 初歩的な質問で申し訳ありませんが、よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2004-04-13 10:05
こんにちわ。
なるほど。 SessionBeanはステートレスの場合はインスタンスは 毎回生成されると思うので排他制御は大丈夫では ないでしょうか。 ステートフルでもスコープはsessionなのでこちらも 大丈夫ではないでしょうか。 servletはsession関係なく不特定多数のユーザが 同一インスタンスにアクセスできることが問題 ですので。 表面的なことしか見えませんが、その範囲では こんな感じです。 ただ、念を押したいのなら、Hastableにしても 問題ないのではないかなぁと思います。 性能的にもそれほど変わるわけではないでしょうし。 [ メッセージ編集済み 編集者: (株)ぽち 編集日時 2004-04-13 10:05 ] | ||||||||||||||||
|
投稿日時: 2004-04-13 12:11
「クラス変数」をどのような意味で使っていますか? 通常「クラス変数」というとstatic フィールドを指すと思いますが、インスタンス変数の意味で使っておられるように思います。 ぽちさんもその解釈で回答されているようですが。
通常はインスタンスプーリングされて使いまわされます。ただし同時に複数のスレッドからの アクセスはされないようにコンテナがメソッド呼び出しをディスパッチします。
ステートフルの場合はセッション単位で同時に呼び出さないようにすれば大丈夫ですね。 そもそも同時に呼び出したら例外が発生すると思いますが。
排他制御が必要ならそもそもHastableによる排他制御では不十分なので、きちんと作りこむ べきでしょう。 | ||||||||||||||||
|
投稿日時: 2004-04-13 12:52
色々補助ありがとうございます。
一点だけ。
あまり深く考えてなかった、というか通常よくある 質問ということからですが。。 まさにインスタンス変数という捉えかたで回答していました。。 | ||||||||||||||||
|
投稿日時: 2004-04-15 00:00
すみません。
誤解を生む書き方をしてしまい申し訳ありません。 クラス変数ですが、インスタンス変数のことでした。 どうもありがとうございました。 | ||||||||||||||||
1
