All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.services.simpleworkflow.flow.worker.DecisionTaskHandler Maven / Gradle / Ivy

/*
 * Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
package com.amazonaws.services.simpleworkflow.flow.worker;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
import com.amazonaws.services.simpleworkflow.flow.core.AsyncTaskInfo;
import com.amazonaws.services.simpleworkflow.model.DecisionTask;
import com.amazonaws.services.simpleworkflow.model.RespondDecisionTaskCompletedRequest;

/**
 * Base class for workflow task handlers. Extend this class to implement custom
 * deciders that can be executed using a
 * {@link WorkflowTaskPollingExecutorService}.
 * 
 * @author fateev, suskin
 * 
 * @see WorkflowTaskPollingExecutorService
 */
public abstract class DecisionTaskHandler {

    /**
     * The implementation should be called when a polling SWF Decider receives a
     * new WorkflowTask. Later, that decider should call one of
     * {@link #respondWorkflowTaskCompleted(String, Transition, AmazonSimpleWorkflow)}
     * or
     * {@link #respondWorkflowTaskFailed(String, int, String, Map, AmazonSimpleWorkflow)}
     * .
     * 
     * @param workflowTask
     *            The decision task to handle. The reason for more then one task
     *            being received is pagination of the history. All tasks in the
     *            iterator contain the same information but different pages of
     *            the history. The tasks are loaded lazily when
     *            {@link Iterator#next()} is called. It is expected that the
     *            method implementation aborts decision by rethrowing any
     *            exception from {@link Iterator#next()}.
     */
    public abstract RespondDecisionTaskCompletedRequest handleDecisionTask(Iterator decisionTaskIterator) throws Exception;

    public abstract List getAsynchronousThreadDump(Iterator decisionTaskIterator) throws Exception;

    public abstract String getAsynchronousThreadDumpAsString(Iterator decisionTaskIterator) throws Exception;

    public abstract Object loadWorkflowThroughReplay(Iterator decisionTaskIterator) throws Exception;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy