我并没有真正了解 OpenLDAP 的最新信息,但我听到的最后一个消息是 OpenLDAP 尚未添加对 RFC 5805 中描述的 LDAP 事务的支持。但是,您应该能够通过查看 OpenLDAP 来检查这一点根 DSE。在 UnboundID LDAP SDK for Java 中,您可以使用如下代码执行此操作:
RootDSE rootDSE = ldapConnection.getRootDSE();
boolean supportsTransactions = rootDSE.supportsExtendedOperation(
StartTransactionExtendedRequest.START_TRANSACTION_REQUEST_OID);
如果 OpenLDAP 服务器还不支持事务,那么您可能无法做任何事情来使其真正原子化并且在遇到问题时能够回滚。如果 OpenLDAP 支持实验性 LDAP 无操作控制(我认为确实如此),那么您可以使用 com.unboundid.ldap.sdk.experimental.DraftZeilengaLDAPNoOp12RequestControl 类将其包含在删除请求中,以查看服务器是否会接受删除所有条目,然后只有在看起来它们都将成功时才继续删除。否则,您可以在应用程序中保留日志,以便在发生故障时报告哪些内容已删除,哪些内容未删除。
尼尔