1

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

1 に答える 1