お勉強メモ
トランザクション管理
最終更新:
匿名ユーザー
-
view
トランザクションには守るべきACID属性がある。
トランザクションの境界
プレゼンテーション層とビジネス層の間に引かれる。
アプリケーションアーキテクチャを柔軟なものにするなら2を積極的に使うこと。
2を使うにはEJBという選択肢もあるがEJBのコンポーネントはEJBコンテナに依存するのでテストがしにくい
2を利用するならトランザクションの境界となるのはサービスクラスのメソッド。
サービスクラスのメソッドが呼び出されたらトランザクションが開始され、メソッドが終了したらトランザクションがコミットされる
1を実装しなければいけないなら
プレゼンテーション層でトランザクションを実装し、ビジネス層に含まれるコンポーネントはトランザクションから自由にすべき。
トランザクションが入れ子になってしまうことを気にせず、ビジネス層に実在するコンポーネントを自由に組み合わせることができるから。
またそのときトランザクション管理は1箇所で行うように実装しないとダメ。
たとえばコントローラクラスでサービスクラスのメソッドを呼び出す前後にトランザクションの開始と終了を行うのがよいかもー。
ACID |
意味 |
解説 |
---|---|---|
Atomic |
トランザクションの原子性 |
トランザクション内の処理はすべて行われたかなにも行われなかったかのどちらかしかない。 |
Consistent |
データの一貫性 |
データに一貫性があること。一貫性を守っていない例:親テーブルがないのに子テーブルがある |
isolated |
トランザクションの独立性 |
並行して走るトランザクションが互いに独立していること |
Durable |
データの永続性 |
データが永続化されていること。永続化されているデータが読み出せること |
トランザクションの境界
プレゼンテーション層とビジネス層の間に引かれる。
- 明示的なトランザクション:ソースコードにそのままかく
- 宣言的なトランザクション:フレームワークなどから提供されるトランザクション処理にトランザクション管理を行わせることをいう
アプリケーションアーキテクチャを柔軟なものにするなら2を積極的に使うこと。
2を使うにはEJBという選択肢もあるがEJBのコンポーネントはEJBコンテナに依存するのでテストがしにくい
2を利用するならトランザクションの境界となるのはサービスクラスのメソッド。
サービスクラスのメソッドが呼び出されたらトランザクションが開始され、メソッドが終了したらトランザクションがコミットされる
1を実装しなければいけないなら
プレゼンテーション層でトランザクションを実装し、ビジネス層に含まれるコンポーネントはトランザクションから自由にすべき。
トランザクションが入れ子になってしまうことを気にせず、ビジネス層に実在するコンポーネントを自由に組み合わせることができるから。
またそのときトランザクション管理は1箇所で行うように実装しないとダメ。
たとえばコントローラクラスでサービスクラスのメソッドを呼び出す前後にトランザクションの開始と終了を行うのがよいかもー。