【发布时间】:2011-01-10 19:25:32
【问题描述】:
我必须为我们的用户管理工具创建一个批量插入功能。我们使用 Spring LDAP 构建了一个小型内部库,对于单用户管理 (CRUD),一切正常。
我想尝试一次插入数百条记录并在出现问题时回滚。
有没有办法像在数据库中一样在 LDAP 中创建事务?
感谢您的想法。
【问题讨论】:
标签: java spring transactions ldap spring-ldap
我必须为我们的用户管理工具创建一个批量插入功能。我们使用 Spring LDAP 构建了一个小型内部库,对于单用户管理 (CRUD),一切正常。
我想尝试一次插入数百条记录并在出现问题时回滚。
有没有办法像在数据库中一样在 LDAP 中创建事务?
感谢您的想法。
【问题讨论】:
标签: java spring transactions ldap spring-ldap
这是@adrianboimvaser 的后续。
请注意,Spring LDAP transaction support 不使用 XA 事务,而是使用“逻辑”补偿事务,因此 LDAP 的回滚将是对 LDAP 的补偿操作。虽然这是对无事务的改进,但请注意,这与“就像它存在于数据库中一样”的典型事务不同。即不支持事务的ACID 属性。
请注意,即使 使用相同的逻辑事务,这 不是 JTA XA 交易;不 将执行两阶段提交, 因此提交和回滚可能会产生 意想不到的结果。
例如:如果您要向 LDAP 添加 100 个条目,则每条记录将一一添加到 LDAP。如果最后一次添加失败,则回滚操作将删除事务中先前创建的 99 个条目。但是,如果由于某种原因(例如,网络连接下降到 LDAP,这导致第 100 个条目失败)前 99 个条目实际上无法删除,那么即使您尝试回滚事务,您也会在数据库和 LDAP。即 LDAP 中将有 99 条记录(因为它们无法删除)在数据库中不存在(因为这些记录从未插入或实际回滚)。
我不确定您的情况是什么,但如果您经常对 LDAP 进行大量更新,您可能需要考虑使用实际数据库来避免事务头痛以及优化性能,因为 LDAP 是为快速读取而设计的,相对而言写入速度较慢。
【讨论】:
【讨论】: