ContentSyncRequestControl
Unboundid sdkを使用して変更 (追加、削除、変更) されたエントリを検索する必要がありますが、変更されたエントリの状態のすべてのエントリが表示されます。
私が今までやってきたこと
LDAPConnection ldapConnection = null;
try {
/*Apache LDAP*/
ldapConnection = new LDAPConnection("192.168.0.0", 389);
ldapConnection.bind("uid=test,ou=system", "mypassword");
Scanner sc = new Scanner(System.in);
ASN1OctetString cookie = null;
int choice = 3;
while (true) {
SearchRequest searchRequest = new SearchRequest(ldapConnection
.getRootDSE().getAttributeValue("namingContexts"),
SearchScope.SUB, "(&(objectclass=person))",
"createTimestamp","modifyTimestamp","sn","mobile","givenName","ucMiddleName","mail",
"isDeleted");
ContentSyncRequestControl control = new ContentSyncRequestControl(ContentSyncRequestMode.REFRESH_AND_PERSIST);
//added control to request
searchRequest.addControl(control);
final SearchResult searchResult = ldapConnection.search(searchRequest);
java.util.List<SearchResultEntry> entries = searchResult
.getSearchEntries();
int count = 0;
for (SearchResultEntry entry : entries) {
System.out.println(entry.getAttributes());
++count;
}
System.out.println("Press 0 for exit");
choice = sc.nextInt();
if (choice == 0) {
System.exit(0);
}
}
} catch (LDAPSearchException e) {
e.printStackTrace();
} catch (LDAPException e) {
e.printStackTrace();
}
しかし、これは、変更されたエントリの状態のすべてのエントリを表示します。
また、ContentSyncRequestControl
クラスAPI のドキュメントに目を通すと、次の点に注意する必要があることがわかりました。しかし、私はこれを次のように設定する方法がわかりません
1] 関連付けられた検索リクエストには SearchResultListener が必要です。これにより、検索が完了するのを待つ必要がなく、エントリをリストに格納して大量のメモリを消費するのではなく、エントリが返されたらすぐに利用できるようになります。検索が完了したときにのみ使用可能になります。
2] 検索から返されるエントリと参照には、関連する entryUUID を持つ ContentSyncStateControl と、場合によっては更新された同期セッション状態を持つ Cookie が含まれている必要があります。同期状態情報を含むコントロールを取得するには、検索結果のエントリと参照に対して getControl(ContentSyncStateControl.SYNC_STATE_OID) を呼び出す必要があります。
3] 検索が完了した場合、SearchResult には、更新された同期状態情報を含む ContentSyncDoneControl が含まれる場合があります。getResponseControl(ContentSyncDoneControl.SYNC_DONE_OID) を呼び出して、同期状態情報を含むコントロールを取得する必要があります。
誰でもこれについて私を助けることができますか? ありがとう...
編集
コントロールを追加した後も、変更されたエントリの状態ですべてのエントリを取得しています。
今私は使用しています
ContentSyncRequestControl(ContentSyncRequestMode mode)
コンストラクターでは、この形式のコンストラクターをどのように使用できますか?誰かが私を助けることができますか
ContentSyncRequestControl(boolean isCritical, ContentSyncRequestMode mode, ASN1OctetString cookie, boolean reloadHint)
使用しContentSyncRequestMode.REFRESH_ONLY
ているときはすべてのエントリが表示されますが、ContentSyncRequestMode.REFRESH_AND_PERSIST
モードを使用しているときは無限ループに入ります。
だから誰かがこれについて私を助けることができます...?