[Seasar-user:19414] Re: dataSourceNameはnullあるいは空であってはいけません
吉村 実
[E-MAIL ADDRESS DELETED]
2010年 2月 28日 (日) 15:31:41 JST
小林様
ちなみにですが、修正個所の量によっては
SelectableDataSourceを使わない方法も選択肢の一つとして
考えなければならないのですが、
[Seasar-user:19397]のご回答にありましたが、
> SelectableDataSource を使う代わりに異なる
> Dao のインスタンスを使い分けているからですね.
これまで(バージョンアップ前)通り、上記のように
Daoのインスタンスを使い分けて切り替えようとしたときに、
片方のデータソース(下記jdbc.diconのxaDataSource)にしか
アクセスしなくなってしまったのは
なぜなのでしょうか。
プログラムにおいてxaDataSourceForOp側にアクセスしようと
してエラーになるとかではなく、もれなくxaDataSourceの方に
行ってしまいます。(if文においてはきちんと条件分岐されてるのですが)
なんだか、前に戻ってしまって
心苦しいのですが、どうもSelectableDataSourceにした場合、
修正個所がかなり多くなってしまいそうでして。。
「ご教授いただく前のallaop.dicon」
<components namespace="allaop">
<include path="aop.dicon"/>
<include path="aop_hoge.dicon"/>
<include path="j2ee.dicon"/>
<include path="dao_hoge.dicon"/>
<component name="actionInterceptorChain"
class="org.seasar.framework.aop.interceptors.InterceptorChain">
<initMethod
name="add"><arg>aop_hoge.ntEventLogInterceptor</arg></initMethod>
<initMethod
name="add"><arg>aop_hoge.sessionInvalidateInterceptor</arg></initMethod>
<initMethod
name="add"><arg>aop_hoge.traceInterceptor</arg></initMethod>
<initMethod
name="add"><arg>aop.traceThrowsInterceptor</arg></initMethod>
</component>
<component name="serviceInterceptorChain"
class="org.seasar.framework.aop.interceptors.InterceptorChain">
<initMethod
name="add"><arg>j2ee.requiredTx</arg></initMethod>
<initMethod
name="add"><arg>aop_hoge.traceInterceptor</arg></initMethod>
<initMethod
name="add"><arg>aop.traceThrowsInterceptor</arg></initMethod>
</component>
<component name="daoInterceptorChain"
class="org.seasar.framework.aop.interceptors.InterceptorChain">
<initMethod
name="add"><arg>aop_hoge.traceInterceptor</arg></initMethod>
<initMethod
name="add"><arg>dao_hoge.interceptor</arg></initMethod>
</component>
<component name="daoInterceptorChainForOp"
class="org.seasar.framework.aop.interceptors.InterceptorChain">
<initMethod
name="add"><arg>aop_hoge.traceInterceptor</arg></initMethod>
<initMethod
name="add"><arg>dao_hoge.interceptorForOp</arg></initMethod>
</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>
</components>
「ご教授いただく前のopdao.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">
<initMethod name="addReplaceRule">
<arg>"$"</arg>
<arg>"ForOp"</arg>
</initMethod>
</component>
</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.daoInterceptorChainForOp</property>
<initMethod name="addClassPattern">
<arg>"jp.go.hoge.common.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
</components>
「ご教授いただく前のdao_hoge.dicon」
<components namespace="dao_hoge">
<include path="jdbc.dicon"/>
<component
name="annotationReaderFactory"
class="org.seasar.dao.annotation.tiger.impl.AnnotationReaderFactoryImpl"/>
<component
class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
<component
name="stringClobType"
class="jp.go.hoge.common.jdbc.types.StringClobType"/>
<component
name="resultSetFactory"
class="org.seasar.dao.pager.PagerResultSetFactoryWrapper">
<arg>
<component
class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
</arg>
<property name="useScrollCursor">true</property>
</component>
<component class="org.seasar.dao.impl.BeanMetaDataFactoryImpl"/>
<component class="org.seasar.dao.impl.DaoNamingConventionImpl"/>
<component class="org.seasar.dao.impl.NullBeanEnhancer"/>
<component
class="org.seasar.dao.impl.ResultSetHandlerFactorySelector"/>
<component class="org.seasar.dao.impl.DtoMetaDataFactoryImpl"/>
<component
class="org.seasar.dao.impl.PropertyTypeFactoryBuilderImpl"/>
<component
class="org.seasar.dao.impl.RelationPropertyTypeFactoryBuilderImpl"/>
<component class="org.seasar.dao.impl.DefaultTableNaming"/>
<component class="org.seasar.dao.impl.DefaultColumnNaming"/>
<component
class="org.seasar.dao.impl.ProcedureMetaDataFactoryImpl"/>
<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>
<component
name="daoMetaDataFactoryForOp"
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl">
<arg>jdbc.dataSourceForOp</arg>
<arg>
<component
class="org.seasar.dao.pager.PagerStatementFactory"/>
</arg>
<arg>resultSetFactory</arg>
<arg>annotationReaderFactory</arg>
<property
name="statementFactory">statementFactoryForOp</property>
</component>
<component name="interceptorForOp"
class="org.seasar.dao.pager.PagerS2DaoInterceptorWrapper">
<arg>
<component name="s2dao"
class="org.seasar.dao.interceptors.S2DaoInterceptor">
<arg>daoMetaDataFactoryForOp</arg>
</component>
</arg>
</component>
</components>
「ご教授頂く前のjdbc.dicon」
<components namespace="jdbc">
<include path="jta.dicon"/>
<include path="jdbc-extension.dicon"/>
<component
class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<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="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="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>
<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="dataSourceForOp"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>connectionPoolForOp</arg>
</component>
</components>
プログラム
if ( referDB.isOpDB() == true ) {
prListForm.setTPrDataDao( tPrDataDaoForOp );
} else {
prListForm.setTPrDataDao( tProcDataDao );
}
// 検索実行
return prListForm.getTPrDataDao().findBySearchCondition4PrList(
prSearchForm.getSaveSearchCondition() );
以上、
恐れ入りますが、宜しくお願い致します。
Seasar-user メーリングリストの案内