Экспорт и импорт данных 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] также делает, но я не использовал их.