【问题标题】:LDAP transaction in JavaJava 中的 LDAP 事务
【发布时间】:2011-01-10 19:25:32
【问题描述】:

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

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

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

感谢您的想法。

【问题讨论】:

    标签: java spring transactions ldap spring-ldap


    【解决方案1】:

    这是@adrianboimvaser 的后续。

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

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

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

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

    【讨论】:

    • 阅读规范链接和您的评论清楚地表明,虚假交易非常危险。无论如何,我仍然必须使用 LDAP,因为这是要求的一部分,而且那些大批量的情况很少见。我想我会自己跟踪插入,并在发生某些事情时尝试手动回滚它们。这基本上就是这些交易无论如何都会做的事情。
    【解决方案2】:

    【讨论】:

    猜你喜欢
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多