[Seasar-user:19872] Re: COOL DEPLOYで親子関係にあるクラスの親が DI されないパターン?

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2010年 6月 18日 (金) 15:00:42 JST


小林 (koichik) です.

Date:    Fri, 18 Jun 2010 14:06:38 +0900
From:    江川直峰 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:19871] COOL DEPLOYで親子関係にあるクラスの親が DI されないパターン?

> s2-framework-2.4.41 と s2jdbc-gen-2.4.41 の組み合わせで、COOL DEPLOY 動
> 作時に、親子関係にある Service クラスが DI されない問題に遭遇しています。
(略)
> ・Service クラス
> service.hoge.ParentService(genで生成されたもの)
> service.hoge.ChildService(ParentServiceを継承)

その場合はそれぞれ,hoge_parentService,
hoge_childService という名前で自動登録
されるので (名前もログに出力されます),

> DI 変数の変数名を parentService から hoge_parentService に変
> 更すると問題なく DI されます。

が正しいです.

プロパティ名が parentService だと,
登録されている名前とマッチしないために
型で DI しようとして TooManyRegistration〜
となっているのではないでしょうか.

おそらく HOT では動いているのに COOL で
動かないことが問題ということですよね?

HOT の場合は親子とも事前には登録されず,
リクエストされた際に型から ParentService 
だけが自動登録されるので,TooManyRegistration〜
は発生しません.そのために動いてしまいます.

できるだけ HOT と COOL の挙動の違いを
なくそうと修正を重ねてきましたが,このケースは
HOT の時に毎回クラスを全てスキャンしないと
解消できないので,対応する予定はありません.

なので,

> 回避策として、親を抽象クラスにする、または、親をサブパッケージに置かな
> い、など、いくつか手がありますので、現状としては困っていません。

ということでお願いします.


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