[Seasar-user:11878] Re: [S2Dao]S2Daoで複数DBへの接続

JUNDU [E-MAIL ADDRESS DELETED]
2007年 12月 3日 (月) 13:08:18 JST


JUNDUです。

 まず、AutoRegisterとSMART deployのどちらを使うかをはっきりさせた方が良い様です。
現状の設定ファイルには、両方の書き方が混ざっています。

AutoRegister…クラス名やパッケージ名の一致するクラスを自動的にdiconに登録する。
SMART deploy…規約にそったパッケージ構成、クラス名のクラスを自動的にdiconに登録する。

 AutoRegisterはSeasar2.3以降、SMART deployはSeasar2.4以降でサポートされている方法
です。

 AutoRegisterでやろうとしているとするとFAQの方のやり方で、SMART deployでやる場合は、
ブログに書かれたようなやり方になります。

 使おうとしているSeasar2のバージョンなどを教えていただけると、もうちょっと実際のファ
イルにそった回答ができると思いますので教えていただけますでしょうか。よろしくお願い致
します。


林 祐一郎 wrote:
> 本間さま
> せとさま
> 
> いつも、お世話になっております。
> 林祐一郎と申します。
> 
> 以前の回答後、こちらでテストを実施してみたのですが、
>  『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 mailing list
> [E-MAIL ADDRESS DELETED]
> 
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 
>  


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