List of usage examples for com.amazonaws.services.simpleworkflow.model RespondDecisionTaskCompletedRequest RespondDecisionTaskCompletedRequest
RespondDecisionTaskCompletedRequest
From source file:aws.example.helloswf.WorkflowWorker.java
License:Apache License
/** * The goal of this workflow is to execute at least one HelloActivity successfully. * * We pass the workflow execution's input to the activity, and we use the activity's result * as the output of the workflow.//w w w . j ava 2s . c o m */ private static void executeDecisionTask(String taskToken, List<HistoryEvent> events) throws Throwable { List<Decision> decisions = new ArrayList<Decision>(); String workflow_input = null; int scheduled_activities = 0; int open_activities = 0; boolean activity_completed = false; String result = null; System.out.println("Executing the decision task for the history events: ["); for (HistoryEvent event : events) { System.out.println(" " + event); switch (event.getEventType()) { case "WorkflowExecutionStarted": workflow_input = event.getWorkflowExecutionStartedEventAttributes().getInput(); break; case "ActivityTaskScheduled": scheduled_activities++; break; case "ScheduleActivityTaskFailed": scheduled_activities--; break; case "ActivityTaskStarted": scheduled_activities--; open_activities++; break; case "ActivityTaskCompleted": open_activities--; activity_completed = true; result = event.getActivityTaskCompletedEventAttributes().getResult(); break; case "ActivityTaskFailed": open_activities--; break; case "ActivityTaskTimedOut": open_activities--; break; } } System.out.println("]"); if (activity_completed) { decisions.add(new Decision().withDecisionType(DecisionType.CompleteWorkflowExecution) .withCompleteWorkflowExecutionDecisionAttributes( new CompleteWorkflowExecutionDecisionAttributes().withResult(result))); } else { if (open_activities == 0 && scheduled_activities == 0) { ScheduleActivityTaskDecisionAttributes attrs = new ScheduleActivityTaskDecisionAttributes() .withActivityType(new ActivityType().withName(HelloTypes.ACTIVITY) .withVersion(HelloTypes.ACTIVITY_VERSION)) .withActivityId(UUID.randomUUID().toString()).withInput(workflow_input); decisions.add(new Decision().withDecisionType(DecisionType.ScheduleActivityTask) .withScheduleActivityTaskDecisionAttributes(attrs)); } else { // an instance of HelloActivity 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)); }
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 . jav a 2 s. c o m*/ * * 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)); }