[Seasar-user:210] Re: Rulet 内で呼び出した Sqlet の rollback(Sqlet 機能を切り出して利用したい )

B isid.co.jp Yasuo Higa higa
2003年 11月 25日 (火) 11:09:59 JST


<[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:209] Rulet 内で呼び出した Sqlet の rollback(Sqlet 機能を切り出して利用したい )" において、
   "sue <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。

> こんにちは。sueです。
> 
> 次のステップとしてトランザクションに関する検証をおこなっている
> のですが、新たに2点ほど疑問点が沸いてしまいました。
> 基本的なことかも知れませんが、何卒アドバイスを頂けませんで
> しょうか?
> 
> [質問1]
> 以下の実装を検討しています。
> DBに対してのUPDATE文含むトランザクション処理。UPDATE文を発行
> した後、ロジックでホゲホゲしてその中で処理エラーが発生した
> 場合は、発行したUPDAT文をロールバックさせる。UPDATEの部分は
> SQLETにて実装。
> 
> ドキュメントを読ませていただいた結果、
> ・トランザクション全体の処理をRuletで実装しRequiresNewTxとする
> ・RuletからSqletを呼び出す
> ・呼び出されるSqletはtransAttribute属性はつけない
> とするのが良いかな?と考えたのですが如何なものでしょうか?
> (後々、Ruletの部分はFlowletに置き換えたいと考えています。。。)
> 
UPDATE文を発行するSqletが単独でも呼び出される可能性があるなら、
transAttribute=Required、そうでないならトランザクション属性なし。
トランザクション全体をコントロールするRuletはRequiredTxが
良いと思われます。
トランザクション属性は、Requiredにしておけば、最初に呼び出されても
トランザクション中に呼び出されてもOKなので、
絶対に独立したトランザクションにしたい場合を除いて、
Requiredが良いと思います。
> 
> [質問2]
> 件名の質問なのですが、Rulet内で意識的にトランザクションを
> rollbackさせたい処理があります。実際に試してみたところ、
> Rulet内で明示的にSeasarExceptionをthrowすることにより
> 制御が出来ているようなのですが、この方法で問題ありません
> でしょうか?
> 
特に問題ありません。
感覚的には、rollbackさせたいから、例外をthrowするというより、
異常ケースで例外が発生したから、RuleEngineが自動的にrollbackした
いう感じですが、あくまでも感覚的なことです。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



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