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

林 祐一郎 [E-MAIL ADDRESS DELETED]
2007年 11月 29日 (木) 13:34:02 JST


本間さま

お世話になっております。
林祐一郎と申します。

回答ありがとうございます。

以下に、調査結果を記載いたします。

> (2)は、SQL文とテーブル定義を見るとわかるかもしれません。
> 良くあるケースとしては、CHAR(2)のカラムをwhere句で指定する際
> にパラメータが2文字に満たない場合が考えられます。
 おっしゃる通りWHERE句の記述を修正したところ正常に取得できました。

> (1)はdiconを見直せば解決できると思います。
 DB(A)、DB(B)それぞれにSELECT文を発行するボタンを作成し、
 調査してみたところ、 dao.dicon の中で先に include したほうのDB
 の方にしか見に行けていないことが分かりました。
 (includeする順序を入れ替えると見る事が出来る方が逆になる)

 jdbc.dicon や dao.dicon は複製して、それぞれのDB設定しているだけなので
 問題があるとすると app.dicon のほうだと思います。

 知識不足でいたらないところがあると思いますが、
 どうぞよろしくお願いいたします。

-- app.dicon --------------------------- <components>
  <include path="dao.dicon"/>
  <include path="j2ee.dicon"/>
  <component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRe
gister">
  <initMethod name="addClassPattern">
    <arg>"XXX.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>"XXX.db.dao"</arg>
    <arg>".*Dao"</arg>
  </initMethod>
</component>

<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRe
gister">
  <initMethod name="addClassPattern">
    <arg>"XXX.db.manager"</arg>
    <arg>".*Mgr"</arg>
  </initMethod>
</component>

<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRe
gister">
  <initMethod name="addClassPattern">
    <arg>"XXX"</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>"XXX"</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>"XXX.db.dao.dao1"</arg>
    <arg>".*Dao"</arg>
  </initMethod>
  <initMethod name="addIgnoreClassPattern">
    <arg>"XXX.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>"XXX.db.dao.dao2"</arg>
    <arg>".*Dao"</arg>
  </initMethod>
  <initMethod name="addIgnoreClassPattern">
    <arg>"XXX.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>




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