@Column(name="ERROR_MSG") @Override public String getErrorMessage() { return super.getErrorMessage(); }
@Column(name="ERROR_ACK_BY") @Override public String getAcknowledgedBy() { return super.getAcknowledgedBy(); }
@Column(name="ERROR_ACK") @Override protected Short getAcknowledged() { return super.getAcknowledged(); }
@Override public ExecutionError filter(ExecutionErrorContext errorContext) { WorkflowRuntimeException exception = extract(errorContext.getCause(), WorkflowRuntimeException.class); String stacktrace = getStackTrace(errorContext.getCause()); return ExecutionError.builder() .type(TYPE) .initActivityId(getInitActivityId(errorContext)) .deploymentId(exception.getDeploymentId()) .processInstanceId(exception.getProcessInstanceId()) .processId(exception.getProcessId()) .activityId(exception.getNodeInstanceId()) .activityName(exception.getNodeName()) .message(exception.getMessage()) .error(stacktrace) .errorDate(new Date()) .build(); }
protected RequestContext internalExecute(Executable executable, RequestContext ctx) { try { executeNext(executable, ctx); return ctx; } catch (Throwable ex) { // in case there is another interceptor of this type in the stack don't handle it here if (hasInterceptorInStack() || executionErrorManager == null) { throw ex; } executionErrorManager.getHandler().handle(ex); throw ex; } }
@Column(name="DEPLOYMENT_ID") @Override public String getDeploymentId() { return super.getDeploymentId(); }
@Column(name="PROCESS_INST_ID") @Override public Long getProcessInstanceId() { return super.getProcessInstanceId(); }
@Column(name="ACTIVITY_NAME") @Override public String getActivityName() { return super.getActivityName(); }
@Column(name="ERROR_TYPE") @Override public String getType() { return super.getType(); }
@Column(name="ACTIVITY_ID") @Override public Long getActivityId() { return super.getActivityId(); }
@Column(name="PROCESS_ID") @Override public String getProcessId() { return super.getProcessId(); }
@Override public void handle(Throwable cause) { ExecutionErrorContext errorContext = new ExecutionErrorContext(cause, lastExecutedNode, lastExecutedTask, firstExecutedNode); for (ExecutionErrorFilter filter : filters) { if (filter.accept(errorContext)) { ExecutionError error = filter.filter(errorContext); logger.debug("Filter {} returned {} for {}", filter, error, cause); if (error != null) { try { storage.store(error); logger.debug("Error event {} stored successfully in {}", error, storage); } catch (Throwable e) { logger.warn("Could not persist execution error {} due to {}", error, e.getMessage()); logger.debug("Stack trace ", e); } } else { logger.debug("Filter {} accepted error {} but didn't produce results (error should be ignored)", filter, cause); } return; } } // in case it ended up here - meaning not filters dealt with it, simply log the error logger.error("Unexpected error during processing ", cause); }
@Lob @Column(name="ERROR_INFO", length=65535) @Override public String getError() { return super.getError(); }
@Column(name="JOB_ID") @Override public Long getJobId() { return super.getJobId(); }
protected ExecutionErrorHandler getExecutionErrorHandler() { ExecutionErrorManager errorManager = (ExecutionErrorManager) ((org.jbpm.services.task.commands.TaskContext) context).get(EnvironmentName.EXEC_ERROR_MANAGER); if (errorManager == null) { return new NoOpExecutionErrorHandler(); } return errorManager.getHandler(); } }
@Override public boolean accept(ExecutionErrorContext errorContext) { if (isCausedBy(errorContext.getCause(), SQLException.class, RollbackException.class, hibernateException)) { return true; } return false; }
@Column(name="INIT_ACTIVITY_ID") @Override public Long getInitActivityId() { return super.getInitActivityId(); }
protected Long getInitActivityId(ExecutionErrorContext context) { if (context.getFirstExecutedNode() == null) { return null; } return context.getFirstExecutedNode().getId(); }
@Override public boolean accept(ExecutionErrorContext errorContext) { if (isCausedBy(errorContext.getCause(), TaskException.class)) { return true; } return false; }
@Override public boolean accept(ExecutionErrorContext errorContext) { if (isCausedBy(errorContext.getCause(), WorkflowRuntimeException.class)) { return true; } return false; }