[seasar-dev:415] Re: hotdeployについて
Koichi Kobayashi
koichik @ improvement.jp
2006年 6月 4日 (日) 18:00:33 JST
小林 (koichik) です.
Date: Sun, 04 Jun 2006 16:21:23 +0900
From: arkw <e1.arkw @ gmail.com>
To: seasar-dev @ ml.seasar.org
Subject: [seasar-dev:414] hotdeployについて
> 現象として、
> singletonのコンポーネントが、hotdeploy対象のコンポーネントにAutoBindされ
> ません。
> ・singletonのコンポーネントは、app.diconで、定義しています。
> ・hotdeploy対象のコンポーネントは、Autodeployを使って定義しています。
おそらく,singleton のコンポーネントが hotdeploy 対象となる
ルートパッケージ (s2container.dicon で定義してるもの) の
サブパッケージ以下に存在するものと思われます.
そのため,app.dicon に定義したコンポーネントまで
H★O★T Deploy のように扱われているのだと思います.
> 154 if (container.hasComponentDef(propName)) {
> 155 Object value = container.getComponent(propName);
> 156 if (propType.isInstance(value)) {
> 157 setValue(componentDef, propertyDesc, component, value);
> 158 return true;
> 159 }
> 160 }
>
> この155行目では、ちゃんとコンテナから値を取得しているみたいです。
> この156行目の条件分岐がfalseになってしまいます。
略
> value.getClass()で、取り出せるクラスと、propTypeのクラスが異なるみたいで
> す。
異なったクラスローダーからロードされたクラスは,元になる
class ファイルが同一でも全く別物のクラスとして扱われます.
そのため,それらの間での代入は不可能です.
これを回避するには,H★O★T Deploy 非対象のコンポーネントは,
H★O★T Deploy のルートパッケージ以下に配置しないように
パッケージ構成を変更してください.
同じように dicon に記述してあっても,DataSource などで
問題が起きないのはそれらがルートパッケージ以下にないためです.
プロジェクト標準などでパッケージ構成を自由に変更することが
難しい場合もあるかと思うので,ルートパッケージ以下にあっても
H★O★T Deploy の対象とならないパッケージを指定できるように
した方がいいかもしれませんね.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>koichik @ improvement.jp</e-mail>
</signature>
Seasar-dev メーリングリストの案内