[Seasar-user:11877] Re: [S2Dao]S2Daoで複数DBへの接続
林 祐一郎
[E-MAIL ADDRESS DELETED]
2007年 12月 3日 (月) 11:56:11 JST
本間さま
せとさま
いつも、お世話になっております。
林祐一郎と申します。
以前の回答後、こちらでテストを実施してみたのですが、
『dao.dicon の中で先に include したほうのDB
の方にしか見に行けていない。
(includeする順序を入れ替えると見る事が出来る方が逆になる)』
というところが改善されません。。。
私どもの設定ファイルが悪いのかも、と判断し、
以下に、設定ファイル(今回修正した分を含む)を
記載いたします。
力不足で申し訳ありません。
お気づきの点などありましたら、
ご回答お願いいたします。
(以下のページなどを、今回の修正用に参考としました。
http://d.hatena.ne.jp/JUNDU/20060620/1150814260
http://www.seasar.org/wiki/index.php?FAQ%2FS2DAO#q70fa8ce
)
【app.dicon】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
<include path="jp/com/AAA/BBB/db/dao/CCCDatabase.dicon"/>
</components>
【CCCDatabase.dicon】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="CCCDb">
<include path="dao.dicon"/>
<include path="j2ee.dicon"/>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRe
gister">
<initMethod name="addClassPattern">
<arg>"jp.com.AAA.BBB.db.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">dao.interceptor</property>
<initMethod name="addClassPattern">
<arg>"jp.com.AAA.BBB.db.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRe
gister">
<initMethod name="addClassPattern">
<arg>"jp.com.AAA.BBB.db.manager"</arg>
<arg>".*Mgr"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRe
gister">
<initMethod name="addClassPattern">
<arg>"jp.com.AAA.BBB"</arg>
<arg>".*Business"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">j2ee.requiredTx</property>
<property
name="pointcut">"update.*,insert.*,execute.*"</property>
<initMethod name="addClassPattern">
<arg>"jp.com.AAA.BBB"</arg>
<arg>".*Business"</arg>
</initMethod>
</component>
↓↓↓修正部分(付け加えました。)↓↓↓
<component name="dao1SupportAspectCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptor">"dao1.interceptor"</property>
<initMethod name="addClassPattern">
<arg>"jp.com.AAA.BBB.db.dao.dao1"</arg>
<arg>".*Dao"</arg>
</initMethod>
<initMethod name="addIgnoreClassPattern">
<arg>"jp.com.AAA.BBB.dao.dao2"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
<component name="dao2SupportAspectCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptor">"dao2.interceptor"</property>
<initMethod name="addClassPattern">
<arg>"jp.com.AAA.BBB.db.dao.dao2"</arg>
<arg>".*Dao"</arg>
</initMethod>
<initMethod name="addIgnoreClassPattern">
<arg>"jp.com.AAA.BBB.dao.dao1"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
<component name="daoCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>defaultCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>dao1SupportAspectCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>dao2SupportAspectCustomizer</arg>
</initMethod>
</component>
↑↑↑修正部分(付け加えました。)↑↑↑
</components>
【j2ee.dicon】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="j2ee">
<component name="transactionManager"
class="org.seasar.extension.jta.TransactionManagerImpl"/>
<component name="requiredTx"
class="org.seasar.extension.tx.RequiredInterceptor"/>
<component name="requiresNewTx"
class="org.seasar.extension.tx.RequiresNewInterceptor"/>
<component name="mandatoryTx"
class="org.seasar.extension.tx.MandatoryInterceptor"/>
<!--
<component name="notSupportedTx"
class="org.seasar.extension.tx.NotSupportedInterceptor"/>
-->
<component
class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<component
class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
<!--
<component
class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
<component
class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
-->
</components>
【dao.dicon】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="dao">
<include path="dao1.dicon"/>
<include path="dao2.dicon"/>
</components>
【dao1.dicon】←←←今回作成したファイル←←←
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="dao1">
<include path="jdbc1.dicon"/>
<include path="j2ee.dicon"/>
<component
class="org.seasar.dao.impl.FieldAnnotationReaderFactory"/>
<component
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
<component name="interceptor"
class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
<component
class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
<component
name="stringClobType"
class="org.seasar.extension.jdbc.types.StringClobType"/>
</components>
【dao2.dicon】←←←今回作成したファイル←←←
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="dao2">
<include path="jdbc2.dicon"/>
<include path="j2ee.dicon"/>
<component
class="org.seasar.dao.impl.FieldAnnotationReaderFactory"/>
<component
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
<component name="interceptor"
class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
<component
class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
<component
name="stringClobType"
class="org.seasar.extension.jdbc.types.StringClobType"/>
</components>
【jdbc.dicon】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="jdbc">
<include path="jdbc1.dicon"/>
<include path="jdbc2.dicon"/>
</components>
【jdbc1.dicon】←←←今回作成したファイル←←←
←←←(今までも、使用していたDBの設定ファイル)←←←
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="jdbc1">
<include path="j2ee.dicon"/>
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"oracle.jdbc.driver.OracleDriver"
</property>
<property name="URL">
"jdbc:oracle:thin:@1YY.1YY.1.YYY:YYYY:yyyyy"
</property>
<property name="user">"yyyyyy"</property>
<property name="password">"yyyyyy"</property>
</component>
<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<!-- JTAトランザクションが開始されていない場合にコネクション
を
取得できないようにするには次のプロパティをfalseにし
てください.-->
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>
</component>
<component name="dataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>connectionPool</arg>
</component>
</components>
【jdbc2.dicon】←←←今回作成したファイル←←←
←←←(今回の対応で、使用する必要ができたDBの設定ファイ
ル)←←←
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="jdbc2">
<include path="j2ee.dicon"/>
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"oracle.jdbc.driver.OracleDriver"
</property>
<property name="URL">
"jdbc:oracle:thin:@1XX.1XX.1.XXX:XXXX:xxxxx"
</property>
<property name="user">"xxxxx"</property>
<property name="password">"xxxxx"</property>
</component>
<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<!-- JTAトランザクションが開始されていない場合にコネクション
を
取得できないようにするには次のプロパティをfalseにし
てください.-->
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>
</component>
<component name="dataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>connectionPool</arg>
</component>
</components>
-----Original Message-----
From: [E-MAIL ADDRESS DELETED]
[mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of HONMA Hirotaka
Sent: Wednesday, November 28, 2007 11:19 AM
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:11826] Re: [S2Dao]S2Daoで複数DBへの接続
本間@茅場町です。
on Wed, 28 Nov 2007 10:51:05 +0900
in [Seasar-user:11825] Re: [S2Dao]S2Daoで複数DBへの接続
林 祐一郎 <[E-MAIL ADDRESS DELETED]> wrote:
> 切り分けをし、試験をしてみました。
> 結果は、以下のようになりました。
>
> > 複数DB設定ではなく(B)のみへ接続する設定にし、同じクエリを
> > 発行してみる
> >
> (B)のみへの接続に設定したところ、エラーは発生しませんでした。
> しかし、クエリを発行した結果取得件数が3件になるはずのところ
> 1件も取得できていませんでした。
> SQL*Plusで実行した場合には、ちゃんと3件とれてきます。
>
> > dicon設定はそのまま(複数DB設定)にして、(B)にあるテーブルを
> > (A)にも作成してみる
> >
> (B)にあるテーブルを(A)に作成したところ、
> 『ORA-00942: 表またはビューが存在しません。』というエラーは発生しません
でした。
>
> しかし、上記と同じようにSQL*Plusで実行した場合には取得されているはず
> のデータが取得されませんでした。
調査ありがとうございます、
問題は1つかと思っていましたが、ひょっとすると2つあるのかも...
(1) 複数DB接続設定がミスっていて、(A)へ接続している
↑2つめの調査でORA-00942が出なくなったため
(2) SQL自体にも問題がある
↑1つめの調査でSQL*Plusと結果が異なるため
(1)はdiconを見直せば解決できると思います。
(2)は、SQL文とテーブル定義を見るとわかるかもしれません。
良くあるケースとしては、CHAR(2)のカラムをwhere句で指定する際
にパラメータが2文字に満たない場合が考えられます。
_______________________________________________
Seasar-user mailing list
[E-MAIL ADDRESS DELETED]
https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内