WebObjectsアプリケーションにおけるロック
2007/03/30 (Fri) 22:07:46 JST
WebObjectsの同時実行制御は基本的に同一のアプリケーションインスタンス内での処理が対象になっていますが、現実の運用では複数のアプリケーションインスタンスを起動します。
WebObjectsアプリケーションで同時実行制御が重要になるのは主にEOFでしょう。セッションを含む多くの資源はインスタンス間で共有しないのであまり問題はありませんが、EOFはデータベースのキャッシュを各インスタンスごとに持ってしまうことになります。この場合、次の場合に更新の競合が発生します。
- 複数のインスタンスで同時に同一のレコードを編集する
- データベースを直接SQLで叩いて編集する
いずれにせよ、完璧に防ぐことは難しいと思います。
一方アプリケーションインスタンス内でのEOFの同時実行制御は、 NSLocking の紳士協定を守っていれば十分だと思います。EOFのSQLレベルのロックも他インスタンスに対してはたいして役に立ちません。
実際に同一のレコードを複数のユーザが同時に編集することはそうそうないでしょうから、そのような状況にならないような設計にするのが最も手軽な予防策かと思います。
Inverse Pages: ロックについて