[Seasar-user:19406] Re: dataSourceNameはnullあるいは空であってはいけません

吉村 実 [E-MAIL ADDRESS DELETED]
2010年 2月 27日 (土) 19:51:42 JST


小林様

ご回答ありがとうございます。

> 以前のバージョンのやり方がどうなっているのか,
> それと jdbc.html で説明しているやり方がどう
> 違うのか,一度手を止めてじっくり検討してみては
> いかがでしょうか.
> # 土曜日にメールしてる状況ではそれも難しいのかも
> # しれませんが.

耳の痛い話でございます。
本来ならきちんと理解してやりたいところ、やるべきなのですが、
時間が限られておりまして、お力をお借りしている次第です。
質問の内容に失礼な点があるかとは存じますが、
ご考慮頂けたらと思います。


ご回答の通りに2番目のを削除したところ、
エラーはでなくなったのですが、やはり動的な切り替えができなく、
プログラムの条件分岐によりどちらに行っても、
片方(" xaDataSource "の方)にしかアクセスしにいかない状況です。

なにか他に問題があり、
ご回答しにくいとは思いますが、
ご助言等頂けたら幸いです。




「jdbc.dicon」

<components namespace="jdbc">

	<include path="jta.dicon"/>
	<include path="co_jdbc.dicon"/>
	<include path="op_jdbc.dicon"/>
	
	<component
class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
	
	<component name="dataSource"
 
class="org.seasar.extension.datasource.impl.SelectableDataSourceProxy"/>
	    <component  name="dataSourceFactory"
        class="org.seasar.extension.datasource.impl.DataSourceFactoryImpl"/>
	
</components>


「co_jdbc.dicon」

<components namespace="co_jdbc">

	<include path="jta.dicon"/>
	<include path="jdbc-extension.dicon"/>

	<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">"COUSER"</property>
		<property name="password">"COPASSWORD"</property>
	</component>
	
	<component name="statementFactory"
	
class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
	
	<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="forCoDataSource"
		class="org.seasar.extension.dbcp.impl.DataSourceImpl">
		<arg>connectionPool</arg>
	</component>
	
	
</components>


「op_jdbc.dicon」

<components namespace="op_jdbc">

	<include path="jta.dicon"/>
	<include path="jdbc-extension.dicon"/>
	
	<component name="xaDataSourceForOp"
		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">"OPUSER"</property>
		<property name="password">"OPPASSWORD"</property>
	</component>
	
	<component name="statementFactoryForOp"
	
class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>	

	<component name="connectionPoolForOp"
		class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
		<property name="timeout">600</property>
		<property name="maxPoolSize">10</property>
		<property name="XADataSource">xaDataSourceForOp</property>
		<property name="allowLocalTx">false</property>
		<destroyMethod name="close"/>
	</component>
	<component name="forOpDataSource"
		class="org.seasar.extension.dbcp.impl.DataSourceImpl">
		<arg>connectionPoolForOp</arg>
	</component>
	
</components>


「codao.dicon」

<components>

	<include path="allaop.dicon"/>

    <!-- auto registration -->
	<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRe
gister">
		<property name="autoNaming">
			<component
class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/>
		</property>
		<initMethod name="addClassPattern">
			<arg>"jp.go.hoge.common.dao"</arg>
			<arg>".*Dao"</arg>
		</initMethod>
	</component>
	<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister">
		<property
name="interceptor">allaop.daoInterceptorChain</property>
		<initMethod name="addClassPattern">
			<arg>"jp.go.hoge.common.dao"</arg>
			<arg>".*Dao"</arg>
		</initMethod>
	</component>
	
	<!-- auto registration -->

</components>


「PrListInitServiceImpl.java」

private void initializeDaoByRefereDb( PrSearchForm prSearchForm, PrListForm
prListForm ) {
	
	prListForm.setTPrDataDao( tProcDataDao );
	prListForm.setTPrBasisesDao( tProcBasisesDao );
	prListForm.setTShDao( tShDao );
	
}


「PrListCommonServiceImpl.java」

public List<TPrData> searchByPrSearchCondition4List( PrSearchForm
prSearchForm, PrListForm prListForm ) {
	
	RefereDB referDB =
prSearchForm.getSaveSearchCondition().getRefereDB();
	
	if ( referDB.isOpDB() == true ) {
		dataSourceFactory.setSelectableDataSourceName("forOp");
		
	} else {
		dataSourceFactory.setSelectableDataSourceName("forCo");
	}

	return prListForm.getTPrDataDao().findBySearchCondition4PrList(
prSearchForm.getSaveSearchCondition() );
}



以上、
恐れ入りますが、宜しくお願い致します。





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