[Seasar-user:18059] Re: 修正したソースが反映されない事例

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 7月 24日 (金) 17:00:03 JST


小林 (koichik) です.

Date:    Fri, 24 Jul 2009 09:39:30 +0900
From:    大上陽一 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:18057] 修正したソースが反映されない事例

> 反映されないソースは共通機能をまとめたクラスで、
> 複数のクラスでインスタンス化されています。

共通機能をまとめたクラスを使用している複数の
クラスの中に,HOT deploy 非対象のクラスが
含まれているのだと思われます.

HOT deploy 非対象のクラスとは,ルートパッケージ
以下にないクラスや,dicon に定義されたクラス,
web.xml に定義された Filter や Listener などです.

HOT deploy 対象クラスが非対象クラスから使用
されると WebappClassLoader にロードされてしまい,
HOT deploy できなくなります.

Seasar2.4.35 以降では,この状態になると

HOT deploy対象クラス(Hoge)が非対象クラスから参照されて通常のクラスローダにロードされています。

という警告が出力されます.

回避策としては [Seasar-user:16915] でも書いたように

http://ml.seasar.org/archives/seasar-user/2009-February/016916.html
------------------------------------------------------------
■ SMART deploy 対象・非対象を明確に分ける

アプリケーション全体を SMART deploy 対象に
するのではなく,その一部だけを SMART deploy
対象にする.
例えばアプリケーション全体のパッケージが

jp.co.xxx.yyyy.〜

である場合,SMART deploy のルートパッケージは

jp.co.xxx.yyyy.smart

のようにする.

その上で,SMART deploy 非対象クラスから
SMART deploy 対象クラスは参照しない.

できれば (IDE における) プロジェクトを別に
してしまい,SMART deploy 非対象プロジェクトは
SMART deploy 対象プロジェクトを参照できなくする.

SMART deploy 非対象となるのは,Servlet や
Filter など Seasar2 で管理されないクラスや,
dicon ファイルに定義されるクラス,および
それらのクラスから参照されるクラスです.

これは HOT deploy で ClassCastException や
LinkageError を避けるために必要です.
------------------------------------------------------------

> 現在の対応としては上記事例が発生したらtomcatを再起動していますので、
> 開発自体は問題なく出来ておりますが原因が不明のため将来何かしら不具合が
> 発生するのではと危惧しています。

COOL deploy で問題になることはありません.


-- 
<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 メーリングリストの案内