[Seasar-user:18481] Re: [Ymir][DBFlute] Ymir + DBFluteで複数DBの使用

金子 雄一 [E-MAIL ADDRESS DELETED]
2009年 9月 10日 (木) 20:52:54 JST


金子です。

更新も試してみました。

正常終了の場合 ⇒ 全DBに対して、コミット
例外発生の場合 ⇒ 全DBに対して、ロールバック

となりました。

ですので、複数DBに対して、
一括でコミット・ロールバックがかかっていると考えて、
問題ないと思います。

今までの流れをまとめますね。

1.クラスパス上に(Eclipseならば、src/resources直下です。)、
ymir-dao.diconを作成する。

2.アクセスする分だけのdbflute-xxx.diconをIncludeする。
ymir-dao.diconのcomponentsのネームスペースは、
ほかのものと同一でなければ、任意のものでOK。
(今回はdaoとしました。dbfluteでもOKなはずです。
わかりやすい名前にしましょう。)

3.クラスパス上に、ymir-customizer+pageCustomizer.diconを作成する。

4.pageCustomizer部分を複数DB対応にする。
(requiredTx周りの設定を複数DB用にします。)

以下のような記述になります。

------------------------------------------------------------------
<components>
  <component name="pageCustomizer"
    class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addCustomizer">
      <arg>
        <component

class="org.seasar.framework.container.customizer.AspectCustomizer">
          <property name="interceptorName">"j2eexxxdb.requiredTx"</property>
          <property name="pointcut">"_get.*,_post.*"</property>
        </component>
      </arg>
    </initMethod>
    <initMethod name="addCustomizer">
      <arg>
        <component

class="org.seasar.framework.container.customizer.AspectCustomizer">
          <property name="interceptorName">"j2eeyyydb.requiredTx"</property>
          <property name="pointcut">"_get.*,_post.*"</property>
        </component>
      </arg>
    </initMethod>
    <initMethod name="addCustomizer">
      <arg>
        <component

class="org.seasar.framework.container.customizer.AspectCustomizer">
          <property name="interceptorName">"j2eezzzdb.requiredTx"</property>
          <property name="pointcut">"_get.*,_post.*"</property>
        </component>
      </arg>
    </initMethod>
  </component>
</components>
----------------------------------------------------------------------


ここまでの設定で、複数DB対応になります。
pointcutの部分は、プロジェクトの特性に合わせて、
カスタマイズしてください。
(_prerenderの追加はしたほうがよさそうな気はします。)


以上、よろしくお願いします。


金子 雄一 さんは書きました:
> 金子です。
> 
> さらに、試してみましたので、回答いたします。
>  > この方法で、どちらのDBに対してもDBアクセスができて、
> どのDBにも、Selectですが、アクセスできました。
> 
>  > トランザクションも発行出来たって感じでしょうか?
> ログを確認する限りは、問題なさそうです。
> 
> 【正常終了時の場合】
> 2009/09/10 20:22:18:990 - 【DEBUG】【クラス名】 
> org.seasar.extension.jta.TransactionImpl 【メソッド名】log --- トランザ 
> クションをコミットしました。tx=[FormatId=4360, GlobalId=1252581713442/0, 
> BranchId=]
> 
> 
> 【例外を発生させた場合】
> (今回は、無理やりRuntimeExceptionを発生させました。)
> 
> 2009/09/10 20:23:05:647 - 【DEBUG】【クラス名】 
> org.seasar.extension.jta.TransactionImpl 【メソッド名】log --- トランザ 
> クションをロールバックしました。tx=[FormatId=4360, 
> GlobalId=1252581713442/1, BranchId=]
> 
> 
> Teeda + DBFluteの複数DBのときとログの出方は、まったく同じです。
> 更新で試さないと、最終確認には、ならないですが、
> 今のところ、問題ないのではなかろうかと思います。
> (更新も、これから試してみます。)
> 
> 
> 以上、よろしくお願いします。
> 
> 
> kubo さんは書きました:
>> 久保(jflute)です。
>>
>> ちょっと興味本位ですが、
>> この方法で、どちらのDBに対してもDBアクセスができて、
>> トランザクションも発行出来たって感じでしょうか?
>> (簡単な検索で良いので)
>>
>> #
>> # 情報共有としての貴重なスレッドになるので、
>> # 最後丁寧にまとまるといいかなと思いまして。
>> #
>>
>> 2009/9/10 金子 雄一 <[E-MAIL ADDRESS DELETED]>:
>>> 金子です。
>>>
>>> ご回答ありがとうございます。
>>>
>>>> 全部置き換えてしまうと、バージョンアップなどでdiconの内容が変わった際に
>>>> 追従するのが大変ですので、コンポーネント単位の除去・定義の追加が好ま 
>>>> しい
>>>> と思います。
>>> 了解いたしました。
>>>
>>>> はい。また、ymir-customizer.diconをまるごと置き換えるのではなく、
>>>> ymir-customizer+pageCustomizer.diconを作ってPageCustomizerを差し替える
>>>> やり方をすればより良いかと思います。
>>> この方法にて、試してみました。
>>> 挙動自体、変わることはありませんでしたので、
>>> こちらの方法で行こうかと思います。
>>>
>>>
>>> ※ページクラスの自動生成もそうですが、
>>> 継続的に生成可能なのが、秀逸ですね。
>>> まだまだ、いろいろと試していこうかと思います。
>>>
>>>
>>> 以上、よろしくお願いします。
>>>
>>>
>>> YOKOTA Takehiko さんは書きました:
>>>> 横田です。
>>>>
>>>> 金子さん、こんにちは。回答が遅くなってすみませんでした。
>>>>
>>>> Ymir関連のdiconの一覧や包含関係についてはドキュメントがないので、近日
>>>> 中に作成します。ご不便をおかけしてすみません。
>>>>
>>>>> 今回は、クラスパス上にymir-customizer.diconを新たに作成しました。
>>>> ちなみにymir-customizer+.diconというファイルをクラスパス上に置くと、 
>>>> それ
>>>> がymir-customizer.diconよりも優先されるようになります。
>>>>
>>>> また、一部コンポーネント(pageCustomizer)だけを差し替えたければ、
>>>> クラスパス上に例えばymir-customizer+pageCustomizer.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>
>>>>   <component name="pageCustomizer"
>>>>     
>>>> class="org.seasar.framework.container.customizer.CustomizerChain" />
>>>> </components>
>>>>
>>>> のようにすればOKです。
>>>>
>>>>> 内容を見ると、どうやら、このdiconがcustomizer.diconと同等の動作を
>>>>> しているように見えます。
>>>> はい、そのとおりです。
>>>>
>>>>> おそらく、Ymirの機能の一つである、
>>>>> コンポーネント除去・定義の追加でもできるかと思います。
>>>>> 実際は、どちらが好ましいのでしょうか?
>>>> 全部置き換えてしまうと、バージョンアップなどでdiconの内容が変わった際に
>>>> 追従するのが大変ですので、コンポーネント単位の除去・定義の追加が好ま 
>>>> しい
>>>> と思います。
>>>>
>>>> コンポーネント単位の除去・定義の追加の詳細については
>>>>
>>>>   http://ymir.seasar.org/docs/1.0.x/ref/dicon
>>>>
>>>> を参照して下さい。
>>>>
>>>>> また、この手順で正しいでしょうか?
>>>> はい。また、ymir-customizer.diconをまるごと置き換えるのではなく、
>>>> ymir-customizer+pageCustomizer.diconを作ってPageCustomizerを差し替える
>>>> やり方をすればより良いかと思います。
>>>>
>>>
>>> -- 
>>> 金子 雄一 <[E-MAIL ADDRESS DELETED]>
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
> 
> 


-- 
金子 雄一 <[E-MAIL ADDRESS DELETED]>


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