次のサンプル・プログラムを使用して、バルク・ロードのクラスとメソッドを説明します。
ソース・ファイルはBulkLoad.javaで、$ENDECA_HOME/aps/examplesディレクトリにあります。
package com.oracle.endeca.server.examples.ops; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.net.SocketFactory; import javax.net.ssl.SSLSocketFactory; import com.endeca.BulkLoad.AbortCallback; import com.endeca.BulkLoad.BulkIngester; import com.endeca.BulkLoad.ErrorCallback; import com.endeca.BulkLoad.FinishedCallback; import com.endeca.BulkLoad.StatusCallback; import com.endeca.BulkLoad.Msg.Data; import com.endeca.BulkLoad.Msg.Data.Record; /** * This class provides an example of working with the bulk loading interface. */ public class BulkLoad { /** * This callback is provided to the bulk loader for providing feedback to the client process. */ public static class BulkLoadCallback implements AbortCallback, ErrorCallback, FinishedCallback, StatusCallback { @Override public void handleAbort(String reason) { System.out.println("Abort: " + reason); } @Override public void handleError(String reason, Record reject) { System.out.println("Error: " + reason); } @Override public void handleStatus(long recordsAdded, long recordsQueued, long recordsRejected, String state) { System.out.println("Status: " + recordsAdded); } @Override public void handleFinish() { System.out.println("Finished!"); } } /** * Set up a basic bulk ingest connection. */ public BulkLoad(String host, int port, boolean ssl) throws IOException { _host = host; _port = port; BulkLoadCallback blcb = new BulkLoadCallback(); SocketFactory sf = ssl ? SSLSocketFactory.getDefault() : SocketFactory.getDefault(); boolean doFinalMerge = false; boolean doUpdateSpellingDictionary = false; long socketTimeout = TimeUnit.SECONDS.toMillis(90); String transactionId = null; // don't do a final merge after finishing ingest or update the spelling dictionary; timeout after 90s _bi = new BulkIngester(_host, _port, sf, transactionId, doFinalMerge, doUpdateSpellingDictionary, socketTimeout, blcb, blcb, blcb, blcb); _bi.begin(); } /** * Add a new record with a handful of given assignments. */ public void addRecord(int val, String words, boolean square, boolean prime) throws IOException { Data.Record.Builder recordBuilder = Data.Record.newBuilder(); Data.Assignment.Builder assignmentBuilder = Data.Assignment.newBuilder(); assignmentBuilder.clear(); assignmentBuilder.setName("Value").setDataType(Data.Assignment.DataType.INT).setInt32Value(val); recordBuilder.setSpec(assignmentBuilder.build()); assignmentBuilder.clear(); assignmentBuilder.setName("Words").setDataType(Data.Assignment.DataType.STRING).setStringValue(words); recordBuilder.addAssignments(assignmentBuilder.build()); assignmentBuilder.clear(); assignmentBuilder.setName("Square").setDataType(Data.Assignment.DataType.BOOLEAN).setBoolValue(square); recordBuilder.addAssignments(assignmentBuilder.build()); assignmentBuilder.clear(); assignmentBuilder.setName("Prime").setDataType(Data.Assignment.DataType.BOOLEAN).setBoolValue(prime); recordBuilder.addAssignments(assignmentBuilder.build()); Data.Record r = recordBuilder.build(); _bi.sendRecord(r); } public void done() throws IOException, InterruptedException { _bi.endIngest(); } private String _host; private int _port; private BulkIngester _bi; }