[Seasar-user:13641] Re: Teeda のDaoクラスのDIについて

小川昌幸 [E-MAIL ADDRESS DELETED]
2008年 4月 8日 (火) 18:54:30 JST


小林様

ありがとうございました。
無事解決したうえ、理解が深まりました。

やはり、青本のdicon部分を読み直しが必要だと感じました。

08/04/08 に Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> さんは書きました:
>
> 小林 (koichik) です.
>
> Date:    Tue, 8 Apr 2008 16:54:09 +0900
>
> From:    "小川昌幸" <[E-MAIL ADDRESS DELETED]>
>
> To:      [E-MAIL ADDRESS DELETED]
>
> Subject: [Seasar-user:13638] Re: Teeda のDaoクラスのDIについて
>
>
> > いろいろ試したのですが、DaoをDIするのに
> > ReceptionDao receptiondao = (ReceptionDao)
> > SingletonS2Container.getComponent("receptionDao");
> > でdaoをDIする事は出来ました。
>
>
> この場合は DI 「される」とは呼ばなくて,
> ルックアップ「する」などと表したりします.
>
> ともあれ (JW),コンポーネントのスコープの問題ですね.
>
> Seasar2 では,あるコンテナ (dicon) に登録されている
> コンポーネントからは,同じコンテナに登録されている
> コンポーネントと,インクルードされているコンテナに
> コンポーネントを参照することはできます (DI される) が,
> 親のコンテナやその他のコンテナに登録されている
> コンポーネントは参照できません (DI されない).
>
> 以下の図を参照していただくと分かりやすいかと.
>
>
> http://s2container.seasar.org/2.4/s2-framework/ja/apidocs/org/seasar/framework/container/S2Container.html
>
> そして Seasar2.4 の SMART deploy で自動登録される
> コンポーネント (Dao を含む) は,ルートのコンテナ
> (app.dicon) に登録されます.
>
> そのため,app.dicon に自動登録されるコンポーネントから
> 他の dicon に登録されているコンポーネントを参照することは
> できます (DI される) が,他の dicon に登録されている
> コンポーネントから自動登録されるコンポーネントを
> 参照することはできません (DI されない).
>
> > quartzの設定はcustomizer.diconに定義
> > ↓↓↓↓↓↓↓
> (略)
>
> >   <component class="system.web.mail.MailService" name="counterService"
> />
>
>
> よって,上記の MailService から自動登録される
> Dao を参照することはできません (DI されない).
>
> S2Quartz が Seasar2.4 に対応していれば,
>
>
>           <property name="component">counterService</property>
>
> ではなく
>           <property name="componentName">"counterService"</property>
>
> のようにり,この counterService (MailService) も
> SMART deploy で自動登録されたものを (S2Quartz が)
> 参照するようになるべきなのですが,S2Quartz が
> 古いのでしょうがないですね.
>
> この場合,MailService は SMART deploy の
> 対象ではなく,HOT deploy も使えないので,
>
>
>     private MailmagainfDao mailmagadao;
>     private CustmmstDao custmmstdao;
>
>
> この二つの Dao も MailService と同じ dicon に
> 登録してしまう方が無難かも.
>
> <component class="...MailmagainfDao">
>
>   <aspect>dao.interceptor</aspect>
> </component>
>
> <component class="...CustmmstDao">
>
>   <aspect>dao.interceptor</aspect>
> </component>
>
>
> そうすれば DI されるようになります.
>
> ちなみに,Scheduler 等も含めて MailService 絡みの設定は
> customizer.dicon ではなく,mailservice.dicon など
> 別の dicon に定義した方がいいでしょう.
> customizer.dicon は SMART deploy の xxxCustomizer を
> 定義するための dicon ファイルなので.
>
>
>
> --
>
> <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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20080408/975d0111/attachment-0001.html 


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