Search in sources :

Example 1 with FailedJobListener

use of org.activiti.engine.impl.jobexecutor.FailedJobListener in project Activiti by Activiti.

the class ExecuteJobsCmd method execute.

public Object execute(CommandContext commandContext) {
    if (jobId == null && job == null) {
        throw new ActivitiIllegalArgumentException("jobId and job is null");
    }
    if (job == null) {
        job = commandContext.getJobEntityManager().findJobById(jobId);
    }
    if (job == null) {
        throw new JobNotFoundException(jobId);
    }
    if (log.isDebugEnabled()) {
        log.debug("Executing job {}", job.getId());
    }
    JobExecutorContext jobExecutorContext = Context.getJobExecutorContext();
    if (jobExecutorContext != null) {
        // if null, then we are not called by the job executor     
        jobExecutorContext.setCurrentJob(job);
    }
    FailedJobListener failedJobListener = null;
    try {
        // When transaction is rolled back, decrement retries
        failedJobListener = new FailedJobListener(commandContext.getProcessEngineConfiguration().getCommandExecutor(), jobId);
        commandContext.getTransactionContext().addTransactionListener(TransactionState.ROLLED_BACK, failedJobListener);
        job.execute(commandContext);
        if (commandContext.getEventDispatcher().isEnabled()) {
            commandContext.getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.JOB_EXECUTION_SUCCESS, job));
        }
    } catch (Throwable exception) {
        failedJobListener.setException(exception);
        // exception to be swallowed
        if (commandContext.getEventDispatcher().isEnabled()) {
            try {
                commandContext.getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityExceptionEvent(ActivitiEventType.JOB_EXECUTION_FAILURE, job, exception));
            } catch (Throwable ignore) {
                log.warn("Exception occured while dispatching job failure event, ignoring.", ignore);
            }
        }
        // Finally, Throw the exception to indicate the ExecuteJobCmd failed
        throw new ActivitiException("Job " + jobId + " failed", exception);
    } finally {
        if (jobExecutorContext != null) {
            jobExecutorContext.setCurrentJob(null);
        }
    }
    return null;
}
Also used : ActivitiException(org.activiti.engine.ActivitiException) ActivitiIllegalArgumentException(org.activiti.engine.ActivitiIllegalArgumentException) JobExecutorContext(org.activiti.engine.impl.jobexecutor.JobExecutorContext) JobNotFoundException(org.activiti.engine.JobNotFoundException) FailedJobListener(org.activiti.engine.impl.jobexecutor.FailedJobListener)

Aggregations

ActivitiException (org.activiti.engine.ActivitiException)1 ActivitiIllegalArgumentException (org.activiti.engine.ActivitiIllegalArgumentException)1 JobNotFoundException (org.activiti.engine.JobNotFoundException)1 FailedJobListener (org.activiti.engine.impl.jobexecutor.FailedJobListener)1 JobExecutorContext (org.activiti.engine.impl.jobexecutor.JobExecutorContext)1