虽然Spring LDAP用于提供事务支持的方法在许多情况下已经足够了,但它绝不是传统意义上的“真实”事务。 服务器完全不知道事务,因此(例如),如果连接断开,则无法回滚事务。 虽然应该仔细考虑这一点,但也应该注意,另一种选择是在没有任何事务支持的情况下操作。Spring LDAP的事务支持几乎是最好的。 |
除了原始操作所需的工作之外,客户端事务支持还会增加一些开销。
虽然在大多数情况下,这种开销不应该是需要担心的,
如果应用程序未在同一事务中执行多个 LDAP 操作(例如,后跟 ),
或者,如果不需要与 JDBC 数据源进行事务同步(请参阅 JDBC 事务集成),则使用 LDAP 事务支持将收效甚微。modifyAttributes rebind |
虽然此设置适用于大多数简单用例,但一些更复杂的方案需要额外的配置。
具体来说,如果需要在事务中创建或删除子树,则需要使用替代方法,如重命名策略中所述。TempEntryRenamingStrategy |
提供的支持都是客户端的。 打包的事务不是 XA 事务。不执行两阶段提交,因为 LDAP 服务器无法对其结果进行投票。 |
LDAP操作 | 录音 | 制备 | 犯 | 反转 |
---|---|---|---|---|
|
记录要绑定的条目的 DN。 |
绑定条目。 |
无操作。 |
使用记录的 DN 解除绑定条目。 |
|
记录原始 DN 和目标 DN。 |
重命名条目。 |
无操作。 |
将条目重命名为其原始 DN。 |
|
记录原始 DN 并计算临时 DN。 |
将条目重命名为临时位置。 |
解除临时条目的绑定。 |
将临时位置的条目重命名为其原始 DN。 |
|
记录原始 DN 和新 DN,并计算临时 DN。 |
将条目重命名为临时位置。 |
在原始 DN 处绑定新条目,并将原始条目从其临时位置解除绑定。 |
将临时位置的条目重命名为其原始 DN。 |
|
记录条目的 DN 以修改并计算要完成的修改的补偿实例。 |
执行该操作。 |
无操作。 |
使用计算出的补偿实例执行操作。 |
在某些情况下不起作用。例如,如果计划执行递归删除,则需要使用 .这是因为递归删除操作实际上由子树中每个节点的深度优先删除组成。由于您无法重命名具有任何子项的条目,并且会将每个节点保留在同一子树中(具有不同的名称),而不是实际删除它,因此此操作将失败。如有疑问,请使用 .DefaultTempEntryRenamingStrategy DifferentSubtreeTempEntryRenamingStrategy DefaultTempEntryRenamingStrategy DifferentSubtreeTempEntryRenamingStrategy |