diff --git a/src/main/java/com/salesforce/dataloader/process/ProcessRunner.java b/src/main/java/com/salesforce/dataloader/process/ProcessRunner.java index f356d9f5..6828fd07 100644 --- a/src/main/java/com/salesforce/dataloader/process/ProcessRunner.java +++ b/src/main/java/com/salesforce/dataloader/process/ProcessRunner.java @@ -247,6 +247,9 @@ public static void logErrorAndExitProcess(String message, Throwable throwable, i public static ProcessRunner runBatchMode(MapcommandLineOptionsMap, ILoaderProgress progressMonitor) throws UnsupportedOperationException { ProcessRunner runner = null; + String errorMessage = ""; + int exitCode = AppUtil.EXIT_CODE_NO_ERRORS; + Throwable throwable = null; try { // create the process runner = ProcessRunner.getInstance(commandLineOptionsMap); @@ -257,15 +260,22 @@ public static ProcessRunner runBatchMode(MapcommandLineOptionsMa // run the process runner.run(progressMonitor); progressMonitor = runner.getMonitor(); + if (progressMonitor != null) { if (progressMonitor.isCanceled()) { - logErrorAndExitProcess(progressMonitor.getMessage(), null, AppUtil.EXIT_CODE_CLIENT_ERROR); + errorMessage = progressMonitor.getMessage(); + throwable = null; + exitCode = AppUtil.EXIT_CODE_CLIENT_ERROR; } else if (!progressMonitor.isSuccess()) { - logErrorAndExitProcess(progressMonitor.getMessage(), null, AppUtil.EXIT_CODE_SERVER_ERROR); + errorMessage = progressMonitor.getMessage(); + throwable = null; + exitCode = AppUtil.EXIT_CODE_SERVER_ERROR; } else if (AppConfig.getCurrentConfig() != null && AppConfig.getCurrentConfig().getBoolean(AppConfig.PROP_PROCESS_EXIT_WITH_ERROR_ON_FAILED_ROWS_BATCH_MODE) && progressMonitor.getNumberRowsWithError() > 0) { - DataLoaderRunner.setExitCode(AppUtil.EXIT_CODE_RESULTS_ERROR); + errorMessage = Messages.getFormattedString("Process.operationSuccessWithErrorRows", progressMonitor.getNumberRowsWithError()); + throwable = null; + exitCode = AppUtil.EXIT_CODE_RESULTS_ERROR; } } } catch (Throwable t) { @@ -277,7 +287,13 @@ public static ProcessRunner runBatchMode(MapcommandLineOptionsMa if (t.getClass().equals(ExitException.class)) { throw (ExitException)t; } - logErrorAndExitProcess("Unable to run process", t, AppUtil.EXIT_CODE_OPERATION_ERROR); + errorMessage = "Unable to run process"; + throwable = t; + exitCode = AppUtil.EXIT_CODE_OPERATION_ERROR; + } finally { + if (exitCode != AppUtil.EXIT_CODE_NO_ERRORS) { + logErrorAndExitProcess(errorMessage, throwable, exitCode); + } } return runner; } diff --git a/src/main/java/com/salesforce/dataloader/util/ExitException.java b/src/main/java/com/salesforce/dataloader/util/ExitException.java index 0327e2d5..db454895 100644 --- a/src/main/java/com/salesforce/dataloader/util/ExitException.java +++ b/src/main/java/com/salesforce/dataloader/util/ExitException.java @@ -28,7 +28,7 @@ public class ExitException extends RuntimeException { private static final long serialVersionUID = 1L; - private int exitCode = AppUtil.EXIT_CODE_NO_ERRORS; + private int exitCode = AppUtil.EXIT_CODE_OPERATION_ERROR; public ExitException(Throwable ex, int exitCode) { super(ex); this.exitCode = exitCode; diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 34195f21..cffe088d 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -23,6 +23,7 @@ Process.errorDaoOpen=Unable to open Data Access Object. Process.creatingMap=Creating Map Process.aboutPerform=About to perform: {0} Process.missingRequiredArg=Missing required argument: {0} +Process.operationSuccessWithErrorRows=Operation succeeded with failure to process {0} records. Action.loading=Loading: {0} Action.logCanceled=Load was canceled. Action.exception=Exception occurred during loading