List of usage examples for com.amazonaws.services.simpleworkflow.model ScheduleLambdaFunctionDecisionAttributes ScheduleLambdaFunctionDecisionAttributes
ScheduleLambdaFunctionDecisionAttributes
From source file:example.swf.hellolambda.WorkflowWorker.java
License:Apache License
/** * The goal of this workflow is to execute at least one HelloFunction * successfully.//from w w w . j av a 2s.c om * * We pass the workflow execution's input to the activity, and we use the * activity's result as the output of the workflow. */ private static void executeDecisionTask(String taskToken, List<HistoryEvent> events) throws Throwable { List<Decision> decisions = new ArrayList<Decision>(); String workflow_input = null; int scheduled_functions = 0; int running_functions = 0; boolean function_completed = false; String result = null; System.out.println("Executing the decision task for the history events: ["); for (HistoryEvent event : events) { System.out.println(" " + event); EventType event_type = EventType.fromValue(event.getEventType()); switch (event_type) { case WorkflowExecutionStarted: workflow_input = event.getWorkflowExecutionStartedEventAttributes().getInput(); break; case LambdaFunctionScheduled: scheduled_functions++; break; case ScheduleLambdaFunctionFailed: scheduled_functions--; break; case LambdaFunctionStarted: scheduled_functions--; running_functions++; break; case LambdaFunctionCompleted: running_functions--; function_completed = true; result = event.getLambdaFunctionCompletedEventAttributes().getResult(); break; case LambdaFunctionFailed: running_functions--; break; case LambdaFunctionTimedOut: running_functions--; break; } } System.out.println("]"); if (function_completed) { decisions.add(new Decision().withDecisionType(DecisionType.CompleteWorkflowExecution) .withCompleteWorkflowExecutionDecisionAttributes( new CompleteWorkflowExecutionDecisionAttributes().withResult(result))); } else { if (running_functions == 0 && scheduled_functions == 0) { AWSLambda lam = AWSLambdaClientBuilder.defaultClient(); GetFunctionConfigurationResult function_config = lam.getFunctionConfiguration( new GetFunctionConfigurationRequest().withFunctionName("HelloFunction")); String function_arn = function_config.getFunctionArn(); ScheduleLambdaFunctionDecisionAttributes attrs = new ScheduleLambdaFunctionDecisionAttributes() .withId("HelloFunction (Lambda task example)").withName(function_arn) .withInput(workflow_input); decisions.add(new Decision().withDecisionType(DecisionType.ScheduleLambdaFunction) .withScheduleLambdaFunctionDecisionAttributes(attrs)); } else { // an instance of HelloFunction is already scheduled or running. // Do nothing, another task will be scheduled once the activity // completes, fails or times out } } System.out.println("Exiting the decision task with the decisions " + decisions); swf.respondDecisionTaskCompleted( new RespondDecisionTaskCompletedRequest().withTaskToken(taskToken).withDecisions(decisions)); }