Программно экспортировать и импортировать данные Apache в 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 случайным образом, поэтому восстановление не работает, пока я не исправлю порядок записей вручную. Есть ли лучший способ? Пожалуйста, помогите мне.


person Emdadul Sawon    schedule 24.12.2014    source источник


Ответы (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);
  }
}
person Emdadul Sawon    schedule 25.03.2015

Ну, вы пометили как Java, поэтому посмотрите на UnboundID LDAP SDK или, поскольку вы используете APacheDS, почему бы не взглянуть на API Apache LDAP

Любой из них будет работать. В настоящее время я использую [UnboundID LDAP SDK], который имеет [специальные API LDIF].3. Я предполагаю, что [Apache LDAP API] тоже работает, но я их не использовал.

person jwilleke    schedule 25.12.2014
comment
Я использую eclipse и причал. - person Emdadul Sawon; 29.12.2014
comment
Оба упомянутых мной SDK предназначены для Java. Они должны нормально работать с Eclipse и Jetty. - person jwilleke; 29.12.2014