user1786822
user1786822

Reputation: 107

Amazon SWF @Signal

Is there a way to call an @Signal function from within an Activity in an Amazon SWF Workflow. I want to be able to notify the workflow that some processing has completed and it should spawn a child workflow for that subset of the processing. How would this be done?

Upvotes: 1

Views: 1713

Answers (2)

Maxim Fateev
Maxim Fateev

Reputation: 6870

The generated workflow external client should be used to send signal from within activity code. ActivityExecutionContext contains all the data necessary to initialize it:

public class MyActivitiesImpl implements MyActivities {

    private final ActivityExecutionContextProvider contextProvider = new ActivityExecutionContextProviderImpl();

    public void sendSignalBackActivity() {
        ActivityExecutionContext context = contextProvider.getActivityExecutionContext();
        AmazonSimpleWorkflow service = context.getService();
        String domain = context.getDomain();
        WorkflowExecution workflowExecution = context.getWorkflowExecution();
        MyWorkflowClientExternalFactory factory = new MyWorkflowClientExternalFactoryImpl(service, domain);
        GreeterClientExternal workflow = factory.getClient(workflowExecution);
        workflow.signalMethod();
    }
}

As external client calls SignalWorkflowExecution SWF API it can fail due to intermittent connectivity issues. So an activity implementation might decide to catch and deal (possibly by retrying) with AmazonServiceException which is thrown in such cases.

Upvotes: 1

Ivan Nevostruev
Ivan Nevostruev

Reputation: 28723

It sounds like you want to tell workflow that some part of activity is complete, but you want to continue running current activity. If this is the case, then I recommend you to split your activity into 2 parts and use result from first part to tell if child workflow need to be spawned. I don't think that sending signal to workflow in the middle of activity is possible in Flow framework. But you can use raw SWF API to send signal (in this case you'll need to pass "Run ID" to your activity as one of parameters).

Upvotes: 2

Related Questions