[Seasar-user:7840] Re: jsp:includeとHotDeploy (was [S2Struts]ActionFormがHotDeployされない)
ysmt
[E-MAIL ADDRESS DELETED]
2007年 5月 26日 (土) 05:15:53 JST
岩崎です。
お世話になります。
表記の件、現象の再現条件と原因/対策が分かりました。
内容の報告と、それに伴う質問をさせていただきます。
【再現条件】
<jsp:include>アクションのinclude側jspファイルで
ActionFormを使用していて、includeファイルが呼び出されると、
それ以降、そのActionFormはHotDeployが一切効かなくなる。
(最初にincludeでないjspファイルでHotDeployが効いていても、
includeファイルが呼び出されるとincludeでないjspでも効かなくなる)
【原因/対策】
※原因は私の推測です※
include側jspファイルは、呼び出し元から
org.apache.jasper.runtime.JspRuntimeLibrary.include
で呼び出されているため、
web.xmlに指定されているデフォルトのフィルタ条件
<filter-mapping>
<filter-name>hotdeployfilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
ではフィルタされない。
(=include側jsp用のrequestに対するHotクラスローダーは作成されない)
フィルタのターゲットに「INCLUDE」を追加することで、
現象が発生したのと同条件でもHotDeployが効くようになった。
<filter-mapping>
<filter-name>hotdeployfilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
【質問】
01.
上記の「原因」は、正しいでしょうか?
02.
「再現条件」の現象が発生する理由について、
以下のような理解で正しいでしょうか?
includeファイルでActionFormが呼び出された時、
そのActionFormはコンテキストクラスローダーにロードされる。
→ Hotクラスローダーが作成されないため。
よって、その後Hotクラスローダーにはロードされない。
→ Hot以外のクラスローダーにロード済のクラスは
Hotクラスローダーにロードされないため。
現象確認用のプロジェクトを添付しておきます。
(libにはS2Struts-Blank1.3.0 RC-1のlibを入れてください)
お手数ですが、ご教授お願いいたします。
----------------------------------------
On Wed, 23 May 2007 20:11:53 +0900
"[E-MAIL ADDRESS DELETED]" <[E-MAIL ADDRESS DELETED]> wrote:
> 永島さん
>
> ご確認ありがとうございます。
>
> > 私の環境では同様の現象は発生しませんでした。。。
> ですよね。。。
> 設定がおかしくないことは分かりましたのでとりあえず良し?とします。
>
> また状況が変わったら報告します。
>
> ----------------------------------------
> On Wed, 23 May 2007 18:37:31 +0900
> "Katsuhiko Nagashima" <[E-MAIL ADDRESS DELETED]> wrote:
>
> > 永島です。
> >
> > 送付していただいたソースで試したのですが、
> > 私の環境では同様の現象は発生しませんでした。。。
> > 設定におかしい点はないと思います。
> >
> > > Tomcatを再起動すると、ソースに書かれた状態で設定が反映されます。
> > > (ただ、時々反映されず、前のままになることがあります)
> >
> > ここの「ただ、、、」部分が少し気になります。
> > 環境の問題なのでしょうか。。。
> >
> >
> > 07/05/23 に ysmt<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > > 岩崎です。
> > > お世話になります。
> > >
> > > 添付の構成にて確認を行っています。
> > > (libはStruts-Blank1.3.0 RC1をそのまま使用しています)
> > >
> > > 画面左に、Validateを設定した2つのActionFormを設置しています。
> > > ActionFormのValidateを、ソース上で設定したり外したりしていると、
> > > なぜか途中からソースの変更が反映されなくなってしまいます。
> > >
> > > その時々で動作が異なっていて、
> > > 正確な再現条件を出すことができないのですが、
> > > 私の環境では以下のような変更をすると、現象が発生します。
> > > ・LoginFormの2つのプロパティに@Requiredを設定し、
> > > 両方を未入力にしてSubmit
> > > ・両方のプロパティでエラーが出る
> > > ・片方を@Requiredを外し、両方を未入力にしてSubmit
> > > ・@Requiredが残っている方だけエラーが出る
> > > (→この時点でコンソールには@Required設定が変更された状態のログ
> > > DEBUG 2007-05-23 02:27:36,203 [http-8080-Processor25] END org.seasar.struts.hotdeploy.ReloadGetFormInterceptor#invoke([E-MAIL ADDRESS DELETED]) : Form: site_login_loginForm
> > > が表示されている)
> > > ・UserSearchForm(@Requiredを設定)を未入力のままSubmitし、
> > > エラーを表示する。
> > >
> > > これ以降、LoginFormとUserSearchForm、どちらのValidateを変更しても
> > > その変更が反映されなくなります。
> > > (コンソールのログにも設定が変更されないまま出力されます)
> > >
> > > Tomcatを再起動すると、ソースに書かれた状態で設定が反映されます。
> > > (ただ、時々反映されず、前のままになることがあります)
> > >
> > > 現象の発生が不安定なので、
> > > 私の環境に何か問題があるようにも思えるのですが、
> > > 設定面でおかしな箇所がないか、教えていただけないでしょうか。
> > >
> > > 変な質問で済みません。
> > > よろしくお願いいたします。
> > > _______________________________________________
> > > Seasar-user mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> > >
> > >
> >
> >
> > --
> > Katsuhiko Nagashima
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: s2struts-blank-rc1.zip
型: application/x-zip-compressed
サイズ: 52635 バイト
説明: 無し
URL: http://ml.seasar.org/archives/seasar-user/attachments/20070526/bc92d230/attachment.bin
Seasar-user メーリングリストの案内