- PR -

[JSP] カスタムタグのreleaseが呼出されない

1
投稿者投稿内容
Zero
常連さん
会議室デビュー日: 2003/06/19
投稿数: 35
投稿日時: 2005-04-18 14:34
おせわになります.

Tomcat5.5 + Struts1.1でカスタムタグを作成しているのですが、
BodyTagSupportを継承し、releaseをオーバーライトしているのですが、
releaseが呼出されません.

どのようなことが原因と考えられるのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-04-18 15:00
tag のインスタンスがキャッシュされ、再利用されるためではないでしょうか。
Web アプリケーションをアンデプロイするタイミングなどで呼び出されませんか?
Zero
常連さん
会議室デビュー日: 2003/06/19
投稿数: 35
投稿日時: 2005-04-18 15:05
引用:

インギさんの書き込み (2005-04-18 15:00) より:
tag のインスタンスがキャッシュされ、再利用されるためではないでしょうか。
Web アプリケーションをアンデプロイするタイミングなどで呼び出されませんか?



はい、Tomcatを停止する際に呼出されます.
内部で、DBの接続先を切り替えたり、プールしたりしているので、
Jsp表示毎にreleaseを呼出したいのですが、TagのInstanceがCashされない方法は
有るのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-04-18 15:32
>Jsp表示毎にreleaseを呼出したいのですが、TagのInstanceがCashされない方法は
#関係ないですが cash ではなくて cache ですね
毎回別々に行いたい処理については release() ではなく doStartTag などに実装すべきではないでしょうか。
また、別のアプローチとしては SimpleTag を使う方法もあります。こちらはインスタンスが再利用されずに確実に毎回生成されると思います。私は試したことはありませんが・・。
http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/jsp/tagext/SimpleTag.html

JSP や Taglib の基本的なことについてはまず参考書を頼りに勉強してはいかがでしょう。いい本が出ています。
http://www.amazon.co.jp/exec/obidos/ASIN/4774122912/250-3689772-9524254
みやも
ベテラン
会議室デビュー日: 2002/04/22
投稿数: 74
投稿日時: 2005-04-18 20:58
同じ問題ではまったことがありました。
release()はタグ毎に呼ばれるものではないみたいなので、
「タグの中で自分でrelease()を呼ぶ」ようにした記憶があります。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3163&forum=12
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2005-05-17 00:02
お世話になります。
ちょうど、今この内容ではまっておりました。

tomcat の場合、タグに指定された属性種類ごとにタグのインスタンスをプーリング
しています。したがって、同じ属性を指定している限り「必ず」上書きされるはず
なので、release() が呼び出されなくても問題にはならないはずです。

ところがタグの内部処理として、JSP 上で指定されていない属性に値をセットした
場合、再度同じ属性の並びで定義したタグを実行する際、上記のプールから取得
されるため、セットしなかった属性の前回値が利用されてしまうことになります。

そういうことか、と思いました。
確かにどこかで、タグの setter を内部から呼ぶな、と書いてあった気がします。
1

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