- PR -

JSP、サーブレットで利用するbeanのmapについて

1
投稿者投稿内容
エイチャン
会議室デビュー日: 2004/04/12
投稿数: 3
投稿日時: 2004-04-12 13:02
JSP、サーブレットから利用するbeanのクラス変数にHashMapを利用したいと考えています。

サーブレットのクラス変数で、HashMapを利用する場合、同期処理のためにsynchronizedする必要があることは分かるのですが、beanのクラス変数で利用する場合はどうなのでしょうか?

サーブレットと同様、synchronizedする必要があるのでしょうか?
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-04-12 14:44
こんにちわ。

何のためにHashMapを使うのかで違ってくると
思うんですど、何にそのオブジェクトを使うのでしょ?
というかbeanか。beanはどういう動きを想定してるんでしょ?

例えば、beanがrequestなどに格納されるような
ケースだと同期処理は必要ないと思いますが。

sessionに格納されるケースでも個人的にはいらない
ような気もしますが。。
やはり、とりあえすそのbeanとHashMapの役割に
よりますね。
エイチャン
会議室デビュー日: 2004/04/12
投稿数: 3
投稿日時: 2004-04-12 15:18
 回答ありがとうございます。

> 何のためにHashMapを使うのかで違ってくると
> 思うんですど、何にそのオブジェクトを使うのでしょ?

 説明足らずで、申し訳ありません。
 現在帳票をフォルダ別に保管して、閲覧するシステムを構築中です。
 このフォルダ情報はデータベースに格納してあるのですが、ユーザがアクセ
 ス可能なフォルダを、セッションbean内のHashMapへ保管しようと考えてい
 ます。

 セッションbeanへの保管はサーブレットを利用する予定です。

 サーブレットがマルチスレッドで動作しているため、そこで利用するbeanの
 HashMapがサーブレットのクラス変数と同じように共有されることがないか
 を確認したく、今回の質問をさせていただきました。

 初歩的な質問で申し訳ありませんが、よろしくお願いします。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-04-13 10:05
こんにちわ。

なるほど。

SessionBeanはステートレスの場合はインスタンスは
毎回生成されると思うので排他制御は大丈夫では
ないでしょうか。
ステートフルでもスコープはsessionなのでこちらも
大丈夫ではないでしょうか。

servletはsession関係なく不特定多数のユーザが
同一インスタンスにアクセスできることが問題
ですので。

表面的なことしか見えませんが、その範囲では
こんな感じです。

ただ、念を押したいのなら、Hastableにしても
問題ないのではないかなぁと思います。
性能的にもそれほど変わるわけではないでしょうし。

[ メッセージ編集済み 編集者: (株)ぽち 編集日時 2004-04-13 10:05 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-04-13 12:11
引用:

エイチャンさんの書き込み (2004-04-12 15:18) より:
 サーブレットがマルチスレッドで動作しているため、そこで利用するbeanの
 HashMapがサーブレットのクラス変数と同じように共有されることがないか
 を確認したく、今回の質問をさせていただきました。


「クラス変数」をどのような意味で使っていますか? 通常「クラス変数」というとstatic
フィールドを指すと思いますが、インスタンス変数の意味で使っておられるように思います。
ぽちさんもその解釈で回答されているようですが。

引用:

(株)ぽちさんの書き込み (2004-04-13 10:05) より:
SessionBeanはステートレスの場合はインスタンスは
毎回生成されると思うので排他制御は大丈夫では
ないでしょうか。


通常はインスタンスプーリングされて使いまわされます。ただし同時に複数のスレッドからの
アクセスはされないようにコンテナがメソッド呼び出しをディスパッチします。

引用:

ステートフルでもスコープはsessionなのでこちらも
大丈夫ではないでしょうか。


ステートフルの場合はセッション単位で同時に呼び出さないようにすれば大丈夫ですね。
そもそも同時に呼び出したら例外が発生すると思いますが。

引用:

ただ、念を押したいのなら、Hastableにしても
問題ないのではないかなぁと思います。


排他制御が必要ならそもそもHastableによる排他制御では不十分なので、きちんと作りこむ
べきでしょう。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-04-13 12:52
色々補助ありがとうございます。

一点だけ。

引用:

「クラス変数」をどのような意味で使っていますか? 通常「クラス変数」というとstatic
フィールドを指すと思いますが、インスタンス変数の意味で使っておられるように思います。
ぽちさんもその解釈で回答されているようですが。



あまり深く考えてなかった、というか通常よくある
質問ということからですが。。

まさにインスタンス変数という捉えかたで回答していました。。
エイチャン
会議室デビュー日: 2004/04/12
投稿数: 3
投稿日時: 2004-04-15 00:00
すみません。

誤解を生む書き方をしてしまい申し訳ありません。
クラス変数ですが、インスタンス変数のことでした。

どうもありがとうございました。
1

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