[Seasar-user:15049] Re: 複数DBへの接続
r.m
[E-MAIL ADDRESS DELETED]
2008年 7月 16日 (水) 16:04:52 JST
水澤と申します。
文字化けしてしまったので、再送します。
以前、自分がやったマルチデータソースの設定だと
#############################dao-my.dicon#############################
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components namespace="dao">
<include path="daodicon"/>
<include path="daotims.dicon"/>
<include path="daooldcas.dicon"/>
</components>
#############################app.dicon#############################
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
---省略----
<include path="dao-my.dicon"/>
---省略----
</components>
それ以外は設定あっているかと思います。
旧VerのS2DAOだと、Dao.diconの部分の設定が違う(jarにはj2ee.diconが含まれていた)
はずなので、wikiのとはちょっと違うかもしれません。
新しいVerのだとDao.diconはjarに含まれています。
的外れでしたら、申し訳ありません。
参考になればと思います。
> 桑原です。お世話になります。
>
> 「SMART deployで複数データソースに対応するには?」
> http://www.seasar.org/wiki/index.php?FAQ%2FS2DAO#w7da6e0e
>
> を参考にjdbc.diconやdao.diconを設定したのですが、2つの内1つの
> DBにしかアクセスしません。
> dao-my.diconに記載する2つのDBのincludeの順番を変えると、もう
> 一方のDBにアクセスできます。どうやら、1番目に来るincludeのdiconに
> 定義されたDBのみアクセスできるようです。
>
> データソースの切り替えの定義をソースに書く必要があるのか無いのか分かりま
> せんので、ご教示下さい。
>
>
> #############################dao-my.dicon#############################
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> "http://www.seasar.org/dtd/components24.dtd">
> <components namespace="dao">
> <include path="daotims.dicon"/>
> <include path="daooldcas.dicon"/>
>
> <include path="j2ee.dicon"/>
> </components>
>
>
> #############################daooldcas.dicon#############################
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> "http://www.seasar.org/dtd/components24.dtd">
> <components namespace="daooldcas">
> <include path="jdbcoldcas.dicon"/>
> <component class="org.seasar.dao.impl.AnnotationReaderFactoryImpl"/>
> <component class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
> <component
> name="interceptor"
> class="org.seasar.dao.pager.PagerS2DaoInterceptorWrapper">
> <arg>
> <component class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
> </arg>
> </component>
> <component class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
> <component
> name="stringClobType"
> class="org.seasar.extension.jdbc.types.StringClobType"
> />
> <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.ResultSetHandlerFactoryImpl"/>
> <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"/>
> </components>
>
> #############################daotims.dicon#############################
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> "http://www.seasar.org/dtd/components24.dtd">
> <components namespace="daotims">
> <include path="jdbctims.dicon"/>
> <component class="org.seasar.dao.impl.AnnotationReaderFactoryImpl"/>
> <component class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
> <component
> name="interceptor"
> class="org.seasar.dao.pager.PagerS2DaoInterceptorWrapper">
> <arg>
> <component class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
> </arg>
> </component>
> <component class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
> <component
> name="stringClobType"
> class="org.seasar.extension.jdbc.types.StringClobType"
> />
> <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.ResultSetHandlerFactoryImpl"/>
> <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"/>
> </components>
>
>
> #############################jdbc.dicon#############################
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> "http://www.seasar.org/dtd/components24.dtd">
> <components>
> <include path="jdbcoldcas.dicon"/>
> <include path="jdbctims.dicon"/>
> </components>
>
>
>
> #############################jdbcoldcas.dicon#############################
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> "http://www.seasar.org/dtd/components24.dtd">
> <components namespace="jdbcoldcas">
> <include path="jta.dicon"/>
> <include path="jdbc-extension.dicon"/>
>
> <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
> <component
> class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
> <arg>
> <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
> </arg>
> <property name="fetchSize">100</property>
> <!--
> <property name="maxRows">100</property>
> -->
> </component>
> <!-- for PostgreSQL -->
>
> <component name="xaDataSource"
> class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
> <property name="driverClassName">
> "org.postgresql.Driver"
> </property>
> <property name="URL">
> "jdbc:postgresql://localhost:5432/oldcss"
> </property>
> <property name="user">"postgres"</property>
> <property name="password">"postgres"</property>
> </component>
> <component name="connectionPool"
> class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
> <property name="timeout">600</property>
> <property name="maxPoolSize">10</property>
> <property name="allowLocalTx">true</property>
> <destroyMethod name="close"/>
> </component>
>
> <component name="dataSource"
> class="org.seasar.extension.dbcp.impl.DataSourceImpl"
> />
> </components>
>
>
>
>
> #############################jdbctims.dicon#############################
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> "http://www.seasar.org/dtd/components24.dtd">
> <components namespace="jdbctims">
> <include path="jta.dicon"/>
> <include path="jdbc-extension.dicon"/>
>
> <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
> <component
> class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
> <arg>
> <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
> </arg>
> <property name="fetchSize">100</property>
> <!--
> <property name="maxRows">100</property>
> -->
> </component>
>
> <!-- for PostgreSQL -->
>
> <component name="xaDataSource"
> class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
> <property name="driverClassName">
> "org.postgresql.Driver"
> </property>
> <property name="URL">
> "jdbc:postgresql://localhost:5432/e3lp20"
> </property>
> <property name="user">"postgres"</property>
> <property name="password">"postgres"</property>
> </component>
> <component name="connectionPool"
> class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
> <property name="timeout">600</property>
> <property name="maxPoolSize">10</property>
> <property name="allowLocalTx">true</property>
> <destroyMethod name="close"/>
> </component>
>
> <component name="dataSource"
> class="org.seasar.extension.dbcp.impl.DataSourceImpl"
> />
> </components>
>
>
>
> #############################custmizer.dicon#############################
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> "http://www.seasar.org/dtd/components24.dtd">
> <components>
> <include path="default-customizer.dicon"/>
> <component name="pageCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addCustomizer">
> <arg>traceCustomizer</arg>
> </initMethod>
> <initMethod name="addCustomizer">
> <arg>
> <component
> class="org.seasar.framework.container.customizer.AspectCustomizer">
> <initMethod name="addInterceptorName">
> <arg>"app_aop.appFacesExceptionThrowsInterceptor"</arg>
> </initMethod>
> <property name="pointcut">"do.*, initialize, prerender"</property>
> </component>
> </arg>
> </initMethod>
> <initMethod name="addCustomizer">
> <arg>
> <component
> class="org.seasar.framework.container.customizer.AspectCustomizer">
> <initMethod name="addInterceptorName">
> <arg>"j2ee.requiredTx"</arg>
> </initMethod>
> <property name="pointcut">"do.*, initialize, prerender"</property>
> </component>
> </arg>
> </initMethod>
> </component>
> <component name="actionCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addCustomizer">
> <arg>traceCustomizer</arg>
> </initMethod>
> <initMethod name="addCustomizer">
> <arg>
> <component
> class="org.seasar.framework.container.customizer.AspectCustomizer">
> <initMethod name="addInterceptorName">
> <arg>"app_aop.actionSupportInterceptor"</arg>
> </initMethod>
> <property name="pointcut">"do.*, initialize, prerender"</property>
> </component>
> </arg>
> </initMethod>
> </component>
> <component name="serviceCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addCustomizer">
> <arg>traceCustomizer</arg>
> </initMethod>
> <initMethod name="addCustomizer">
> <arg>requiredTxCustomizer</arg>
> </initMethod>
> </component>
> <component name="logicCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addCustomizer">
> <arg>traceCustomizer</arg>
> </initMethod>
> </component>
> <component name="daoCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addCustomizer">
> <arg>traceCustomizer</arg>
> </initMethod>
> <initMethod name="addCustomizer">
> <arg>s2DaoCustomizer</arg>
> </initMethod>
> <initMethod name="addCustomizer">
> <arg>daotimsSupportAspectCustomizer</arg>
> </initMethod>
> <initMethod name="addCustomizer">
> <arg>daooldcasSupportAspectCustomizer</arg>
> </initMethod>
> </component>
> <component name="dxoCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addCustomizer">
> <arg>traceCustomizer</arg>
> </initMethod>
> <initMethod name="addCustomizer">
> <arg>s2DxoCustomizer</arg>
> </initMethod>
> </component>
> <component name="helperCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> <initMethod name="addCustomizer">
> <arg>traceCustomizer</arg>
> </initMethod>
> </component>
> <component name="daooldcasSupportAspectCustomizer"
> class="org.seasar.framework.container.customizer.AspectCustomizer">
> <property name="interceptorName">"daooldcas.interceptor"</property>
> <initMethod name="addClassPattern">
> <arg>"ordersheet.dao.daooldcas"</arg>
> <arg>".*Dao"</arg>
> </initMethod>
> </component>
> <component name="daotimsSupportAspectCustomizer"
> class="org.seasar.framework.container.customizer.AspectCustomizer">
> <property name="interceptorName">"daotims.interceptor"</property>
> <initMethod name="addClassPattern">
> <arg>"ordersheet.dao.daotims"</arg>
> <arg>".*Dao"</arg>
> </initMethod>
> </component>
>
> </components>
>
>
> #############################s2container.dicon#############################
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
> "http://www.seasar.org/dtd/components24.dtd">
>
> <components>
> <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>
> <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>
> <include condition="#ENV != 'ut' and #ENV != 'ct'"
> path="cooldeploy.dicon"/>
>
> <component
> class="org.seasar.framework.container.factory.SimplePathResolver">
> <initMethod name="addRealPath">
> <arg>"dao.dicon"</arg>
> <arg>"dao-my.dicon"</arg><!-- 実際に使用する定義ファイル -->
> </initMethod>
> </component>
>
> </components>
>
>
>
>
>
> ###########################エラーメッセージ#############################
> 2008-07-16 15:05:35,187 [http-8080-1] DEBUG
> org.seasar.framework.aop.interceptors.TraceInterceptor - BEGIN
> ordersheet.dao.V_userDao#getUserByUsercd(el00001)
> 2008-07-16 15:05:35,265 [http-8080-1] DEBUG
> org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 物理的なコネクション
> を取得しました
> 2008-07-16 15:05:35,265 [http-8080-1] DEBUG
> org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクション
> を取得しました。tx=[FormatId=4360, GlobalId=1216186452953/6, BranchId=]
> 2008-07-16 15:05:35,265 [http-8080-1] DEBUG
> org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネク
> ションを閉じました。tx=[FormatId=4360, GlobalId=1216186452953/6, BranchId=]
> 2008-07-16 15:05:35,265 [http-8080-1] DEBUG
> org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクション
> を取得しました。tx=[FormatId=4360, GlobalId=1216186452953/6, BranchId=]
> 2008-07-16 15:05:35,312 [http-8080-1] WARN
> org.seasar.dao.impl.PropertyTypeFactoryImpl - テーブル(v_user)が見つかり
> ません
> 2008-07-16 15:05:35,312 [http-8080-1] DEBUG
> org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネク
> ションを閉じました。tx=[FormatId=4360, GlobalId=1216186452953/6, BranchId=]
> 2008-07-16 15:05:35,312 [http-8080-1] DEBUG
> org.seasar.extension.dbcp.impl.ConnectionPoolImpl - 論理的なコネクション
> を取得しました。tx=[FormatId=4360, GlobalId=1216186452953/6, BranchId=]
> 2008-07-16 15:05:35,328 [http-8080-1] DEBUG
> org.seasar.extension.jdbc.impl.BasicHandler - SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = 'el00001'
> 2008-07-16 15:05:35,328 [http-8080-1] DEBUG
> org.seasar.extension.dbcp.impl.ConnectionWrapperImpl - 論理的なコネク
> ションを閉じました。tx=[FormatId=4360, GlobalId=1216186452953/6, BranchId=]
> 2008-07-16 15:05:35,328 [http-8080-1] DEBUG
> org.seasar.framework.aop.interceptors.TraceInterceptor - END
> ordersheet.dao.V_userDao#getUserByUsercd(el00001)
> Throwable:org.seasar.framework.exception.SQLRuntimeException:
> [ESSR0072]SQLで例外(SQL=[SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = ?],
> Message=[[ESSR0072]SQLで例外(SQL=[SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = ?], Message=[0],
> ErrorCode=42P01, SQLState={3})が発生しました : [SQLで例外(Message=
> [ERROR: relation "v_user" does not exist], ErrorCode=0, SQLState=42P01)
> が発生しました。], [ERROR: relation "v_user" does not exist],
> ErrorCode=0, SQLState=42P01)が発生しました
> 2008-07-16 15:05:35,359 [http-8080-1] DEBUG
> org.seasar.extension.jta.TransactionImpl - トランザクションをロールバッ
> クしました。tx=[FormatId=4360, GlobalId=1216186452953/6, BranchId=]
> 2008-07-16 15:05:35,359 [http-8080-1] DEBUG
> org.seasar.framework.aop.interceptors.TraceInterceptor - END
> ordersheet.web.NewentrustPage#doItakukanriseiSearch()
> Throwable:org.seasar.framework.exception.SQLRuntimeException:
> [ESSR0072]SQLで例外(SQL=[SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = ?],
> Message=[[ESSR0072]SQLで例外(SQL=[SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = ?], Message=[0],
> ErrorCode=42P01, SQLState={3})が発生しました : [SQLで例外(Message=
> [ERROR: relation "v_user" does not exist], ErrorCode=0, SQLState=42P01)
> が発生しました。], [ERROR: relation "v_user" does not exist],
> ErrorCode=0, SQLState=42P01)が発生しました
> 2008-07-16 15:05:35,375 [http-8080-1] DEBUG
> org.seasar.teeda.extension.util.TeedaExtensionErrorPageManagerImpl -
> [ESSR0072]SQLで例外(SQL=[SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = ?],
> Message=[[ESSR0072]SQLで例外(SQL=[SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = ?], Message=[0],
> ErrorCode=42P01, SQLState={3})が発生しました : [SQLで例外(Message=
> [ERROR: relation "v_user" does not exist], ErrorCode=0, SQLState=42P01)
> が発生しました。], [ERROR: relation "v_user" does not exist],
> ErrorCode=0, SQLState=42P01)が発生しました
> org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外
> (SQL=[SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = ?],
> Message=[[ESSR0072]SQLで例外(SQL=[SELECT
> user_cd,name_family,name_first,post,company_cd,company,organization_cd,organization,password
> FROM v_user where login_ok = '1' and user_cd = ?], Message=[0],
> ErrorCode=42P01, SQLState={3})が発生しました : [SQLで例外(Message=
> [ERROR: relation "v_user" does not exist], ErrorCode=0, SQLState=42P01)
> が発生しました。], [ERROR: relation "v_user" does not exist],
> ErrorCode=0, SQLState=42P01)が発生しました
> at
> org.seasar.framework.util.PreparedStatementUtil.executeQuery(PreparedStatementUtil.java:48)
> at
> org.seasar.extension.jdbc.impl.BasicResultSetFactory.createResultSet(BasicResultSetFactory.java:44)
> at
> org.seasar.extension.jdbc.impl.BasicSelectHandler.createResultSet(BasicSelectHandler.java:281)
> at
> org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:257)
> at
> org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:210)
> at
> org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:184)
> at
> org.seasar.dao.impl.SelectDynamicCommand.execute(SelectDynamicCommand.java:69)
> at
> org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:53)
> at
> org.seasar.dao.pager.PagerS2DaoInterceptorWrapper.invoke(PagerS2DaoInterceptorWrapper.java:71)
> at
> ordersheet.dao.V_userDao$$EnhancedByS2AOP$$1bb747a$$MethodInvocation$$getUserByUsercd0.proceed(MethodInvocationClassGenerator.java)
> at
> org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:73)
> at
> ordersheet.dao.V_userDao$$EnhancedByS2AOP$$1bb747a$$MethodInvocation$$getUserByUsercd0.proceed(MethodInvocationClassGenerator.java)
> at
> ordersheet.dao.V_userDao$$EnhancedByS2AOP$$1bb747a.getUserByUsercd(V_userDao$$EnhancedByS2AOP$$1bb747a.java)
> at
> ordersheet.web.NewentrustPage.doItakukanriseiSearch(NewentrustPage.java:89)
> at
> ordersheet.web.NewentrustPage$$EnhancedByS2AOP$$56681b.$$doItakukanriseiSearch$$invokeSuperMethod$$(NewentrustPage$$EnhancedByS2AOP$$56681b.java)
> at
> ordersheet.web.NewentrustPage$$EnhancedByS2AOP$$56681b$$MethodInvocation$$doItakukanriseiSearch5.proceed(MethodInvocationClassGenerator.java)
>
>
>
> ###########################ソース#############################
>
> SingletonS2ContainerFactory.setConfigPath("dao.dicon");
> SingletonS2ContainerFactory.init();
> S2Container container = SingletonS2ContainerFactory.getContainer();
> V_userDao dao = (V_userDao) container.getComponent(V_userDao.class);
>
> List<V_user> userinfo = dao.getUserByUsercd(itakukanriseiid);// ←ここで
> エラーになる
> itakukanriseitel = "";
> itakukanriseimail = "";
> for (int i = 0; i < userinfo.size(); ++i) {
> // 検索がヒットした時
> itakukanriseiname = userinfo.get(i).getName_family() + " " +
> userinfo.get(i).getName_first();
> itakukanriseiorg = userinfo.get(i).getCompany() + " " +
> userinfo.get(i).getOrganization() + " " + userinfo.get(i).getPost();
> return null;
> }
>
>
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内