public void decide()

in src/main/java/com/amazonaws/services/simpleworkflow/flow/worker/AsyncDecider.java [453:503]


    public void decide() throws Exception {
        try {
            try {
            definition = workflowDefinitionFactory.getWorkflowDefinition(context);
            } catch (Exception e) {
                throw new Error("Failed to get workflow definition for " + context, e);
            }
            if (definition == null) {
            	throw new IllegalStateException("Null workflow definition returned for: " + context.getWorkflowContext().getWorkflowType());
            }
            decideImpl();
        }
        catch (AmazonServiceException e) {
            // We don't want to fail workflow on service exceptions like 500 or throttling
            // Throwing from here drops decision task which is OK as it is rescheduled after its StartToClose timeout.
            if (e.getErrorType() == ErrorType.Client && !"ThrottlingException".equals(e.getErrorCode())) {
                if (log.isErrorEnabled()) {
                    log.error("Failing workflow " + workflowContext.getWorkflowExecution(), e);
                }
                decisionsHelper.failWorkflowDueToUnexpectedError(e);
            }
            else {
                throw e;
            }
        } catch (Error e) {
            // Do not fail workflow on Error. Fail the decision.
            throw e;
        }
        catch (Throwable e) {
            if (log.isErrorEnabled()) {
                log.error("Failing workflow " + workflowContext.getWorkflowExecution(), e);
            }
            decisionsHelper.failWorkflowDueToUnexpectedError(e);
        }
        finally {
            try {
            	if (definition != null) {
                    decisionsHelper.setWorkflowContextData(definition.getWorkflowState());
                }
            }
            catch (WorkflowException e) {
                decisionsHelper.setWorkflowContextData(e.getDetails());
            }
            catch (Throwable e) {
                decisionsHelper.setWorkflowContextData(e.getMessage());
            }
            if (definition != null) {
                workflowDefinitionFactory.deleteWorkflowDefinition(definition);
            }
        }
    }