PoEAA ch16 Implicit Lock
Implicit Lock
Allows framework or layer supertype code to acquire offline locks.
- Offline Lockは、1行忘れただけで全部台無しになる
- read lockの取得が漏れると、最新のセッションデータを取得できている保証はない
- 他のトランザクションがwrite lockを取得していたとき
- バージョンを適切に使わないと、他人の変更を上書いてしまう
- どこでもロックされうるものは、全ての場所でロックしなければならない
- アプリケーションのロック戦略に従わないとデータ整合性を失う
- ロックを解放し忘れると、レコードデータが駄目になることはないが、アプリケーションはやがて止まってしまう
- 【補】そのうちロックを獲得できなくなる
- read lockの取得が漏れると、最新のセッションデータを取得できている保証はない
- 開発者が明示的に書くと見落としが発生する
- しかもテストが難しい
- そこで、アプリケーション側で暗黙裡に行うようにする
- フレームワークに組み込む
- Layer Supertypeに書く
- コード生成
How It Works
- ロック機構を、絶対にスキップされないようにする
- アプリケーションフレームワークに組み込む
- ここにおいて「フレームワーク」とは
- コード生成という別の道も
- 実装する上では、まずビジネストランザクションで必要なタスクをリストアップする
- exclusive write lock、read/write lockのwrite portionを暗黙裡に獲得するのは困難
- 変更をcommitする前に確実にwrite lockを獲得すること
- フレームワークで、assertion failureもしくは例外送出で保証
- 本番環境では無効化する
- 開発の誤りを見つけるためのものであって、本番環境でエラーを出したいわけではないため
- 本番環境では無効化する
- フレームワークで、assertion failureもしくは例外送出で保証
- Implicit Lockは万能ではない
When to Use It
- フレームワークを使っていないシンプルなアプリケーションでもない限り使うべき
- ロック周りは「忘れる」リスクが甚大
英語
- ground-breaking
- 画期的な