}
}
// the failed job listener is responsible for decrementing the retries and logging the exception to the DB.
FailedJobListener failedJobListener = createFailedJobListener(commandExecutor);
// the listener is ALWAYS added to the transaction as SNYC on ROLLABCK. If the transaction does not rollback, it is ignored.
commandContext.getTransactionContext().addTransactionListener(
TransactionState.ROLLED_BACK,
failedJobListener);
// register as command context close lister to intercept exceptions on flush
commandContext.registerCommandContextListener(failedJobListener);
if (jobExecutorContext != null) { // if null, then we are not called by the job executor
jobExecutorContext.setCurrentJob(job);
}
try {
job.execute(commandContext);
return null;
} catch (RuntimeException exception) {
log.warning("Exception while excuting job '" + job + "': " + exception.getMessage());
// log the exception in the job
failedJobListener.setException(exception);
// throw the original exception to indicate the ExecuteJobCmd failed
throw exception;
} finally {