Java中的LDAP事务
作者:互联网
我必须为我们的用户管理工具创建一个批量插入功能.我们使用spring LDAP构建了一个小型内部库,一切都适用于单用户管理(CRUD).
我想尝试一次插入数百条记录并在出现问题时回滚.
有没有办法在LDAP中创建事务,就像它存在于数据库中一样?
谢谢你的想法.
解决方法:
这是@adrianboimvaser的后续内容.
请注意,Spring LDAP transaction support不使用XA事务,而是使用“逻辑”补偿事务,因此LDAP的回滚将是针对LDAP的补偿操作.虽然这是一项改进,但没有任何交易可以意识到这与典型的交易“不一样”,就像它存在于数据库中一样.即不支持交易的ACID属性.
Note that even though the
same logical transaction is used, this
is not a JTA XA transaction; no
two-phase commit will be performed,
and thus commit and rollback may yield
unexpected results.
例如:如果要向LDAP添加100个条目,则每个记录将逐个添加到LDAP.如果上次添加失败,则回滚操作将删除事务中先前创建的99个条目.但是,如果由于某种原因(例如,网络连接是由于导致第100个条目失败的LDAP),前99个条目实际上无法被删除,那么即使您尝试回滚事务,也会导致之间的不一致.数据库和LDAP.即LDAP中将有99条记录(因为它们无法删除),这些记录在数据库中不存在(因为这些记录从未插入或实际回滚过).
我不确定您的情况是什么,但如果您经常对LDAP进行大量更新,您可能需要考虑使用实际数据库来避免事务问题以及优化性能,因为LDAP设计用于具有相对较慢写入的快速读取.
标签:java,spring,ldap,transactions,spring-ldap 来源: https://codeday.me/bug/20190531/1188880.html