複数DBにまたがるトランザクション制御について

273 views
Skip to first unread message

Kaneko

unread,
Jan 24, 2018, 2:45:10 AM1/24/18
to DBFluteユーザの集い
Kanekoです。

案件に直接かかわるものではないのですが、
LaContainer+ LastaFlute において、
複数DBにまたがるトランザクション制御の設定は、
どのような記載を行えばよいのでしょうか?

S2Container + Teeda だと、customizer.dicon に以下の記載をすると、
複数DBにまたがるトランザクション制御ができるようになります。

  <component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.framework.container.customizer.AspectCustomizer">
          <initMethod name="addInterceptorName">
            <arg>"j2eesalondb.requiredTx"</arg>
          </initMethod>
          <property name="pointcut">"do.*, initialize, prerender"</property>
        </component>
      </arg>
    </initMethod>
    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.framework.container.customizer.AspectCustomizer">
          <initMethod name="addInterceptorName">
            <arg>"j2eereportdb.requiredTx"</arg>
          </initMethod>
          <property name="pointcut">"do.*, initialize, prerender"</property>
        </component>
      </arg>
    </initMethod>
・・・・


※もしかしたら、Teeda + S2Container + DBFlute(Ver0.9.7) を LastaFlute + LaContainer + DBFlute(Latest) に移行するかもしれません。
※その場合、Conversationどうしよう問題が発生しそうですが。。。。


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

kubo

unread,
Jan 24, 2018, 2:57:39 AM1/24/18
to DBFluteユーザの集い
jfluteです

Kanekoさん、こんにちは

> 複数DBにまたがるトランザクション制御の設定は、
> どのような記載を行えばよいのでしょうか?

やり方は基本的にSeasarと同じになるはずです。
customizer.dicon ではなく、my_customizer.xml を用意します。
基本的に、フレームワーク組み込みの Di xml をコピー修正する
必要がないような構成に変えています。
(つまり、差分設定になるようにしている)

// Di xml Hierarchy
http://dbflute.seasar.org/ja/lastaflute/lastadi/#hierarchy

でも、そもそもその辺って別に customizer.dicon をいじらなくても、
Transactionって連動しなかったっけ?ってのがちょっと気になりました。

2フェーズコミットはそもそもSeasarもサポートしていないので、
それは同じようにできないですが、
Transactionを開始したら複数のDBのTransactionが同時に
開始されるような気がします。
実際の業務で複数DBがありますが、
その辺のdiconは全然いじってないですね...。

もうちょっと、どうだったっけ?ってのを掘り返さないとなんとも...


> ※もしかしたら、Teeda + S2Container + DBFlute(Ver0.9.7) を LastaFlute + LaContainer + DBFlute(Latest) に移行するかもしれません。
おおおぉぉ

> ※その場合、Conversationどうしよう問題が発生しそうですが。。。。
TeedaなのでSubApplicationScopeになると思いますが、
SubApplicationScopeであれば頑張れば自前で作れそうな気も。

kubo

unread,
Jan 24, 2018, 3:12:27 AM1/24/18
to DBFluteユーザの集い
jfluteです

> Transactionを開始したら複数のDBのTransactionが同時に
> 開始されるような気がします。
> 実際の業務で複数DBがありますが、
> その辺のdiconは全然いじってないですね...。

Teedaだとちょっと違うかも。
LastaFluteは、もとは SAStruts なので、
Teeda と SAStruts の違いってところで注目した方がいいかもですね。

SeasarのTransactionは、
TransactionUtil.enlistResource()が象徴的ですが、
複数のデータソースを一つのTransactionでまとめて
管理ができるようになっています。

Kaneko

unread,
Jan 25, 2018, 12:10:02 AM1/25/18
to DBFluteユーザの集い
Kanekoです。

返信ありがとうございます。
2フェーズコミットがサポートされていないのは知っていたので、
そこは、割り切ってます。

ADB 更新 ⇒ OK
BDB 更新 ⇒ エラー

ってなった場合に、ADBの方もロールバックがかかればよいレベルです。
(これは、S2Container + Teedaの場合は、前述の設定を入れるとできるようになる。)

Lastaの場合は、特にいじらなくても、それができるということであれば、それで試してみます。
(Springならちょこっと設定書いて、@Transactional 付けて終わりだったと記憶)

>TeedaなのでSubApplicationScopeになると思いますが、 
>SubApplicationScopeであれば頑張れば自前で作れそうな気も。 
Teedaなので、SubApplicationScopeなのですが、
あれはあれで、挙動として同なんだと思うこともあり、
やるなら、YmirのConversation の形の方が使いやすいのではないかと想像しています。
※開発当時はTeedaは、ものすごく楽でしたが、、、、、

いっそ、MVCJS(Riot.js や vue.js など)をつかって、
ドラスティックに作り直しという考えも浮かびましたが、
移植がしんどすぎて、現実的に厳しい気がしてます。



2018年1月24日水曜日 17時12分27秒 UTC+9 jflute:
Reply all
Reply to author
Forward
0 new messages