[Seasar-user:8246] Re: 複数データソースの設定

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 6月 12日 (火) 16:00:34 JST


小林 (koichik) です.

Date:    Tue, 12 Jun 2007 10:38:09 +0900
From:    r.m <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:8232] Re: 複数データソースの設定

> [ESSR0059]クラス(org.seasar.dao.impl.BeanMetaDataFactoryImpl)のプロパティ(dataSource)の設定に失敗しました。理由はorg.seasar.framework.container.TooManyRegistrationRuntimeException:

ということなので,BeanMetaDataFactoryImpl の
設定の問題ですね.
BeanMetaDataFactoryImpl は [Seasar-user:8228] の
pre.dicon で設定されてますが,

        <component name="interceptorA"
                class="org.seasar.dao.interceptors.S2DaoInterceptor">
            <arg>
                <component class="org.seasar.dao.impl.DaoMetaDataFactoryImpl">
                    <arg>dataSourceA</arg>
                    <arg>statementFactory</arg>
                    <arg>resultSetFactory</arg>
                </component>
            </arg>
        </component>

コンストラクタ・インジェクションで設定しても
プロパティの自動インジェクションが行われてしまうので,

        <component name="interceptorA"
                class="org.seasar.dao.interceptors.S2DaoInterceptor">
            <arg>
                <component class="org.seasar.dao.impl.DaoMetaDataFactoryImpl">
                    <property name="dataSource">dataSourceA</property>
                    <property name="statementFactory">statementFactory</property>
                    <property name="resultSetFactory">resultSetFactory</property>
                </component>
            </arg>
        </component>

のようにしてください.
interceptorB も同様です.


それより,コネクションプールの設定を二つの
dicon ファイルに分割する方がオススメです.

まずは元の (S2.4 に含まれている) jdbc.dicon を
コピーして jdbc_a.dicon と jdbc_b.dicon を
作成し,それぞれの接続情報を適切に設定します.
jdbc_a.dicon の名前空間を jdbcA に変更します.

<components namespace="jdbcA">
  ...
</components>

となります.
jdbc_b.dicon の名前空間は jdbcB に変更します.

jdbc.dicon は jdbc_a.dicon と jdbc_b.dicon を
インクルードするだけにします.

同様に元の (S2Dao に含まれている) dao.dicon を
コピーして dao_a.dicon と dao_b.dicon を
作成します.
dao_a.dicon は j2ee.dicon の代わりに jdbc_a.dicon を
インクルードし,名前空間は daoA に変更します.

<components namespace="daoA">
  <include path="jdbc_a.dicon"
  ...
</components>

となります.
dao_b.dicon は j2ee.dicon の代わりに jdbc_b.dicon を
インクルードし,名前空間は daoB に変更します.

pre.dicon は dao_a.dicon と dao_b.dicon を
インクルードするだけにします.

app_dao.dicon は次のようになります.

        <component name="DaoA" class="hogeA">
            <aspect>daoA.interceptor</aspect>
        </component>
         <component name="DaoB" class="hogeB">
            <aspect>daoB.interceptor</aspect>
        </component>

動作確認していませんが,こんな感じでできると
思います.


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




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