[Seasar-user:19392] Re: dataSourceNameはnullあるいは空であってはいけません
吉村 実
[E-MAIL ADDRESS DELETED]
2010年 2月 26日 (金) 19:33:29 JST
小林さま
ご回答ありがとうございます。
頂いたご回答と少しずれてしまうのですが、
以下のような設定ファイルで、
動的にA_DBとHoge_DBにアクセスするようにしたいのですが、
変更前は常にA_DBにアクセスしにいき、
dataSourceの引数connectionPoolを変更する(その他の変更なし)と常にHoge_DBに
アクセスしにいく状況です。
また、dao_xx.diconの方は「<arg>daoMetaDataFactory</arg>」を
「<arg>daoMetaDataFactoryForHoge</arg>」に変更するなどしても
常にA_DBにアクセスしにいきます。
初歩的な質問かもしれませんが、
ご教授のほどお願いいたします。
情報量が足りないかもしれませんので、他に必要な情報があるようでしたら
ご指摘お願いいたします。
「dao_xx.dicon」
****************************************************************************
************************
<!-- A_DB用 -->
<component
name="daoMetaDataFactory"
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl">
<arg>jdbc.dataSource</arg>
<arg>
<component
class="org.seasar.dao.pager.PagerStatementFactory"/>
</arg>
<arg>resultSetFactory</arg>
<arg>annotationReaderFactory</arg>
<property
name="statementFactory">statementFactory</property>
</component>
<component name="interceptor"
class="org.seasar.dao.pager.PagerS2DaoInterceptorWrapper">
<arg>
<component name="s2dao"
class="org.seasar.dao.interceptors.S2DaoInterceptor">
<arg>daoMetaDataFactory</arg>
</component>
</arg>
</component>
<!-- Hoge_DB用 -->
<component
name="daoMetaDataFactoryForHoge"
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl">
<arg>jdbc.dataSourceForHoge</arg>
<arg>
<component
class="org.seasar.dao.pager.PagerStatementFactory"/>
</arg>
<arg>resultSetFactory</arg>
<arg>annotationReaderFactory</arg>
<property
name="statementFactory">statementFactoryForHoge</property>
</component>
<component name="interceptorForHoge"
class="org.seasar.dao.pager.PagerS2DaoInterceptorWrapper">
<arg>
<component name="s2dao"
class="org.seasar.dao.interceptors.S2DaoInterceptor">
<arg>daoMetaDataFactoryForHoge</arg>
</component>
</arg>
</component>
****************************************************************************
************************
「jdbc.dicon」
****************************************************************************
************************
<!-- A_DB用 -->
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"oracle.jdbc.OracleDriver"
</property>
<property name="URL">
"jdbc:oracle:oci:@db"
</property>
<property name="user">"userA"</property>
<property name="password">"passwordA"</property>
</component>
<component name="statementFactory"
class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
<!-- Hoge_DB用 -->
<component name="xaDataSourceForHoge"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"oracle.jdbc.OracleDriver"
</property>
<property name="URL">
"jdbc:oracle:oci:@db"
</property>
<property name="user">"userB"</property>
<property name="password">"passwordB"</property>
</component>
<component name="statementFactoryForHoge"
class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
<!-- A_DB用 -->
<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<property name="XADataSource">xaDataSource</property>
<property name="allowLocalTx">false</property>
<destroyMethod name="close"/>
</component>
<component name="dataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>connectionPool</arg>
</component>
<!-- Hoge_DB用 -->
<component name="connectionPoolForHoge"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<property name="XADataSource">xaDataSourceForHoge</property>
<property name="allowLocalTx">false</property>
<destroyMethod name="close"/>
</component>
<component name="dataSourceForHoge"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>connectionPoolForHoge</arg>
</component>
****************************************************************************
************************
↓↓ 変更 ↓↓
****************************************************************************
************************
<!-- A_DB用 -->
<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<property name="XADataSource">xaDataSource</property>
<property name="allowLocalTx">false</property>
<destroyMethod name="close"/>
</component>
<component name="dataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>connectionPoolForHoge</arg>
</component>
****************************************************************************
************************
以上、
宜しくお願い致します。
> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED]
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Koichi Kobayashi
> Sent: Friday, February 26, 2010 4:00 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:19391] Re: dataSourceNameはnullあるいは空であっ
> てはいけません
>
> 小林 (koichik) です.
>
> Date: Fri, 26 Feb 2010 10:20:27 +0900
> From: 吉村 実 <[E-MAIL ADDRESS DELETED]>
> To: <[E-MAIL ADDRESS DELETED]>
> Subject: [Seasar-user:19390] dataSourceNameはnullあるいは空であっては
> いけません
>
> > こちら
> > http://s2container.seasar.org/2.4/ja/jdbc.html
> > にあります、「同じ種類のデータソースを動的に切り替える」の
> > 方法を行っているのですが、
> > 下記エラーが出力されてしまいます。
> >
> > 2010/02/26 9:44:32 org.seasar.framework.log.Logger error
> > 致命的: [ESSR0007]dataSourceNameはnullあるいは空であってはいけません
> > org.seasar.framework.exception.EmptyRuntimeException:
> > [ESSR0007]dataSourceNameはnullあるいは空であってはいけません
>
> ドキュメントの最後の方に書いてある
>
> ----------------------------------------------------------------------
> プログラムでは、org.seasar.extension.datasource.DataSourceFactoryを
> 使ってデータソース名を設定します。
> ----------------------------------------------------------------------
>
> がされていないのではないでしょうか.
>
> > 「jdbc.dicon」
> (略)
> > <include path="jdbc-extension.dicon"/>
>
> このインクルードは削除してください.
> ドキュメントにも記載していません.
>
> > 「A_jdbc.dicon」
> (略)
> > <component name="dataSource"
> > class="org.seasar.extension.dbcp.impl.DataSourceImpl">
>
> > 「B_jdbc」
> (略)
> > <component name="dataSourceForB"
> > class="org.seasar.extension.dbcp.impl.DataSourceImpl">
>
> ドキュメントに書いてあるように,
> DataSource の名前は xxxDataSource という
> 形式にしてください.
>
> ----------------------------------------------------------------------
> DataSourceのコンポーネントにはそれぞれ異なるコンポーネント名を
> 設定してください。
> そのとき、名前は「任意のプレフィックス + DataSource」としてください。
> ----------------------------------------------------------------------
>
> 前述の DataSourceFactory で指定する名前は
> このプレフィックス (xxxDataSource の xxx) に
> なります.
>
> ----------------------------------------------------------------------
> DataSourceFactoryクラスのsetSelectableDataSourceNameメソッドには
> データソース名のプレフィックスを渡してください。
> この例では、"customer1" や "customer2" がデータソース名の
> プレフィックスになります。
> ----------------------------------------------------------------------
>
>
> --
> <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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内