- PR -

Tomcat4.1.27でJSPからカスタムタグのrelease()メソッドが呼ばれない

1
投稿者投稿内容
masaka
常連さん
会議室デビュー日: 2003/08/04
投稿数: 27
お住まい・勤務地: 東京
投稿日時: 2003-10-17 21:06
下記の環境でWebアプリケーションの開発を行っていて、ちょっと困ったことがおきてしまいました。
Tomcat 4.1.27
Struts 1.1
OS:Solaris 8

Strutsのタグライブラリを拡張した自作のカスタムタグを作ったのですが、これがうまく動かないのです。原因を調べてみたところ、Tomcatが生成したJSP内でカスタムタグ(を実装したクラス)のreleaseメソッドが呼ばれていないことが原因でした。Tomcat4.1.27ではカスタムタグのインスタンスがプールされ、何度も使いまわされているので、releaseメソッドは必ず呼ばれなければいけないと思うのですが、いかがでしょうか?

Tomcat4.0.6でreleaseメソッドが正しく呼ばれることは確認しました。

どなたかこのような現象にあわれた方で、よい回避方などを知っていたら教えてください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-10-17 22:08
これかな?
・[Tag.release() not invoked]
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16001

ちょっと読んだところでは 「doFinally() で初期化すべき」との結論になっているようですね。

[ メッセージ編集済み 編集者: インギ 編集日時 2003-10-17 22:12 ]
masaka
常連さん
会議室デビュー日: 2003/08/04
投稿数: 27
お住まい・勤務地: 東京
投稿日時: 2003-10-20 12:14
引用:

インギさんの書き込み (2003-10-17 22:08) より:

ちょっと読んだところでは 「doFinally() で初期化すべき」との結論になっているようですね。

[ メッセージ編集済み 編集者: インギ 編集日時 2003-10-17 22:12 ]



なるほど。
とはいってもStrutsのタグの方はその仕様に対応できていないようです。(html:textタグをみた限りですが)
それに、仕様がどうこうという以前に、オブジェクトをプールするならプールを行っている側でオブジェクトの初期化(この場合はrelease())をするのは当然のような気がします。

とりあえず、今回の問題は解決できそうなのでいいのですが、次回リリースのTomcatではこの点の改善をぜひお願いしたいところです。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-10-20 12:22
で、Struts 側にはこういう bug が登録されてますね。
・[Bug 23523 Improper use of release() method in <logic:messagesPresent>]
http://issues.apache.org/bugzilla/show_bug.cgi?id=23523
9月30日に open されたばかりの bug で fix されていません。注意が必要ですね。

要約すると 「Tomcat側では毎回 release() を呼ぶことを保証していないのに、Struts の taglib ではそれを期待しているので問題になることがある」、と。
現在の nightly build でも同様の問題は発生するそうです。

私も毎回使い終わったら読んでくれることを期待していました・・・しっかり仕様は確認していないのですが、WebLogic もそういう動作をするようです。
1

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