次のコード スニペットは、スタンドアロン モードで実行した場合、エラーをスローしません。これをWebサーバーにデプロイすると[サーバーのインターフェースを実装し、JARとしてクラスパスに追加]すると、
java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at com.nbis.process.JSON_2_File_Split_V004.fn_1_parserEntity(JSON_2_File_Split_V004.java:256)
at com.nbis.process.JSON_2_File_Split_V004.fn_0_primaryCaller(JSON_2_File_Split_V004.java:177)
at com.nbis.process.JSON_2_File_Split_V004.execute(JSON_2_File_Split_V004.java:151)
コードスニペット:
this.callable = new JSON_3_File_Process_V005(this.originalFileName, this.inProgressDirLoc, this.processedDirLoc, "[" + jSONRecord.toString() + "]", this.dataMDHolder, this.dataAccIDValueMap, this.dataCountryNameValueMap);
String[] fullContent = null;
try {
fullContent = executor.submit(this.callable).get();
} catch (ExecutionException e) {
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
log.info("Srii: " + errors.toString());
executor.shutdown();
return 7;
}
get の戻り値を ExecutorCompletionService に追加することはオプションですが、それによって非同期処理の概念が失われることはないでしょうか? つまり、呼び出し可能な get からの出力文字列を StringBuilder で収集し、get カウントが特定の数に達したときにディスクに格納します。データがディスクに出力されたら、StringBuilder を更新します。このようにして、データをメモリに保持することなく、一定の間隔でディスクにデータをプッシュします。
ここで何が間違っているかについての提案はありますか? 入力に感謝します。ありがとうございました。