※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

トランザクションには守るべきACID属性がある。
ACID
意味
解説
Atomic
トランザクションの原子性
トランザクション内の処理はすべて行われたかなにも行われなかったかのどちらかしかない。
Consistent
データの一貫性
データに一貫性があること。一貫性を守っていない例:親テーブルがないのに子テーブルがある
isolated
トランザクションの独立性
並行して走るトランザクションが互いに独立していること
Durable
データの永続性
データが永続化されていること。永続化されているデータが読み出せること


トランザクションの境界
プレゼンテーション層とビジネス層の間に引かれる。

  1. 明示的なトランザクション:ソースコードにそのままかく
  2. 宣言的なトランザクション:フレームワークなどから提供されるトランザクション処理にトランザクション管理を行わせることをいう
2を利用することによってビジネス層に含まれるコンポーネントは自由に組み合わせることができ、開発者もトランザクションを意識することなくロジックの記述に専念できる

アプリケーションアーキテクチャを柔軟なものにするなら2を積極的に使うこと。

2を使うにはEJBという選択肢もあるがEJBのコンポーネントはEJBコンテナに依存するのでテストがしにくい

2を利用するならトランザクションの境界となるのはサービスクラスのメソッド。
サービスクラスのメソッドが呼び出されたらトランザクションが開始され、メソッドが終了したらトランザクションがコミットされる

1を実装しなければいけないなら
プレゼンテーション層でトランザクションを実装し、ビジネス層に含まれるコンポーネントはトランザクションから自由にすべき。
トランザクションが入れ子になってしまうことを気にせず、ビジネス層に実在するコンポーネントを自由に組み合わせることができるから。
またそのときトランザクション管理は1箇所で行うように実装しないとダメ。
たとえばコントローラクラスでサービスクラスのメソッドを呼び出す前後にトランザクションの開始と終了を行うのがよいかもー。