[Seasar-user:4018] Re: 2つのプロジェクト間でのDIが行われない

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2006年 7月 4日 (火) 13:00:26 JST


小林 (koichik) です.

Date:    Tue, 4 Jul 2006 10:11:20 +0900
From:    "吉岡 武志/インフォセンス" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:4016] Re: 2つのプロジェクト間でのDIが行われない

> 違っている
> 気がします。ただ、どこがどう間違っているかが私自身理解ができていませんので
> 以下に、どういったことがやりたいのか簡単に記述させて頂きます。
> 
> ■パッケージ階層
>  [mainProject] -- Mainプロジェクト
>        + jp.co.sample.dao
>            ・JobDao.java
>            ・JobDaoImpl.java
>        + jp.co.sample.dbaccess
>            ・CountryDao.java
>        + jp.co.sample.service
>            ・JobService.java
>            ・JobServiceImpl.java
>        + jp.co.sample.dicon
>            ・実装用のdiconファイル(main.dicon)

JobServiceImpl はどの dicon で登録していますか?
もし main.dicon で登録していると,main 側の JobDaoImpl が
DI されてしまいます.
main.dicon に登録されているコンポーネントからは test.dicon に
登録されているコンポーネントは見えないからです.
# test.dicon 側からは main.dicon 側が見えます.

> ・JobServiceImplに対してMockJobDaoImplをDIさせたいです。

これを実現するには,JobServiceImpl を登録している dicon から
MockJobDaoImpl が見える必要があります.

> 上記の内容を実現するためにtest.diconをどう最適に定義すればよいかで悩んでい
> る次第です。

手っ取り早い方法は test.dicon に JobServiceImpl を登録することです.
その JobServiceImpl には MockJobDaoImpl が DI され,JobServiceTestCase
にはその (MockJobDaoImpl が DI された) JobServiceImpl が DI されます.


あるいは,test.dicon から main.dicon をインクルードするのではなく,
main.dicon から Dao の定義を allDao.dicon として分離し,それを
main.dicon からインクルードするようにするようにします.

[main.dicon]
<components>
  <include path="allDao.dicon"/>
  ・・・
</components>

そして mainProject の allDao.dicon には main 側の Dao を登録します.

同じように testProject にも allDao.dicon を作成し,そこでは test 用の
Dao (Mock) を登録します.
CountryDao など,main 側の Dao も必要なものはこちらにも登録します.

そして JobServiceTestCase は main.dicon をインクルードします.
main.dicon は mainProject にあるものが使われますが,それが
allDao.dicon をインクルードしようとすると,クラスパスで先に見つかる
allDao.dicon がインクルードされます.

testProject のクラスパスが mainProject を先に見に行くように
なっていなければ,testProject の allDao.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 メーリングリストの案内