[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10519] Re: DB トランザク ション ( 度 々 commit/rollback を書きたくない)



宮本@muimiです。


>  下記のクライアント側のコードですが、現実的なコードにすると
>どうなるでしょうか?
>
>  やはり public boolean execute(Connection con) という定義だ
>けでは足りず、 SomeCommand, SelectCommand クラスにアクセスする
>ための統一的な interface を追加する必要があると思います。

public class ATMFacade{

  public void withdraw(Acount account, double amount) 
  throws NoBalanceException{

    TransactionMethod tm = new TransactionMethod();

    try {
      tm.execute(new WithDrawCommand(user, amount));}

    } catch (NoBalanceException e){
      throw e;

    } catch (Exception e) {
      throw new IllegalStateException();
    }
  }
}

うーん。。。。
例外処理がちょっとかっこ悪い。
引数と返り値がCommandにフィールドとメソッドを用意する必要あり。

Commandを追加していけば、
複数のロジックを含めたトランザクションも可能で(ネストできないが)
簡単なロジックは組み合わせで間に合いそうな感じはしたんですが、
いくつかの場面を試すと問題が出てくる可能性がありそう。


>  このあたりのことは、私が以前に紹介した
>    「J2EE Best Practices
>        - Java Design Patterns, Automation, and Performance - 」
>に解説されています。

Amazonで注文してしまいました。
ちなみに解説箇所は、何章あたりですか?