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