LDIF ファイルから LDAP サーバーへの一括インポートを実行できるようにしたいと考えています。UnboundID LDAP SDK を使用する実用的な実装 (以下) があります。これに関する問題は、LDIF の各エントリをループし、大きなファイル (数百万のエントリ) では非常に遅くなることです。高速インポートに使用できるツール/SDK はありますか? これをプログラムで(できればJavaで)達成できるようにする必要があります。
public static void importLdif(){
try{
LDAPConnection connection = new LDAPConnection("ldapserver.com", 389,
"uid=admin,ou=system", "secret");
LDIFReader ldifReader = new LDIFReader("C:/Users/ejamcud/Desktop/LDAP/ldifs/Sailors.ldif");
int entriesRead = 0;
int entriesAdded = 0;
int errorsEncountered = 0;
Entry entry;
LDAPResult addResult;
while (true)
{
try
{
entry = ldifReader.readEntry();
if (entry == null)
{
System.out.println("All entries have been read.");
break;
}
entriesRead++;
}
catch (LDIFException le)
{
errorsEncountered++;
if (le.mayContinueReading())
{
// A recoverable error occurred while attempting to read a change
// record, at or near line number le.getLineNumber()
// The entry will be skipped, but we'll try to keep reading from the
// LDIF file.
continue;
}
else
{
// An unrecoverable error occurred while attempting to read an entry
// at or near line number le.getLineNumber()
// No further LDIF processing will be performed.
break;
}
}
catch (IOException ioe)
{
// An I/O error occurred while attempting to read from the LDIF file.
// No further LDIF processing will be performed.
errorsEncountered++;
break;
}
try
{
addResult = connection.add(entry);
// If we got here, then the change should have been processed
// successfully.
System.out.println(entry.toLDIFString());
entriesAdded++;
}
catch (LDAPException le)
{
// If we got here, then the change attempt failed.
le.printStackTrace();
addResult = le.toLDAPResult();
errorsEncountered++;
}
}
}catch(IOException ioe){
ioe.printStackTrace();
}
catch(LDAPException lde){
lde.printStackTrace();
}finally{
//ldifReader.close();
}
}