[Seasar-user:16863] Re: [Teeda]tldファイルの自動読み込みに関する挙動について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 2月 10日 (火) 16:30:49 JST


小林 (koichik) です.

Date:    Tue, 10 Feb 2009 15:51:26 +0900
From:    ohara <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:16860] Re: [Teeda]tldファイルの自動読み込みに関する挙動について

> 確認をしている際、問題に遭遇しました
> HotDeploy且つRenderer内でS2Containerが管理しているオブジェクトを参照するとClassCastExceptionが発生します
> (⇒■Stacktrace参照)
> ちなみにjarファイルの中にtldを配置しても同様です

HOT deploy 非対象のクラスが HOT deploy 対象のクラスを
使用するとよく起きる現象です.

この場合,Renderer が HOT deploy の非対象に
なっていると思います.

対策としては,HOT deploy 非対象クラスからは
HOT deploy 対象クラスを使用しないようにするのが
確実です.
例えば Renderer などは

xxx.jsf.〜


ページクラスなどは

xxx.app.〜

のようにパッケージを上位の方で分けてしまい,
convention.dicon に登録するルートパッケージは
xxx.app にします.

Renderer で使用する Dto 等は

xxx.jsf.dto.〜

のようにします.

xxx.app の方は xxx.jsf に依存しても構いませんが,
xxx.jsf の方は xxx.app に依存しないようにすれば,
今回の問題は回避できると思います.

xxx.jsf.〜 は SMART deploy による自動登録は
行われないので,AutoRegister を使う必要が
あります.


そこまで手を入れられない場合は,Renderer の
static イニシャライザで

static {
  Class clazz = CommonRequestDto.class;
}

のようにして,参照するクラスが通常のクラスローダに
ロードされるようにすれば回避できると思います.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内