- - PR -
Strutsタグを用いたページ切換えについて
«前のページへ
1|2|3
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-01-31 10:34
スレッドセーフではないので、複数クライアントからアクセスすると 不正な動作をしますよ。 | ||||
|
投稿日時: 2004-02-19 10:26
毎度お世話になっています。 ちょっと他のことを調べていたのですが気になったので質問させてください。 顔爺さんの以下の記述についてですが、現在Actionクラスにsession属性を持たせています。 スレッドセーフで無いということは、sessionに限らず、属性を持たせるのはまずいということなのでしょうか?個人端末で検証していたので気がつきませんでした。 また何か回避策はありますでしょうか? ご教授よろしくお願いします。 | ||||
|
投稿日時: 2004-02-19 11:55
Action#perform()でHttpSessionを使うのですよね?
引数のHttpServletRequestからgetSession()で毎回引っ張り出すようにすれ ばよいのではないでしょうか?メソッドのローカル変数なら、必ずスレッド セーフです^^; #すみません、ふさわしくない言い回しをしてしまいました。 #メソッドのローカル変数自身は、スレッドごとのフレームスタック内に割り当て #られるので、確かに「必ず」スレッドセーフです。 #ですが、複数のスレッドのコンテキストが、ある時点で同一のsessionに帰属する #requestを処理していた場合は、その複数のスレッドが参照変数を通して参照する #先のsessionオブジェクトは同一であるので、sessionオブジェクトの操作につい #てはスレッドセーフではありませんね。 [ メッセージ編集済み 編集者: シュン 編集日時 2004-02-19 14:10 ] | ||||
|
投稿日時: 2004-02-19 13:28
http://www.jajakarta.org/struts/struts1.1/documentation/ja/target/api/org/apache/struts/action/Action.htm
から引用します。 > コントローラは同時に発生した複数のリクエストに対して同一のインスタンスを共有するため、 > Actionはスレッドセーフであるようにプログラムすべきです。 すなわち次の項目に従って設計すべきです。 > > * リクエストの状態に関連する情報を保持するためにインスタンス変数やスタティック変数を > 使用してはいけません。インスタンス変数やスタティック変数は同一のアクションに関して > リクエストをまたがってグローバルなリソースを共有したい場合に使用します。 > * 他のリソース(JavaBeans、セッション変数等)へのアクセスは、それらが保護を要求する > 場合は同期化しなくてはいけません(しかしながら、一般的にリソースクラスは必要に応じて > 自分自身を保護するように設計すべきです)。 | ||||
«前のページへ
1|2|3
