[Seasar-user:18486] Re: [Ymir][DBFlute] Ymir + DBFluteで複数DBの使用
金子 雄一
[E-MAIL ADDRESS DELETED]
2009年 9月 11日 (金) 16:31:19 JST
金子です。
> まとめていただいた内容を公式サイトに記載させていただきたいのですが、
> いかがでしょうか?
もちろん、載せて頂いてかまいません。
というか、こちらから、載せて下さいと、
お願いしたいくらいです。
何もないと、1ヵ月後には、忘れそうです・・・。
以上、よろしくお願いします。
YOKOTA Takehiko さんは書きました:
> 横田です。
>
> 金子さん、うまくいったようでよかったです。しかも結果を丁寧にまとめて
> いただいて感謝します。
>
> まとめていただいた内容を公式サイトに記載させていただきたいのですが、
> いかがでしょうか?
>
>
> 金子 雄一 さんは書きました:
>> 金子です。
>>
>> 更新も試してみました。
>>
>> 正常終了の場合 ⇒ 全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 メーリングリストの案内