/** * Устанавливает параметры завершения задачи * * @param results результат задачи * @param resultStatus статус завершения * @param exception исключения, которое произошло в процессе выполнения */ private void endTask( Map<String, Object> results, TaskResultStatus resultStatus, Throwable exception) { writeLock.lock(); try { result.setContent(results); result.setStatus(resultStatus); if (exception != null) { result.setErrorMessage( StringUtils.abbreviate(exception.getMessage(), TaskResult.ERROR_MESSAGE_MAX_SIZE - 3)); } result.setEndDate(new Date()); executionLock.countDown(); changeState(null, TaskExecutionStatus.READY); } finally { writeLock.unlock(); } }
/** * Устанавливает параметры запуска задачи * * @see #run() */ private void startTask() { writeLock.lock(); try { result.setStartDate(new Date()); changeState(new TaskProgress(TaskProgress.EXECUTING_STEP)); } finally { writeLock.unlock(); } }
@Override public void run() { // Устанавливаем системные параметры запуска startTask(); // Выполняем задачу Map<String, Object> results = null; TaskResultStatus resultStatus; Throwable cause = null; try { results = performer.performTask(this, result.getParameters()); resultStatus = (isCancelled()) ? TaskResultStatus.CANCELED : TaskResultStatus.FINISHED; } catch (Throwable th) { resultStatus = TaskResultStatus.ERROR; cause = th; LOG.error( String.format( "Task '%s[%s]' error: %s", descriptor.getId(), performer.retrieveName(), cause.getMessage()), cause); } // Устанавливаем системные параметры завершения endTask(results, resultStatus, cause); }