[[AWS-SDB-SDBComponent]]
SDB Component
~~~~~~~~~~~~~

*Available as of Camel 2.8.4*

The sdb component supports storing and retrieving data from/to
http://aws.amazon.com/sdb[Amazon's SDB] service.

Prerequisites

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

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

[source,java]
------------------------------
aws-sdb://domainName[?options]
------------------------------

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

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

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

|amazonSDBClient |`null` |Producer |Reference to a `com.amazonaws.services.simpledb.AmazonSimpleDB` in the
link:registry.html[Registry].

|accessKey |`null` |Producer |Amazon AWS Access Key

|secretKey |`null` |Producer |Amazon AWS Secret Key

|amazonSdbEndpoint |`null` |Producer |The region with which the AWS-SDB client wants to work with.

|domainName |`null` |Producer |The name of the domain currently worked with.

|maxNumberOfDomains |`100` |Producer |The maximum number of domain names you want returned. The range is 1 *
to 100.

|consistentRead |`false` |Producer |Determines whether or not strong consistency should be enforced when
data is read.

|operation |`PutAttributes` |Producer |Valid values are BatchDeleteAttributes, BatchPutAttributes,
DeleteAttributes, DeleteDomain, DomainMetadata, GetAttributes,
ListDomains, PutAttributes, Select.

|proxyHost |`null` |Producer |*Camel 2.16*: Specify a proxy host to be used inside the client
definition.

|proxyPort |`null` |Producer |*Camel 2.16*: Specify a proxy port to be used inside the client
definition.
|=======================================================================

Required SDB component options

You have to provide the amazonSDBClient in the
link:registry.html[Registry] or your accessKey and secretKey to access
the http://aws.amazon.com/sdb[Amazon's SDB].

[[AWS-SDB-Usage]]
Usage
^^^^^

[[AWS-SDB-MessageheadersevaluatedbytheSDBproducer]]
Message headers evaluated by the SDB producer
+++++++++++++++++++++++++++++++++++++++++++++

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

|`CamelAwsSdbAttributes` |`Collection<Attribute>` |List of attributes to be acted upon.

|`CamelAwsSdbAttributeNames` |`Collection<String>` |The names of the attributes to be retrieved.

|`CamelAwsSdbConsistentRead` |`Boolean` |Determines whether or not strong consistency should be enforced when
data is read.

|`CamelAwsSdbDeletableItems` |`Collection<DeletableItem>` |A list of items on which to perform the delete operation in a batch.

|`CamelAwsSdbDomainName` |`String` |The name of the domain currently worked with.

|`CamelAwsSdbItemName` |`String` |The unique key for this item

|`CamelAwsSdbMaxNumberOfDomains` |`Integer` |The maximum number of domain names you want returned. The range is 1 *
to 100.

|`CamelAwsSdbNextToken` |`String` |A string specifying where to start the next list of domain/item names.

|`CamelAwsSdbOperation` |`String` |To override the operation from the URI options.

|`CamelAwsSdbReplaceableAttributes` |`Collection<ReplaceableAttribute>` |List of attributes to put in an Item.

|`CamelAwsSdbReplaceableItems` |`Collection<ReplaceableItem>` |A list of items to put in a Domain.

|`CamelAwsSdbSelectExpression` |`String` |The expression used to query the domain.

|`CamelAwsSdbUpdateCondition` |`UpdateCondition` |The update condition which, if specified, determines whether the
specified attributes will be updated/deleted or not.
|=======================================================================

[[AWS-SDB-MessageheaderssetduringDomainMetadataoperation]]
Message headers set during DomainMetadata operation
+++++++++++++++++++++++++++++++++++++++++++++++++++

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

|`CamelAwsSdbTimestamp` |`Integer` |The data and time when metadata was calculated, in Epoch (UNIX) seconds.

|`CamelAwsSdbItemCount` |`Integer` |The number of all items in the domain.

|`CamelAwsSdbAttributeNameCount` |`Integer` |The number of unique attribute names in the domain.

|`CamelAwsSdbAttributeValueCount` |`Integer` |The number of all attribute name/value pairs in the domain.

|`CamelAwsSdbAttributeNameSize` |`Long` |The total size of all unique attribute names in the domain, in bytes.

|`CamelAwsSdbAttributeValueSize` |`Long` |The total size of all attribute values in the domain, in bytes.

|`CamelAwsSdbItemNameSize` |`Long` |The total size of all item names in the domain, in bytes.
|=======================================================================

[[AWS-SDB-MessageheaderssetduringGetAttributesoperation]]
Message headers set during GetAttributes operation
++++++++++++++++++++++++++++++++++++++++++++++++++

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

|`CamelAwsSdbAttributes` |`List<Attribute>` |The list of attributes returned by the operation.
|=======================================================================

[[AWS-SDB-MessageheaderssetduringListDomainsoperation]]
Message headers set during ListDomains operation
++++++++++++++++++++++++++++++++++++++++++++++++

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

|`CamelAwsSdbDomainNames` |`List<String>` |A list of domain names that match the expression.

|`CamelAwsSdbNextToken` |`String` |An opaque token indicating that there are more domains than the
specified MaxNumberOfDomains still available.
|=======================================================================

[[AWS-SDB-MessageheaderssetduringSelectoperation]]
Message headers set during Select operation
+++++++++++++++++++++++++++++++++++++++++++

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

|`CamelAwsSdbItems` |`List<Item>` |A list of items that match the select expression.

|`CamelAwsSdbNextToken` |`String` |An opaque token indicating that more items than MaxNumberOfItems were
matched, the response size exceeded 1 megabyte, or the execution time
exceeded 5 seconds.
|=======================================================================

[[AWS-SDB-AdvancedAmazonSimpleDBconfiguration]]
Advanced AmazonSimpleDB configuration
+++++++++++++++++++++++++++++++++++++

If you need more control over the `AmazonSimpleDB` instance
configuration you can create your own instance and refer to it from the
URI:

[source,java]
----------------------------------------------------
from("direct:start")
.to("aws-sdb://domainName?amazonSDBClient=#client");
----------------------------------------------------

The `#client` refers to a `AmazonSimpleDB` 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);

AmazonSimpleDB client = new AmazonSimpleDBClient(awsCredentials, clientConfiguration);

registry.bind("client", client);
--------------------------------------------------------------------------------------

[[AWS-SDB-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.8.4 or higher).

[[AWS-SDB-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]

