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