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

江川直峰 [E-MAIL ADDRESS DELETED]
2010年 6月 18日 (金) 15:35:52 JST


江川です。

(2010/06/18 15:00), Koichi Kobayashi wrote:
> 小林 (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〜
> となっているのではないでしょうか.

 そうですね。型のマッチングは componentDef=TooManyRegistration〜 で戻っ
てきて false になり、次の名前のマッチングに入ってます。

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

 はい。

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

 ですね。

 試していませんが、1つのリクエストで親と子を両方 DI しようとしたらやは
り同じ問題に遭遇するのでしょうか。(そんなときは DI しようとしているほう
を直せば良いのですが)

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

 そこまでの改造となると、安定版にはそぐわない感じですね。

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

 了解しました。

 ありがとうございました。



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