在业务应用程序中,尽管很多订单数据以更改模式 (change mode) 显示,但该数据被更改的可能性并不高。
如果不同用户同时拜访数据,则锁定过程必须保证数据更改的一致性。
SAP 引入了锁概念(“enqueue”),用于 ABAP 程序中的锁定。当数据更改的可能性很高时,应用 pessimistic locking(乐观锁)无效。
但思考到在任何给定的工夫点,数据只能在多个并行对话框之一中显示为可更改状态。
在这种状况下,引入除了 pessimistic locking 之外的另一种锁机制就显得有必要了。
Optimistic Locks(乐观锁) 容许在所有并行对话框中将界面切换成可编辑状态。
然而,业务应用程序必须意识到,在用户本人的更改失效之前,最后显示的数据可能曾经产生了更改。
锁定过程必须可能检测到这种状况,以便业务应用程序有可能采取抵触解决策略。
除了锁模式 S、E 和 X 之外,还存在乐观锁的锁模式 O。
如果用户以更改模式显示数据,则设置 Optimistic Locks(模式 O)。
同一对象上的乐观锁不会发生冲突。
如果用户想要保留(更改的)数据,则必须将乐观锁转换为排它锁(模式 E)。
该转换是应用锁定模式 R
实现的。如果有人之前在对象上设置了 非乐观锁
,或者另一个 O 锁已被晋升,则转换会失败。
如果降级胜利,则删除该对象上的其余乐观锁,并且该锁体现为 E 锁。
乐观锁与其余锁的区别在于,竞争的乐观锁首先是互相兼容的,并不互相排挤。如果产生锁抵触,则稍后才会验证。对于锁所有者来说,锁抵触体现为锁的内部更改(以后锁用户可留神到),从而使乐观锁生效。