[Seasar-user:9686] Re: Pageクラスで強制ロールバック

kubo [E-MAIL ADDRESS DELETED]
2007年 8月 6日 (月) 10:29:25 JST


久保と申します。

> お世話になっております。TuMikiです。
> 
> Pageクラスで複数のDaoメソッドを作ろうとしています。
> 入力系ですので、エラーが発生したときにエラーページに飛ぶのではなく
> そのまま画面にメッセージを表示したいのですが、
> 普通に終わってしまうと、DBに対してコミットが発行されると予想しています。
> Pageクラス内で、強制的にロールバックを発行するサンプルとかありませんで
> しょうか?

私も同じような要件がありました。

自画面でそのままメッセージを出力するだけでなく、
  詳細画面で発生 → 検索一覧画面でメッセージ出力(or その他)
というように別の画面に遷移することもありました。
(かつ、TeedaのErrorPageManagerに登録するにはパターンが多すぎ)

自分は決定的な方法が見当たらず独自な仕組みでやってしまいました。

独自のInterceptor (Pageにたいして)
独自のAnnotation  (Pageにたいして) → 例外発生時の遷移先Pageクラスを指定

「独自のInterceptor」をPageに掛けて、Page内で発生したDao系例外(排他例外など)を
Catchして「Pageクラスに設定されている独自のAnnotation」の
遷移先Pageクラスをそのまま戻り値にして終了する。
(同時にメッセージも登録。例外はつぶす)。

@OptimistickLockRedirect(SakiPage.class)
public class MotoPage {
}

というような感じです。


以前、[Seasar-user:7784] Re: [DBFlute,S2DAO]Re: 楽観的排他制御について
でも同様の質問が来ています。結構皆同じような問題で悩むようですね。

その時は答えがなかったのですが、
どうやらUserTransactionを直接触るとかで実現できるようですね。
(by [Seasar-user:9676])
アプリで独自にInterfaceで隠蔽等すれば、
そんなに気にせず利用できるかもしれませんね。





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