4

我必须为我们的用户管理工具创建一个批量插入功能。我们使用 Spring LDAP 构建了一个小型内部库,并且对于单用户管理 (CRUD) 来说一切正常。

我想尝试一次插入数百条记录并在出现问题时回滚。

有没有办法像在数据库中一样在 LDAP 中创建事务?

谢谢你的想法。

4

2 回答 2

3

看看文档:http ://static.springsource.org/spring-ldap/docs/1.2.0-rc1/reference/#transactions

于 2011-01-10T19:33:55.990 回答
3

这是@adrianboimvaser 的后续行动。

请注意,Spring LDAP 事务支持不使用 XA 事务,而是使用“逻辑”补偿事务,因此 LDAP 的回滚将是对 LDAP 的补偿动作。虽然这是对无事务的改进,但请注意,这与“就像它存在于数据库中”的典型事务不同。即不支持事务的ACID属性。

请注意,即使使用相同的逻辑事务,这也不是 JTA XA 事务;不会执行两阶段提交,因此提交和回滚可能会产生意想不到的结果。

例如:如果您要向 LDAP 添加 100 个条目,则每条记录将一一添加到 LDAP。如果最后一次添加失败,则回滚操作将删除事务中先前创建的 99 个条目。但是,如果由于某种原因(例如,网络连接下降到 LDAP,这导致第 100 个条目失败)前 99 个条目实际上无法删除,那么即使您尝试回滚事务,您也会在数据库和 LDAP。即 LDAP 中将有 99 条记录(因为它们无法删除)在数据库中不存在(因为这些记录从未插入或实际回滚)。

我不确定您的情况是什么,但如果您经常对 LDAP 进行大量更新,您可能需要考虑使用实际数据库来避免事务头痛以及优化性能,因为 LDAP 是为快速读取和相对较慢的写入而设计的。

于 2011-01-10T20:25:41.233 回答