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