[jpa:94] Re: Kuina-Dao利用時にオブジェクトのネットワークを一括でロックする方法

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2008年 1月 11日 (金) 02:13:07 JST


中村(taedium)です。

> 考えついたのは次の2つですが、メリット/デメリットの判断が自分では難しいです。
> 1)Kuina-DaoのreadLock() / writeLock()
> メソッドで、根元のエンティティをロックする。(ただ、ロックを外すタイミングがよくわかりません。)
> 2)ロックテーブルのようなものを作って、ユーザーレベルでロックを実装する。

楽観的排他制御と業務排他制御のどちらが望ましいかに
よるのではないでしょうか。

1)の場合は、 writeLock()が適切だと思いますが、これは楽観的排他制御です。
この方法では、更新時、アプリで必ずルートのエンティティをwriteLock
してからルート以下の階層構造のエンティティを修正することになります。
複数人が同時に同じデータを修正し始めることができますが、
実際に更新に成功するのは一人になります。
それ以外のユーザーは更新に失敗します。

楽観的排他制御はエンティティのバージョン番号により行われるので
ロックを外すといった操作はいらないです。

2)は業務排他制御ですね。
この場合は、特定のユーザーにロックが明示的に取得されてから
そのユーザーによる修正と更新が行われることになると思います。
この間、他のユーザーは修正作業に着手できません。

こちらは明示的にロックを解除する操作が必要ですね。


更新の競合が許容できるなら1)、できないなら2) といったところでしょうか。
-- 
Toshihiro Nakamura



jpa メーリングリストの案内