[Seasar-user:13639] Re: Teeda のDaoクラスのDIについて
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2008年 4月 8日 (火) 17:30:12 JST
小林 (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 メーリングリストの案内