[Seasar-user:9026] Re: CoolDeploy 時に登録されないコンポーネント

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 7月 9日 (月) 15:30:36 JST


小林 (koichik) です.

Date:    Mon, 09 Jul 2007 12:40:19 +0900
From:    松山 大樹 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:9022] Re: CoolDeploy 時に登録されないコンポーネント

>  現象を再現できる最小限の構成を添付します。お時間のあるときに、確認して
> いただければ助かります。

ConfirmMaintenanceTrainingPage というクラスが
MaintenanceTrainingPage を継承しているのですね.

COOL deploy の場合,名前の順番で先に
ConfirmMaintenanceTrainingPage が自動登録される
場合が多く,MaintenanceTrainingPage を見つけた
時点では既にコンテナに MaintenanceTrainingPage を
キーとするクラスが存在する (S2 では登録した
コンポーネントのクラスの他,そのスーパークラスや
実装するインタフェースもキーとして登録されます) ため,
既に登録済みと判断されてしまいます.

これは,もし SMART deploy を使わず明示的に
ConfirmMaintenanceTrainingPage と
MaintenanceTrainingPage を登録して,
MaintenanceTrainingPage を取得しようとすると,
TooManyRegistration〜 となるケースです.

HOT deploy の場合は,必要になるクラスしか登録
されないため,MaintenanceTrainingPage が要求された
場合に ConfirmMaintenanceTrainingPage が登録されて
いないのでうまく動いてしまいます.
本来 TooMany〜 になるケースが HOT では
ならないというのは以前から把握していたことなのですが,
コンポーネントが要求されてから自動登録するという
メカニズムのため,COOL と同じ振る舞いにするのは
困難です.

なお,WARM では MaintenanceTrainingPage が最初に
要求されるとその時点ではうまく動きますが,
ConfirmMaintenanceTrainingPage が要求された後に
MaintenanceTrainingPage が要求されると今度は
TooMany〜 になってしまいます.


回避策としては,ConfirmMaintenanceTrainingPage が
直接 MaintenanceTrainingPage を継承するのを避けて,
それぞれが共通の抽象クラスを継承するようにしてください.


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