1

OpenLDAP を LDAP サーバーとして使用し、UnboundID を使用して Java コードを介して対話しています。エンティティ B の他のいくつかのインスタンス Y1、.. Yn が論理的にリンクされているエンティティ A の特定のインスタンス X の削除を処理する必要があります。これは、最初に B (Y1, ... Yn) のすべてのインスタンスを削除する必要があり、その後 X も削除する必要があることを意味します。トランザクションを中止するために、トランザクションを使用してそれを実行できるようにしたいと考えています。 Y1、..Ynのいずれかを削除しているときに何か問題が発生し、ロールバックする可能性がある場合。次の例に従ってみました。

https://www.unboundid.com/products/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/extensions/StartTransactionExtendedRequest.html

私が得たのは、拡張操作がサポートされていないことを示す LDAPException です。トランザクションを処理するにはどうすればよいですか? OpenLDAP はトランザクションをサポートしていると思います...

4

2 に答える 2

3

私は OpenLDAP の最新情報について詳しく知りませんが、最後に聞いたのは、RFC 5805 で説明されているように、OpenLDAP は LDAP トランザクションのサポートをまだ追加していないということでした。ルート 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 クラスを使用して、サーバーが削除を受け入れるかどうかを確認するために削除要求に含めることができます。すべてのエントリを削除し、すべてが成功するように見える場合にのみ削除を続行します。それ以外の場合は、アプリケーションにログを保持して、障害が発生した場合に削除されたものとそうでないものを報告できるようにすることができます。

ニール

于 2012-07-06T02:53:27.743 に答える
1

この種のことをまったく行う必要はありません。OpenLDAP 'refint' 参照整合性モジュールは、それらの属性の参照整合性を維持するように指示した場合、二次削除を実行できるため、一次削除のみを行う必要があります。

于 2012-07-07T07:02:14.810 に答える