Экспорт и импорт данных apacheds в LDIF программно из java
Я создал сервер в Apache Directory Studio. Я также создал раздел и вставил некоторые записи на этот сервер из Java. Теперь я хочу сделать резервную копию и восстановить эти данные в файле LDIF программно. Я новичок в LDAP. Поэтому, пожалуйста, покажите мне подробный способ экспорта и импорта записей программно с помощью java с моего сервера в LDIF.
текущее решение:
теперь я использую этот подход для резервного копирования:
EntryCursor cursor = connection.search(new Dn("o=partition"), "(ObjectClass=*)", SearchScope.SUBTREE, "*", "+");
Charset charset = Charset.forName("UTF-8");
Path filePath = Paths.get("src/main/resources", "backup.ldif");
BufferedWriter writer = Files.newBufferedWriter(filePath, charset);
String st = "";
while (cursor.next()) {
Entry entry = cursor.get();
String ss = LdifUtils.convertToLdif(entry);
st += ss + "n";
}
writer.write(st);
writer.close();
для восстановления я использую это:
InputStream is = new FileInputStream(filepath);
LdifReader entries = new LdifReader(is);
for (LdifEntry ldifEntry : entries) {
Entry entry = ldifEntry.getEntry();
AddRequest addRequest = new AddRequestImpl();
addRequest.setEntry(entry);
addRequest.addControl(new ManageDsaITImpl());
AddResponse res = connection.add(addRequest);
}
но я не уверен, что это правильный путь.
проблема этого решения:
когда я делаю резервную копию своей базы данных, он записывает записи в LDIF случайным образом, поэтому восстановление не работает, пока я не исправлю порядок записей вручную. Я есть лучший способ? Пожалуйста, кто-нибудь, помогите мне.
2 ответов
после долгого поиска я действительно понимаю, что решение восстановления записей является простой рекурсией. В процедуре резервного копирования записи не печатаются случайным образом, она поддерживает порядок дерева. Таким образом, простая рекурсия может хорошо упорядочить записи. Вот пример кода, который я использую-
void findEntry(LdapConnection connection, Entry entry, StringBuilder sb)
throws LdapException, CursorException {
sb.append(LdifUtils.convertToLdif(entry));
sb.append("\n");
EntryCursor cursor = connection.search(entry.getDn(), "(ObjectClass=*)", SearchScope.ONELEVEL, "*", "+");
while (cursor.next()) {
findEntry(connection, cursor.get(), sb);
}
}
Ну, вы помечены как Java и поэтому посмотрите на UnboundID LDAP SDK или, как вы используете APacheDS, почему бы не посмотреть на API LDAP Apache
любой из них будет работать. В настоящее время я использую [UnboundID LDAP SDK], которые имеют [Ldif-специфические API].3. Я предполагаю, что [Apache LDAP API] также делает, но я не использовал их.