- - PR -
RequestDispatcher#forwardの実装について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-11 19:19
表題の件について質問があります。
製品によって実装は異なるのかもしれませんが、 RequestDispatcher#forwardメソッドを呼び出された場合、forward先の処理を行っているスレッドと呼び出し元のスレッドは別のものなのでしょうか? だれかご存知の方がおられれば、教えていただけないでしょうか。 よろしくお願いします。 | ||||||||
|
投稿日時: 2007-09-12 03:03
特殊なことをやらない限り、リクエストが同じになるので、
forwardは基本的に同じスレッドになるはずです。 | ||||||||
|
投稿日時: 2007-09-12 18:26
かつのりさん、解答ありがとうございます。
J2EEの仕様を見てみると、明記はされていないように思います。 (私は調べ方が甘いだけかもしれませんが。。。) リクエストを「委任」するという言葉があるのですが、それがどのような意味を指すのでしょうか。。。 共通ライブラリ的なものを作成しているため、ミドルウェアが変わっても、スレッドが別であることを保障したいため、多くの方の意見をいただければ助かります。 皆さんよろしくお願い致します。 | ||||||||
|
投稿日時: 2007-09-12 21:56
さすがにそこまで詳細な実装までは明記されないと思います。
ん?スレッドは同じだと思いますよ。 標準なフレームワークにも同一スレッドを前提とするものがあるので、 実装が異なるWebコンテナがあったとしても、むしろWebコンテナ側が 修正することになると思います。 例えば、JSFのFacesContextは仕様的にThreadLocalに格納されるため forward()時にスレッドをまたぐとJSPのレンダリングで破綻しますが、 SunのRIもMyFacesもその辺りの対策は行われていません。 | ||||||||
|
投稿日時: 2007-09-12 22:08
原文を読んでないから確かなことは言えませんが、単にオブジェクト指向での委譲と同じ意味で使っている気がしますね。 単に、「そっちで処理してよ」って受け渡す程度の意味ではないかと。 | ||||||||
|
投稿日時: 2007-09-12 22:31
スレッドが別になると動かないフレームワークの類は多々ありますので、
こだわる必要はないかなと思います。 気合で対策されたところで、他のフレームワークが動かなければ、 結果としてシステムとして正しく動作しないですよね。 この辺はサーブレットコンテナの行儀の問題だと思います。 要件からするとThreadLocalにオブジェクトを保存しているということでしょうか。 スレッドが変わっても動作を保障するなら、 ThreadLocalを使わない方法を模索してみてはいかがでしょうか。 | ||||||||
|
投稿日時: 2007-09-13 16:26
皆さん、ご解答ありがとうございます。
その通りです。 既にこのライブラリを利用したアプリケーションを開発はじめており、現状はこの仕様のまま進めたいと思っています。
この言葉は何よりの解答です。 今回作成しているライブラリも、「スレッドは同じである」ことを前提に作成することにします。 ご意見ありがとうございました。 とても助かりました。 |
1