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

kubo [E-MAIL ADDRESS DELETED]
2009年 9月 10日 (木) 22:30:40 JST


久保(jflute)です。

金子さん、素晴らしいご報告ありがとうございます。
ほとんどドキュメントみたいな感じですね。とても助かります。

2009/9/10 金子 雄一 <[E-MAIL ADDRESS DELETED]>:
> 金子です。
>
> 更新も試してみました。
>
> 正常終了の場合 ⇒ 全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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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