[[AWS-SWF-SWFComponent]]
SWF Component
~~~~~~~~~~~~~

*Available as of Camel 2.13*

The Simple Workflow component supports managing workflows from
http://aws.amazon.com/swf/[Amazon's Simple Workflow] service.

Prerequisites

You must have a valid Amazon Web Services developer account, and be
signed up to use Amazon Simple Workflow. More information are available
at http://aws.amazon.com/swf/[Amazon Simple Workflow].

[[AWS-SWF-URIFormat]]
URI Format
^^^^^^^^^^

[source,java]
---------------------------------------
aws-swf://<workflow|activity>[?options]
---------------------------------------

You can append query options to the URI in the following format,
?options=value&option2=value&...

[[AWS-SWF-URIOptions]]
URI Options
^^^^^^^^^^^

[width="100%",cols="10%,10%,10%,70%",options="header",]
|=======================================================================
|Name |Default Value |Context |Description

|amazonSWClient |`null` |All |A reference to
a com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient in
the link:registry.html[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.
|=======================================================================

Required SWF component options

You have to provide the amazonSWClient in the
link:registry.html[Registry] or your accessKey and secretKey to access
the http://aws.amazon.com/swf[Amazon's Simple Workflow Service].

[[AWS-SWF-Usage]]
Usage
^^^^^

[[AWS-SWF-MessageheadersevaluatedbytheSWFWorkflowProducer]]
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.

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|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.
|=======================================================================

[[AWS-SWF-MessageheaderssetbytheSWFWorkflowProducer]]
Message headers set by the SWF Workflow Producer
++++++++++++++++++++++++++++++++++++++++++++++++

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|`CamelSWFWorkflowId` |`String` |The worfklow ID used or newly generated.

|`CamelAwsDdbKeyCamelSWFRunId` |`String` |The worfklow run ID used or generated.
|=======================================================================

[[AWS-SWF-MessageheaderssetbytheSWFWorkflowConsumer]]
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.

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|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.
|=======================================================================

[[AWS-SWF-MessageheaderssetbytheSWFActivityProducer]]
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.

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|`CamelSWFEventName` |`String` |The activity name to schedule.

|`CamelSWFVersion` |`String` |The activity version to schedule.
|=======================================================================

[[AWS-SWF-MessageheaderssetbytheSWFActivityConsumer]]
Message headers set by the SWF Activity Consumer
++++++++++++++++++++++++++++++++++++++++++++++++

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|`CamelSWFTaskToken` |`String` |The task token that is required to report task completion for manually
completed tasks.
|=======================================================================

[[AWS-SWF-AdvancedamazonSWClientconfiguration]]
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
link:registry.html[Registry].

For example if your Camel Application is running behind a firewall:

[source,java]
--------------------------------------------------------------------------------------------------------
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);
--------------------------------------------------------------------------------------------------------

[[AWS-SWF-Dependencies]]
Dependencies
^^^^^^^^^^^^

Maven users will need to add the following dependency to their pom.xml.

*pom.xml*

[source,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).

[[AWS-SWF-SeeAlso]]
See Also
^^^^^^^^

* link:configuring-camel.html[Configuring Camel]
* link:component.html[Component]
* link:endpoint.html[Endpoint]
* link:getting-started.html[Getting Started]

link:aws.html[AWS Component]
