[Force.com] Salesforceにおける排他処理
排他のことを調べた範囲では、以下の記事が優秀だと思いました。
標準画面は、デフォルトで楽観排他が提供されます。それ以外は自前での実装です。
この中から気になるところをピックアップ
- Apexコードの呼び出しから終了までのすべての処理は1つのトランザクション
- 実行時例外が投げられるとトランザクションはロールバック
- コード中で明示的に、ある時点までのロールバック処理を実行できるが、ガバナ制限により、Savepointは1トランザクションにつき5つまで
- トランザクションの分離レベル(Isolation level)は、JavaEE仕様の"Read Committed"に似た動作
- Webアプリケーションでよく用いられるのは、「楽観的(Optimistic)ロック」であり、多くの業務にフィットする。
- Force.comでは、楽観ロックに SystemModstamp項目を利用できる。
- この項目はレコードに対して何らかの更新操作が行われるとシステムにより値が更新されるので、データ取得時とコミット直前でこの値の変化を見れば良い。