我在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,因此在我手动修复条目顺序之前,恢复不起作用。我有更好的方法吗?请有人帮助我。
答案 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]也有,但我还没有使用它们。