[Seasar-user:7099] Re: [S2Dao] SMART Deployで複数DBへ接続

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 4月 6日 (金) 22:00:26 JST


小林 (koichik) です.

Date:    Fri, 06 Apr 2007 20:27:06 +0900
From:    松崎 学 <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:7093] [S2Dao] SMART Deployで複数DBへ接続

> 上記の質問でひがさんが
> > rootpackage.dao2.HogeDao2
> > に置くようにし、Dao2CreatorとDao2用のCustomizerを追加すると
> > SMART deploy的にはうまくいくはずです。
> と回答されていますが、どなたか具体的なdiconファイルの書き方を
> 教えていただけないでしょうか?

Seasar2.4.9 からは Customizer に ClassPattern を
使うことができます (S2.3 の AutoRegister で
使ってたものと同じです).
ClassPattern を使えば,Dao2Creator などを作らなくても
customizer.dicon で

<component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addCustomizer">
    <component class="org.seasar.framework.container.customizer.AspectCustomizer">
      <property name="interceptorName">"dao1.interceptor"</property>
      <initMethod name="addClassPattern">
        <arg>"xxx.dao"</arg>
        <arg>".*Dao"</arg>
      </initMethod>
    </component>
    <component class="org.seasar.framework.container.customizer.AspectCustomizer">
      <property name="interceptorName">"dao2.interceptor"</property>
      <initMethod name="addClassPattern">
        <arg>"xxx.dao.yyy"</arg>
        <arg>".*Dao"</arg>
      </initMethod>
    </component>
  </initMethod>
</component>

のようにすればいいんじゃないかと思います.
daoCustomizer (CustomizerChain) の最初の Customizer は
Dao のパッケージが xxx.dao の場合に dao1.interceptor を
適用し,2 番目の Customizer は Dao のパッケージが
xxx.dao.yyy の場合に dao2.interceptor を適用します.

なので,2 番目のデータソースを使用する Dao の
パッケージは xxx.dao.yyy のようにします.
xxx はルートパッケージ名です.

dicon については,j2ee.dicon には手を加えず,
jdbc.dicon をコピーして jdbc1.dicon および
jdbc2.dicon を作成し,それぞれの名前空間を
jdbc1 および jdbc2 に,接続情報を適切に変更します.
そして jdbc.dicon はこれらをインクルードするだけに
します.

dao.dicon をコピーして dao1.dicon および
dao2.dicon を作成し,それぞれの名前空間を
dao1 および dao2 に変更します.
dao2.dicon では j2ee.dicon より前に jdbc2.dicon を
インクルードします.

<components namespace="dao2">
  <include path="jdbc2.dicon"/>
  <include path="j2ee.dicon"/>

これで dao2.interceptor は jdbc2.dicon に
定義されたデータソースを使用することになります.
# もし j2ee.dicon をインクルードしなくても問題
# なければインクルードしない方が無難です.

そして dao.dicon は dao1.dicon および dao2.dicon を
インクルードするだけにします.


実際に確認してないのでアレですが,おおよそ
こんな感じで複数のデータソースを扱えるかと
思います.


> S2DaoのFAQにも追記していただけるとありがたいです。

FAQ (Wiki) は誰でも編集できるので,うまく確認ができたら
掲載していただけるとありがたいです.m(__)m


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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