以编程方式从Java导出和导入apached数据到LDIF

时间:2014-12-24 11:38:37

标签: java ldap apacheds ldif

我在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 个答案:

答案 0 :(得分:9)

经过长时间的搜索,我实际上明白恢复条目的解决方案是一个简单的递归。在备份过程中不会以随机方式打印条目,它维护树的顺序。因此,简单的递归可以很好地排序条目。这是我使用的示例代码 -

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);
  }
}

答案 1 :(得分:1)

好吧,你标记为Java,所以看看UnboundID LDAP SDK或者当你使用APacheDS时,为什么不看Apache LDAP API

他们中的任何一个都会奏效。我目前使用[UnboundID LDAP SDK],其中包含[LDIF特定API]。3。我假设[Apache LDAP API]也有,但我还没有使用它们。