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

加藤 潤一 [E-MAIL ADDRESS DELETED]
2007年 4月 6日 (金) 23:27:13 JST


小林さん,松崎さん,

加藤です.

以下の設定で複数のデータソースに対応できました.内容的にどうでしょうか?

>小林さん
dao1SupportAspectCustomizerを追加してから,dao2SupportAspectCustomizerを追加すると,hogehoge.dao.dao2.HogeDaoにdao2.interceptor ではなく,dao1.interceptorが割り当てられてしまっている感じで,テーブルが見つからずに例外発生してしまいます.
しかし,逆の順序のdao2SupportAspectCustomizerを追加してから,dao1SupportAspectCustomizerを追加すると,問題ありません.なぜでしょうか?

DEBUG 2007-04-06 23:22:39,581 [main] クラス(jp.co.a2.hsmgr.dao.dao2.EventLogDao[dao2_eventLogDao])のコンポーネント定義を登録します
DEBUG 2007-04-06 23:22:39,777 [main] トランザクションを開始しました
DEBUG 2007-04-06 23:22:39,779 [main] BEGIN jp.co.a2.hsmgr.dao.dao2.EventLogDao#selectAll()
DEBUG 2007-04-06 23:22:39,955 [main] 物理的なコネクションを取得しました
DEBUG 2007-04-06 23:22:39,971 [main] 論理的なコネクションを取得しました
WARN  2007-04-06 23:22:40,088 [main] テーブル(EVENT_LOG)が見つかりません
DEBUG 2007-04-06 23:22:40,106 [main] 論理的なコネクションを閉じました
DEBUG 2007-04-06 23:22:40,114 [main] END jp.co.a2.hsmgr.dao.dao2.EventLogDao#selectAll() Throwable:org.seasar.dao.NoPersistentPropertyTypeRuntimeException: [EDAO0017]SELECT項目がありません
DEBUG 2007-04-06 23:22:40,119 [main] トランザクションをロールバックしました
DEBUG 2007-04-06 23:22:40,153 [main] 物理的なコネクションを閉じました

-- 以下設定 --

パッケージ構成
データソース1のDaoは,hogehoge.dao
(hogehoge.dao.dao1のほうがよいかも)
データソース2のDaoは,hogehoge.dao.dao2

- customizer.dicon
<component name="dao1SupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
        <property name="interceptorName">"dao1.interceptor"</property>
        <initMethod name="addClassPattern">
                <arg>"hogehoge.dao"</arg>
                <arg>".*Dao"</arg>
        </initMethod>
</component>
<component name="dao2SupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
        <property name="interceptorName">"dao2.interceptor"</property>
        <initMethod name="addClassPattern">
                <arg>"hoehoge.dao.dao2"</arg>
                <arg>".*Dao"</arg>
        </initMethod>
</component>
<component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
        <initMethod name="addCustomizer">
                <arg>defaultCustomizer</arg>
        </initMethod>
        <initMethod name="addCustomizer">
                <arg>dao2SupportAspectCustomizer</arg>
        </initMethod>
        <initMethod name="addCustomizer">
                <arg>dao1SupportAspectCustomizer</arg>
        </initMethod>
</component>

- jdbc.dicon
<components>
        <include path="jdbc1.dicon"/>
        <include path="jdbc2.dicon"/>
</components>

- jdbc1.dicon
<components namespace="jdbc1">
...省略...
</components>

- jdbc2.dicon
<components namespace="jdbc1">
...省略...
</components>


- dao.dicon
<components>
        <include path="dao1.dicon"/>
        <include path="dao2.dicon"/>
        <include path="j2ee.dicon"/>
</components>

- dao1.dicon
<components namespace="dao1">
        <include path="jdbc1.dicon"/>
...省略...
</components>

- dao2.dicon
<components namespace="dao2">
        <include path="jdbc2.dicon"/>
...省略...
</components>

> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED]
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Koichi Kobayashi
> Sent: Friday, April 06, 2007 10:00 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:7099] Re: [S2Dao] SMART Deployで複数DBへ接続
>
> 小林 (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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user


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