10.9. AWS-SWF

SWF Component

Available as of Camel 2.13
The Simple Workflow component supports managing workflows from Amazon's Simple Workflow service.
Note
You must have a valid Amazon Web Services developer account, and be signed up to use Amazon Simple Workflow. More information are available at Amazon Simple Workflow.

URI Format

aws-swf://<workflow|activity>[?options]
You can append query options to the URI in the following format, ?options=value&option2=value&...

URI Options

Name
Default Value
Context
Description
amazonSWClient
null
All
A reference to a com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient in the Registry.
accessKey
null
All
Amazon AWS Access Key.
secretKey
null
All
Amazon AWS Secret Key.
sWClient.XXX
null
All
Properties to set on AmazonSimpleWorkflowClient in use.
clientConfiguration.XXX
null
All
Properties to set on ClientConfiguration in use.
startWorkflowOptions.XXX
null
Workflow/Producer
Properties to set on useStartWorkflowOptions in use.
operation
START
Workflow/Producer
The operation to perform on the workflow. Supported operations are: SIGNAL, CANCEL, TERMINATE, GET_STATE, START, DESCRIBE, GET_HISTORY.
domainName
null
All
The workflow domain to use.
activityList
null
Activity/Consumer
The list name to consume activities from.
workflowList null
Workflow/Consumer
The list name to consume workflows from.
eventName null All The workflow or activity event name to use.
version null All The workflow or activity event version to use.
signalName null Workflow/Producer The name of the signal to send to the workflow.
childPolicy null Workflow/Producer The policy to use on child workflows when terminating a workflow.
terminationReason null Workflow/Producer The reason for terminating a workflow.
stateResultType Object Workflow/Producer The type of the result when a workflow state is queried.
terminationDetails null Workflow/Producer Details for terminating a workflow.
dataConverter JsonDataConverter All An instance of com.amazonaws.services.simpleworkflow.flow.DataConverter to use for serializing/deserializing the data.
activitySchedulingOptions null Activity/Producer An instance of ActivitySchedulingOptions used to specify different timeout options.
activityTypeExecutionOptions null Activity/Consumer An instance of ActivityTypeExecutionOptions.
activityTypeRegistrationOptions null Activity/Consumer An instance of ActivityTypeRegistrationOptions.
workflowTypeRegistrationOptions null Workflow/Consumer An instance of WorkflowTypeRegistrationOptions.
Note
You have to provide the amazonSWClient in the Registry or your accessKey and secretKey to access the Amazon's Simple Workflow Service.

Usage

Message headers evaluated by the SWF Workflow Producer

A workflow producer allows interacting with a workflow. It can start a new workflow execution, query its state, send signals to a running workflow, or terminate and cancel it.
Header
Type
Description
CamelSWFOperation
String
The operation to perform on the workflow. Supported operations are: SIGNAL, CANCEL, TERMINATE, GET_STATE, START, DESCRIBE, GET_HISTORY.
CamelSWFWorkflowId
String
A workflow ID to use.
CamelAwsDdbKeyCamelSWFRunId
String
A worfklow run ID to use.
CamelSWFStateResultType
String
The type of the result when a workflow state is queried.
CamelSWFEventName
String
The workflow or activity event name to use.
CamelSWFVersion
String
The workflow or activity event version to use.
CamelSWFReason
String
The reason for terminating a workflow.
CamelSWFDetails
String
Details for terminating a workflow.
CamelSWFChildPolicy
String
The policy to use on child workflows when terminating a workflow.

Message headers set by the SWF Workflow Producer

Header
Type
Description
CamelSWFWorkflowId
String
The worfklow ID used or newly generated.
CamelAwsDdbKeyCamelSWFRunId
String
The worfklow run ID used or generated.

Message headers set by the SWF Workflow Consumer

A workflow consumer represents the workflow logic. When it is started, it will start polling workflow decision tasks and process them. In addition to processing decision tasks, a workflow consumer route, will also receive signals (send from a workflow producer) or state queries. The primary purpose of a workflow consumer is to schedule activity tasks for execution using activity producers. Actually activity tasks can be scheduled only from a thread started by a workflow consumer.
Header
Type
Description
CamelSWFAction
String
Indicates what type is the current event: CamelSWFActionExecute, CamelSWFSignalReceivedAction or CamelSWFGetStateAction.
CamelSWFWorkflowReplaying
boolean
Indicates whether the current decision task is a replay or not.
CamelSWFWorkflowStartTime
long
The time of the start event for this decision task.

Message headers set by the SWF Activity Producer

An activity producer allows scheduling activity tasks. An activity producer can be used only from a thread started by a workflow consumer ie, it can process synchronous exchanges started by a workflow consumer.
Header
Type
Description
CamelSWFEventName
String
The activity name to schedule.
CamelSWFVersion
String
The activity version to schedule.

Message headers set by the SWF Activity Consumer

Header
Type
Description
CamelSWFTaskToken
String
The task token that is required to report task completion for manually completed tasks.

Advanced amazonSWClient configuration

If you need more control over the AmazonSimpleWorkflowClient instance configuration you can create your own instance and refer to it from the URI:
The #client refers to a AmazonSimpleWorkflowClient in the Registry.
For example if your Camel Application is running behind a firewall:
AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

AmazonSimpleWorkflowClient client = new AmazonSimpleWorkflowClient(awsCredentials, clientConfiguration);

registry.bind("client", client);

Dependencies

Maven users will need to add the following dependency to their pom.xml.
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>
where ${camel-version} must be replaced by the actual version of Camel (2.13 or higher).