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