Search in sources :

Example 6 with AbstractJobEntity

use of org.activiti.engine.impl.persistence.entity.AbstractJobEntity in project Activiti by Activiti.

the class BPMNTimerConverter method convertToBPMNTimer.

public BPMNTimerImpl convertToBPMNTimer(ActivitiEntityEvent internalEvent) {
    AbstractJobEntity jobEntity = (AbstractJobEntity) internalEvent.getEntity();
    BPMNTimerImpl timer = new BPMNTimerImpl(TimerEventHandler.getActivityIdFromConfiguration(jobEntity.getJobHandlerConfiguration()));
    timer.setProcessDefinitionId(internalEvent.getProcessDefinitionId());
    timer.setProcessInstanceId(internalEvent.getProcessInstanceId());
    timer.setTimerPayload(convertToTimerPayload(jobEntity));
    return timer;
}
Also used : AbstractJobEntity(org.activiti.engine.impl.persistence.entity.AbstractJobEntity) BPMNTimerImpl(org.activiti.api.runtime.model.impl.BPMNTimerImpl)

Example 7 with AbstractJobEntity

use of org.activiti.engine.impl.persistence.entity.AbstractJobEntity in project Activiti by Activiti.

the class DefaultJobManager method createExecutableJobFromOtherJob.

protected JobEntity createExecutableJobFromOtherJob(AbstractJobEntity job) {
    JobEntity executableJob = processEngineConfiguration.getJobEntityManager().create();
    copyJobInfo(executableJob, job);
    if (isAsyncExecutorActive()) {
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        gregorianCalendar.setTime(processEngineConfiguration.getClock().getCurrentTime());
        gregorianCalendar.add(Calendar.MILLISECOND, getAsyncExecutor().getTimerLockTimeInMillis());
        executableJob.setLockExpirationTime(gregorianCalendar.getTime());
        executableJob.setLockOwner(getAsyncExecutor().getLockOwner());
    }
    return executableJob;
}
Also used : DeadLetterJobEntity(org.activiti.engine.impl.persistence.entity.DeadLetterJobEntity) SuspendedJobEntity(org.activiti.engine.impl.persistence.entity.SuspendedJobEntity) AbstractJobEntity(org.activiti.engine.impl.persistence.entity.AbstractJobEntity) JobEntity(org.activiti.engine.impl.persistence.entity.JobEntity) TimerJobEntity(org.activiti.engine.impl.persistence.entity.TimerJobEntity) GregorianCalendar(java.util.GregorianCalendar)

Example 8 with AbstractJobEntity

use of org.activiti.engine.impl.persistence.entity.AbstractJobEntity in project Activiti by Activiti.

the class JobRetryCmd method execute.

public Object execute(CommandContext commandContext) {
    JobEntity job = commandContext.getJobEntityManager().findById(jobId);
    if (job == null) {
        return null;
    }
    ProcessEngineConfiguration processEngineConfig = commandContext.getProcessEngineConfiguration();
    ExecutionEntity executionEntity = fetchExecutionEntity(commandContext, job.getExecutionId());
    FlowElement currentFlowElement = executionEntity != null ? executionEntity.getCurrentFlowElement() : null;
    String failedJobRetryTimeCycleValue = null;
    if (currentFlowElement instanceof ServiceTask) {
        failedJobRetryTimeCycleValue = ((ServiceTask) currentFlowElement).getFailedJobRetryTimeCycleValue();
    }
    AbstractJobEntity newJobEntity = null;
    if (currentFlowElement == null || failedJobRetryTimeCycleValue == null) {
        log.debug("activity or FailedJobRetryTimerCycleValue is null in job " + jobId + ". only decrementing retries.");
        if (job.getRetries() <= 1) {
            newJobEntity = commandContext.getJobManager().moveJobToDeadLetterJob(job);
        } else {
            newJobEntity = commandContext.getJobManager().moveJobToTimerJob(job);
        }
        newJobEntity.setRetries(job.getRetries() - 1);
        if (job.getDuedate() == null || JobEntity.JOB_TYPE_MESSAGE.equals(job.getJobType())) {
            // add wait time for failed async job
            newJobEntity.setDuedate(calculateDueDate(commandContext, processEngineConfig.getAsyncFailedJobWaitTime(), null));
        } else {
            // add default wait time for failed job
            newJobEntity.setDuedate(calculateDueDate(commandContext, processEngineConfig.getDefaultFailedJobWaitTime(), job.getDuedate()));
        }
    } else {
        try {
            DurationHelper durationHelper = new DurationHelper(failedJobRetryTimeCycleValue, processEngineConfig.getClock());
            int jobRetries = job.getRetries();
            if (job.getExceptionMessage() == null) {
                // change default retries to the ones configured
                jobRetries = durationHelper.getTimes();
            }
            if (jobRetries <= 1) {
                newJobEntity = commandContext.getJobManager().moveJobToDeadLetterJob(job);
            } else {
                newJobEntity = commandContext.getJobManager().moveJobToTimerJob(job);
            }
            newJobEntity.setDuedate(durationHelper.getDateAfter());
            if (job.getExceptionMessage() == null) {
                // is it the first exception
                log.debug("Applying JobRetryStrategy '" + failedJobRetryTimeCycleValue + "' the first time for job " + job.getId() + " with " + durationHelper.getTimes() + " retries");
            } else {
                log.debug("Decrementing retries of JobRetryStrategy '" + failedJobRetryTimeCycleValue + "' for job " + job.getId());
            }
            newJobEntity.setRetries(jobRetries - 1);
        } catch (Exception e) {
            throw new ActivitiException("failedJobRetryTimeCylcle has wrong format:" + failedJobRetryTimeCycleValue, exception);
        }
    }
    if (exception != null) {
        newJobEntity.setExceptionMessage(exception.getMessage());
        newJobEntity.setExceptionStacktrace(getExceptionStacktrace());
    }
    // Dispatch both an update and a retry-decrement event
    ActivitiEventDispatcher eventDispatcher = commandContext.getEventDispatcher();
    if (eventDispatcher.isEnabled()) {
        eventDispatcher.dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_UPDATED, newJobEntity));
        eventDispatcher.dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.JOB_RETRIES_DECREMENTED, newJobEntity));
    }
    return null;
}
Also used : AbstractJobEntity(org.activiti.engine.impl.persistence.entity.AbstractJobEntity) JobEntity(org.activiti.engine.impl.persistence.entity.JobEntity) ServiceTask(org.activiti.bpmn.model.ServiceTask) ActivitiException(org.activiti.engine.ActivitiException) ProcessEngineConfiguration(org.activiti.engine.ProcessEngineConfiguration) ExecutionEntity(org.activiti.engine.impl.persistence.entity.ExecutionEntity) DurationHelper(org.activiti.engine.impl.calendar.DurationHelper) FlowElement(org.activiti.bpmn.model.FlowElement) AbstractJobEntity(org.activiti.engine.impl.persistence.entity.AbstractJobEntity) ActivitiException(org.activiti.engine.ActivitiException) ActivitiEventDispatcher(org.activiti.engine.delegate.event.ActivitiEventDispatcher)

Aggregations

AbstractJobEntity (org.activiti.engine.impl.persistence.entity.AbstractJobEntity)8 DeadLetterJobEntity (org.activiti.engine.impl.persistence.entity.DeadLetterJobEntity)6 JobEntity (org.activiti.engine.impl.persistence.entity.JobEntity)6 SuspendedJobEntity (org.activiti.engine.impl.persistence.entity.SuspendedJobEntity)5 TimerJobEntity (org.activiti.engine.impl.persistence.entity.TimerJobEntity)5 GregorianCalendar (java.util.GregorianCalendar)1 BPMNTimerImpl (org.activiti.api.runtime.model.impl.BPMNTimerImpl)1 FlowElement (org.activiti.bpmn.model.FlowElement)1 ServiceTask (org.activiti.bpmn.model.ServiceTask)1 ActivitiException (org.activiti.engine.ActivitiException)1 ActivitiIllegalArgumentException (org.activiti.engine.ActivitiIllegalArgumentException)1 JobNotFoundException (org.activiti.engine.JobNotFoundException)1 ProcessEngineConfiguration (org.activiti.engine.ProcessEngineConfiguration)1 ActivitiEventDispatcher (org.activiti.engine.delegate.event.ActivitiEventDispatcher)1 DurationHelper (org.activiti.engine.impl.calendar.DurationHelper)1 ExecutionEntity (org.activiti.engine.impl.persistence.entity.ExecutionEntity)1