Author: buildbot
Date: Sat Nov 29 17:21:54 2014
New Revision: 931000
Log:
Production update by buildbot for camel
Modified:
websites/production/camel/content/book-component-appendix.html
websites/production/camel/content/book-in-one-page.html
websites/production/camel/content/cache/main.pageCache
websites/production/camel/content/jdbc.html
Modified: websites/production/camel/content/book-component-appendix.html
==============================================================================
--- websites/production/camel/content/book-component-appendix.html (original)
+++ websites/production/camel/content/book-component-appendix.html Sat Nov 29
17:21:54 2014
@@ -1529,11 +1529,11 @@ template.send("direct:alias-verify&
</div>
</div>
<p>The <strong>cxf:</strong> component provides integration with <a
shape="rect" href="http://cxf.apache.org">Apache CXF</a> for connecting to
JAX-WS services hosted in CXF.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1416997118156 {padding: 0px;}
-div.rbtoc1416997118156 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1416997118156 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1417281519533 {padding: 0px;}
+div.rbtoc1417281519533 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1417281519533 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1416997118156">
+/*]]>*/</style></p><div class="toc-macro rbtoc1417281519533">
<ul class="toc-indentation"><li><a shape="rect" href="#CXF-CXFComponent">CXF
Component</a>
<ul class="toc-indentation"><li><a shape="rect" href="#CXF-URIformat">URI
format</a></li><li><a shape="rect" href="#CXF-Options">Options</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#CXF-Thedescriptionsofthedataformats">The descriptions of the
dataformats</a>
@@ -6146,7 +6146,7 @@ We store big input streams (by default,
]]></script>
</div></div><p></p><h3 id="BookComponentAppendix-SeeAlso.28">See Also</h3>
<ul><li><a shape="rect" href="configuring-camel.html">Configuring
Camel</a></li><li><a shape="rect"
href="component.html">Component</a></li><li><a shape="rect"
href="endpoint.html">Endpoint</a></li><li><a shape="rect"
href="getting-started.html">Getting Started</a></li></ul>
-<h2 id="BookComponentAppendix-JDBCComponent">JDBC Component</h2><p>The
<strong>jdbc</strong> component enables you to access databases through JDBC,
where SQL queries and operations are sent in the message body. This component
uses the standard JDBC API, unlike the <a shape="rect"
href="sql-component.html">SQL Component</a> component, which uses
spring-jdbc.</p><p>Maven users will need to add the following dependency to
their <code>pom.xml</code> for this component:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<h2 id="BookComponentAppendix-JDBCComponent">JDBC Component</h2><p>The
<strong>jdbc</strong> component enables you to access databases through JDBC,
where SQL queries (SELECT) and operations (INSERT, UPDATE, etc) are sent in the
message body. This component uses the standard JDBC API, unlike the <a
shape="rect" href="sql-component.html">SQL Component</a> component, which uses
spring-jdbc.</p><p>Maven users will need to add the following dependency to
their <code>pom.xml</code> for this component:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jdbc</artifactId>
@@ -6163,14 +6163,7 @@ We store big input streams (by default,
<h3 id="BookComponentAppendix-URIformat.32">URI format</h3><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[jdbc:dataSourceName[?options]
]]></script>
-</div></div><p>This component only supports producer endpoints.</p><p>You can
append query options to the URI in the following format,
<code>?option=value&option=value&...</code></p><h3
id="BookComponentAppendix-Options.25">Options</h3><div
class="confluenceTableSmall">
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> Name </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Default Value </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Description </p></th></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p> <code>readSize</code>
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>0</code>
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The default
maximum number of rows that can be read by a polling query. The default value
is 0. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>statement.<xxx></code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>null</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.1:</strong> Sets additional options on
the <code>java.sql.Statement</code> that is used behind the scenes to execute
the queries. F
or instance, <code>statement.maxRows=10</code>. For detailed documentation,
see the <a shape="rect" class="external-link"
href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Statement.html"
rel="nofollow"><code>java.sql.Statement</code> javadoc</a> documentation.
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>useJDBC4ColumnNameAndLabelSemantics</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <code>true</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <strong>Camel 2.2:</strong> Sets whether
to use JDBC 4/3 column label/name semantics. You can use this option to turn it
<code>false</code> in case you have issues with your JDBC driver to select
data. This only applies when using <code>SQL SELECT</code> using aliases (e.g.
<code>SQL SELECT id as identifier, name as given_name from persons</code>).
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>resetAutoCommit</code> </p></td><td cols
pan="1" rowspan="1" class="confluenceTd"><p> <code>true</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel 2.9:</strong>
Camel will set the autoCommit on the JDBC connection to be false, commit the
change after executed the statement and reset the autoCommit flag of the
connection at the end, if the resetAutoCommit is true. If the JDBC connection
doesn't support to reset the autoCommit flag, you can set the resetAutoCommit
flag to be false, and Camel will not try to reset the autoCommit
flag.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>allowNamedParameters</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>true</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12:</strong> Whether to allow using
named parameters in the queries. </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>prepareStatementStrategy</code> </p></td><td
colspan="1" ro
wspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12:</strong> Allows to plugin to use a
custom
<code>org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy</code> to
control preparation of the query and prepared statement. </p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>
<code>useHeadersAsParameters</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>false</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <strong>Camel 2.12:</strong> Set this
option to <code>true</code> to use the <code>prepareStatementStrategy</code>
with named parameters. This allows to define queries with named placeholders,
and use headers with the dynamic values for the query placeholders.
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>outputType</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>SelectList</code> </p></t
d><td colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel
2.12.1:</strong> Make the output of the producer to SelectList as List of Map,
or SelectOne as single Java object in the following way:<br clear="none">
-a) If the query has only single column, then that JDBC Column object is
returned. (such as SELECT COUNT( * ) FROM PROJECT will return a Long object.<br
clear="none">
-b) If the query has more than one column, then it will return a Map of that
result.<br clear="none">
-c) If the outputClass is set, then it will convert the query result into an
Java bean object by calling all the setters that match the column names. It
will assume your class has a default constructor to create instance with. From
<strong>Camel 2.14</strong> onwards then SelectList is also supported. <br
clear="none">
-d) If the query resulted in more than one rows, it throws an non-unique result
exception.<br clear="none">
-<strong>Camel 2.14.0:</strong> New <code>StreamList</code> output type value
that streams the result of the query using an <code>Iterator<Map<String,
Object>></code>, it can be used along with the <a shape="rect"
href="splitter.html">Splitter</a> EIP. </p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p> <code>outputClass</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <code>null</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel 2.12.1:</strong>
Specify the full package and class name to use as conversion when
outputType=SelectOne. From <strong>Camel 2.14</strong> onwards then SelectList
is also supported. </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>beanRowMapper</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12.1:</strong> To use a custom
<code>org.apache.camel.com
ponent.jdbc.BeanRowMapper</code> when using <code>outputClass</code>. The
default implementation will lower case the row names and skip underscores, and
dashes. For example <code>"CUST_ID"</code> is mapped as <code>"custId"</code>.
</p></td></tr></tbody></table></div>
-</div><h3 id="BookComponentAppendix-Result">Result</h3><p>By default the
result is returned in the OUT body as an <code>ArrayList<HashMap<String,
Object>></code>. The <code>List</code> object contains the list of rows
and the <code>Map</code> objects contain each row with the <code>String</code>
key as the column name. You can use the option <code>outputType</code> to
control the result.</p><p><strong>Note:</strong> This component fetches
<code>ResultSetMetaData</code> to be able to return the column name as the key
in the <code>Map</code>.</p><h4
id="BookComponentAppendix-MessageHeaders.8">Message Headers</h4><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Header</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>CamelJdbcRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the que
ry is a <code>SELECT</code>, query the row count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcUpdateCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is an
<code>UPDATE</code>, query the update count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRows</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
Rows that contains the generated kets.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
The number of rows in the header that contains generated
keys.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcColumnNames</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><
strong>Camel 2.11.1:</strong> The column names from the ResultSet as a
<code>java.util.Set</code> type.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcParametes</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> A
<code>java.util.Map</code> which has the headers to be used if
<code>useHeadersAsParameters</code> has been
enabled.</p></td></tr></tbody></table></div><h3
id="BookComponentAppendix-Generatedkeys">Generated
keys</h3><p><strong>Available as of Camel 2.10</strong></p><p>If you insert
data using SQL INSERT, then the RDBMS may support auto generated keys. You can
instruct the <a shape="rect" href="jdbc.html">JDBC</a> producer to return the
generated keys in headers.<br clear="none"> To do that set the header
<code>CamelRetrieveGeneratedKeys=true</code>. Then the generated keys will be
provided as headers with the keys listed in the table above.</p><p>You can see
more details in this <a shape="rec
t" class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java">unit
test</a>.</p> <div class="aui-message hint shadowed information-macro">
+</div></div><p>This component only supports producer endpoints.</p><p>You can
append query options to the URI in the following format,
<code>?option=value&option=value&...</code></p><h3
id="BookComponentAppendix-Options.25">Options</h3><div
class="confluenceTableSmall"><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>readSize</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>0</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The default maximum number of
rows that can be read by a polling query. The default value is
0.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>statement.<xxx></code></p></td><td
colspan="1"
rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.1:</strong> Sets additional
options on the <code>java.sql.Statement</code> that is used behind the scenes
to execute the queries. For instance, <code>statement.maxRows=10</code>. For
detailed documentation, see the <a shape="rect" class="external-link"
href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Statement.html"
rel="nofollow"><code>java.sql.Statement</code> javadoc</a>
documentation.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>useJDBC4ColumnNameAndLabelSemantics</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong>
Sets whether to use JDBC 4/3 column label/name semantics. You can use this
option to turn it <code>false</code> in case you have issues with your JDBC
driver to select data. This only a
pplies when using <code>SQL SELECT</code> using aliases (e.g. <code>SQL SELECT
id as identifier, name as given_name from persons</code>).</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>resetAutoCommit</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9:</strong> Camel will set
the autoCommit on the JDBC connection to be false, commit the change after
executed the statement and reset the autoCommit flag of the connection at the
end, if the resetAutoCommit is true. If the JDBC connection doesn't support to
reset the autoCommit flag, you can set the resetAutoCommit flag to be false,
and Camel will not try to reset the autoCommit flag.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>allowNamedParameters</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td
colspan="1" rowspan="1" c
lass="confluenceTd"><p><strong>Camel 2.12:</strong> Whether to allow using
named parameters in the queries.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>prepareStatementStrategy</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> Allows to
plugin to use a custom
<code>org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy</code> to
control preparation of the query and prepared statement.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>useHeadersAsParameters</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong>
Set this option to <code>true</code> to use the
<code>prepareStatementStrategy</code> with named parameters. This allows to
define queries with named placeholders, and use headers with t
he dynamic values for the query placeholders.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>outputType</code></p></td><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>SelectList</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.1:</strong> Make the
output of the producer to SelectList as List of Map, or SelectOne as single
Java object in the following way:<br clear="none"> a) If the query has only
single column, then that JDBC Column object is returned. (such as SELECT COUNT(
* ) FROM PROJECT will return a Long object.<br clear="none"> b) If the query
has more than one column, then it will return a Map of that result.<br
clear="none"> c) If the outputClass is set, then it will convert the query
result into an Java bean object by calling all the setters that match the
column names. It will assume your class has a default constructor to create
instance with. From <strong>Camel 2.14</strong> onwards then SelectLi
st is also supported. <br clear="none"> d) If the query resulted in more than
one rows, it throws an non-unique result exception.<br clear="none">
<strong>Camel 2.14.0:</strong> New <code>StreamList</code> output type value
that streams the result of the query using an <code>Iterator<Map<String,
Object>></code>, it can be used along with the <a shape="rect"
href="splitter.html">Splitter</a> EIP.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>outputClass</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.1:</strong>
Specify the full package and class name to use as conversion when
outputType=SelectOne. From <strong>Camel 2.14</strong> onwards then SelectList
is also supported.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>beanRowMapper</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>
60;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel
2.12.1:</strong> To use a custom
<code>org.apache.camel.component.jdbc.BeanRowMapper</code> when using
<code>outputClass</code>. The default implementation will lower case the row
names and skip underscores, and dashes. For example <code>"CUST_ID"</code> is
mapped as <code>"custId"</code>.</p></td></tr></tbody></table></div></div><h3
id="BookComponentAppendix-Result">Result</h3><p>By default the result is
returned in the OUT body as an <code>ArrayList<HashMap<String,
Object>></code>. The <code>List</code> object contains the list of rows
and the <code>Map</code> objects contain each row with the <code>String</code>
key as the column name. You can use the option <code>outputType</code> to
control the result.</p><p><strong>Note:</strong> This component fetches
<code>ResultSetMetaData</code> to be able to return the column name as the key
in the <code>Map</code>.</p><h4 id="BookComponentAppendix-M
essageHeaders.8">Message Headers</h4><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Header</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>CamelJdbcRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is a
<code>SELECT</code>, query the row count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcUpdateCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is an
<code>UPDATE</code>, query the update count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRows</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
Rows that contains the generated kets.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
The number of rows in the header that contains generated
keys.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcColumnNames</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11.1:</strong>
The column names from the ResultSet as a <code>java.util.Set</code>
type.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcParametes</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> A
<code>java.util.Map</code> which has the headers to be used if
<code>useHeadersAsParameters</code> has been
enabled.</p></td></tr></tbody></table></div><h3
id="BookComponentAppendix-Generatedkeys">Generated
keys</h3><p><strong>Available as of Camel 2.10</strong></p><p>If you insert
data using SQL
INSERT, then the RDBMS may support auto generated keys. You can instruct the
<a shape="rect" href="jdbc.html">JDBC</a> producer to return the generated keys
in headers.<br clear="none"> To do that set the header
<code>CamelRetrieveGeneratedKeys=true</code>. Then the generated keys will be
provided as headers with the keys listed in the table above.</p><p>You can see
more details in this <a shape="rect" class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java">unit
test</a>.</p> <div class="aui-message hint shadowed information-macro">
<span class="aui-icon icon-hint">Icon</span>
<div class="message-content">
<p>Using generated keys does not work with
together with named parameters.</p>
@@ -6259,6 +6252,15 @@ from("direct:hello")
</div></div><h3
id="BookComponentAppendix-Sample-Pollingthedatabaseeveryminute"><br
clear="none"><span style="font-size: 16.0px;line-height: 1.5625;">Sample -
Polling the database every minute</span></h3><p>If we want to poll a database
using the JDBC component, we need to combine it with a polling scheduler such
as the <a shape="rect" href="timer.html">Timer</a> or <a shape="rect"
href="quartz.html">Quartz</a> etc. In the following example, we retrieve data
from the database every 60 seconds:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[from("timer://foo?period=60000").setBody(constant("select
* from
customer")).to("jdbc:testdb").to("activemq:queue:customers");
]]></script>
+</div></div><h3
id="BookComponentAppendix-Sample-MoveDataBetweenDataSources"><span>Sample -
Move Data Between Data Sources<br clear="none"></span></h3><p>A common use case
is to query for data, process it and move it to another data source (ETL
operations). In the following example, we retrieve new customer records from
the source table every hour, filter/transform them and move them to a
destination table:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[from("timer://MoveNewCustomersEveryHour?period=3600000")
+ .setBody(constant("select * from customer where create_time >
(sysdate-1/24)"))
+ .to("jdbc:testdb")
+ .split(body())
+ .process(new MyCustomerProcessor()) //filter/transform results
as needed
+ .setBody(simple("insert into processed_customer
values('${body[ID]}','${body[NAME]}')"))
+ .to("jdbc:testdb");
+]]></script>
</div></div><p> </p><p></p><h3 id="BookComponentAppendix-SeeAlso.29">See
Also</h3>
<ul><li><a shape="rect" href="configuring-camel.html">Configuring
Camel</a></li><li><a shape="rect"
href="component.html">Component</a></li><li><a shape="rect"
href="endpoint.html">Endpoint</a></li><li><a shape="rect"
href="getting-started.html">Getting Started</a></li></ul><ul
class="alternate"><li><a shape="rect" href="sql.html">SQL</a></li></ul>
<h2 id="BookComponentAppendix-JettyComponent">Jetty Component</h2><p>The
<strong>jetty</strong> component provides HTTP-based <a shape="rect"
href="endpoint.html">endpoints</a> for consuming and producing HTTP requests.
That is, the Jetty component behaves as a simple Web server.<br clear="none">
Jetty can also be used as a http client which mean you can also use it with
Camel as a producer.</p> <div class="aui-message hint shadowed
information-macro">
Modified: websites/production/camel/content/book-in-one-page.html
==============================================================================
--- websites/production/camel/content/book-in-one-page.html (original)
+++ websites/production/camel/content/book-in-one-page.html Sat Nov 29 17:21:54
2014
@@ -4120,11 +4120,11 @@ While not actual tutorials you might fin
</div>
</div>
<h2 id="BookInOnePage-Preface">Preface</h2><p>This tutorial aims to guide the
reader through the stages of creating a project which uses Camel to facilitate
the routing of messages from a JMS queue to a <a shape="rect"
class="external-link" href="http://www.springramework.org"
rel="nofollow">Spring</a> service. The route works in a synchronous fashion
returning a response to the client.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1417191553048 {padding: 0px;}
-div.rbtoc1417191553048 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1417191553048 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1417281554411 {padding: 0px;}
+div.rbtoc1417281554411 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1417281554411 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1417191553048">
+/*]]>*/</style></p><div class="toc-macro rbtoc1417281554411">
<ul class="toc-indentation"><li><a shape="rect"
href="#Tutorial-JmsRemoting-TutorialonSpringRemotingwithJMS">Tutorial on Spring
Remoting with JMS</a></li><li><a shape="rect"
href="#Tutorial-JmsRemoting-Preface">Preface</a></li><li><a shape="rect"
href="#Tutorial-JmsRemoting-Prerequisites">Prerequisites</a></li><li><a
shape="rect"
href="#Tutorial-JmsRemoting-Distribution">Distribution</a></li><li><a
shape="rect" href="#Tutorial-JmsRemoting-About">About</a></li><li><a
shape="rect" href="#Tutorial-JmsRemoting-CreatetheCamelProject">Create the
Camel Project</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#Tutorial-JmsRemoting-UpdatethePOMwithDependencies">Update the POM with
Dependencies</a></li></ul>
</li><li><a shape="rect" href="#Tutorial-JmsRemoting-WritingtheServer">Writing
the Server</a>
@@ -6310,11 +6310,11 @@ So we completed the last piece in the pi
<style type="text/css">/*<![CDATA[*/
-div.rbtoc1417191553510 {padding: 0px;}
-div.rbtoc1417191553510 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1417191553510 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1417281556338 {padding: 0px;}
+div.rbtoc1417281556338 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1417281556338 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1417191553510">
+/*]]>*/</style><div class="toc-macro rbtoc1417281556338">
<ul class="toc-indentation"><li><a shape="rect"
href="#Tutorial-AXIS-Camel-TutorialusingAxis1.4withApacheCamel">Tutorial using
Axis 1.4 with Apache Camel</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#Tutorial-AXIS-Camel-Prerequisites">Prerequisites</a></li><li><a
shape="rect"
href="#Tutorial-AXIS-Camel-Distribution">Distribution</a></li><li><a
shape="rect"
href="#Tutorial-AXIS-Camel-Introduction">Introduction</a></li><li><a
shape="rect" href="#Tutorial-AXIS-Camel-SettinguptheprojecttorunAxis">Setting
up the project to run Axis</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#Tutorial-AXIS-Camel-Maven2">Maven 2</a></li><li><a shape="rect"
href="#Tutorial-AXIS-Camel-wsdl">wsdl</a></li><li><a shape="rect"
href="#Tutorial-AXIS-Camel-ConfiguringAxis">Configuring Axis</a></li><li><a
shape="rect" href="#Tutorial-AXIS-Camel-RunningtheExample">Running the
Example</a></li></ul>
@@ -19682,11 +19682,11 @@ template.send("direct:alias-verify&
</div>
</div>
<p>The <strong>cxf:</strong> component provides integration with <a
shape="rect" href="http://cxf.apache.org">Apache CXF</a> for connecting to
JAX-WS services hosted in CXF.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1417191561471 {padding: 0px;}
-div.rbtoc1417191561471 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1417191561471 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1417281576821 {padding: 0px;}
+div.rbtoc1417281576821 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1417281576821 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1417191561471">
+/*]]>*/</style></p><div class="toc-macro rbtoc1417281576821">
<ul class="toc-indentation"><li><a shape="rect" href="#CXF-CXFComponent">CXF
Component</a>
<ul class="toc-indentation"><li><a shape="rect" href="#CXF-URIformat">URI
format</a></li><li><a shape="rect" href="#CXF-Options">Options</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#CXF-Thedescriptionsofthedataformats">The descriptions of the
dataformats</a>
@@ -24299,7 +24299,7 @@ We store big input streams (by default,
]]></script>
</div></div><p></p><h3 id="BookInOnePage-SeeAlso.48">See Also</h3>
<ul><li><a shape="rect" href="configuring-camel.html">Configuring
Camel</a></li><li><a shape="rect"
href="component.html">Component</a></li><li><a shape="rect"
href="endpoint.html">Endpoint</a></li><li><a shape="rect"
href="getting-started.html">Getting Started</a></li></ul>
-<h2 id="BookInOnePage-JDBCComponent">JDBC Component</h2><p>The
<strong>jdbc</strong> component enables you to access databases through JDBC,
where SQL queries and operations are sent in the message body. This component
uses the standard JDBC API, unlike the <a shape="rect"
href="sql-component.html">SQL Component</a> component, which uses
spring-jdbc.</p><p>Maven users will need to add the following dependency to
their <code>pom.xml</code> for this component:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<h2 id="BookInOnePage-JDBCComponent">JDBC Component</h2><p>The
<strong>jdbc</strong> component enables you to access databases through JDBC,
where SQL queries (SELECT) and operations (INSERT, UPDATE, etc) are sent in the
message body. This component uses the standard JDBC API, unlike the <a
shape="rect" href="sql-component.html">SQL Component</a> component, which uses
spring-jdbc.</p><p>Maven users will need to add the following dependency to
their <code>pom.xml</code> for this component:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jdbc</artifactId>
@@ -24316,14 +24316,7 @@ We store big input streams (by default,
<h3 id="BookInOnePage-URIformat.33">URI format</h3><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[jdbc:dataSourceName[?options]
]]></script>
-</div></div><p>This component only supports producer endpoints.</p><p>You can
append query options to the URI in the following format,
<code>?option=value&option=value&...</code></p><h3
id="BookInOnePage-Options.47">Options</h3><div class="confluenceTableSmall">
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> Name </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Default Value </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Description </p></th></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p> <code>readSize</code>
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>0</code>
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The default
maximum number of rows that can be read by a polling query. The default value
is 0. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>statement.<xxx></code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>null</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.1:</strong> Sets additional options on
the <code>java.sql.Statement</code> that is used behind the scenes to execute
the queries. F
or instance, <code>statement.maxRows=10</code>. For detailed documentation,
see the <a shape="rect" class="external-link"
href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Statement.html"
rel="nofollow"><code>java.sql.Statement</code> javadoc</a> documentation.
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>useJDBC4ColumnNameAndLabelSemantics</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <code>true</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <strong>Camel 2.2:</strong> Sets whether
to use JDBC 4/3 column label/name semantics. You can use this option to turn it
<code>false</code> in case you have issues with your JDBC driver to select
data. This only applies when using <code>SQL SELECT</code> using aliases (e.g.
<code>SQL SELECT id as identifier, name as given_name from persons</code>).
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>resetAutoCommit</code> </p></td><td cols
pan="1" rowspan="1" class="confluenceTd"><p> <code>true</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel 2.9:</strong>
Camel will set the autoCommit on the JDBC connection to be false, commit the
change after executed the statement and reset the autoCommit flag of the
connection at the end, if the resetAutoCommit is true. If the JDBC connection
doesn't support to reset the autoCommit flag, you can set the resetAutoCommit
flag to be false, and Camel will not try to reset the autoCommit
flag.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>allowNamedParameters</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>true</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12:</strong> Whether to allow using
named parameters in the queries. </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>prepareStatementStrategy</code> </p></td><td
colspan="1" ro
wspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12:</strong> Allows to plugin to use a
custom
<code>org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy</code> to
control preparation of the query and prepared statement. </p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>
<code>useHeadersAsParameters</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>false</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <strong>Camel 2.12:</strong> Set this
option to <code>true</code> to use the <code>prepareStatementStrategy</code>
with named parameters. This allows to define queries with named placeholders,
and use headers with the dynamic values for the query placeholders.
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>outputType</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>SelectList</code> </p></t
d><td colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel
2.12.1:</strong> Make the output of the producer to SelectList as List of Map,
or SelectOne as single Java object in the following way:<br clear="none">
-a) If the query has only single column, then that JDBC Column object is
returned. (such as SELECT COUNT( * ) FROM PROJECT will return a Long object.<br
clear="none">
-b) If the query has more than one column, then it will return a Map of that
result.<br clear="none">
-c) If the outputClass is set, then it will convert the query result into an
Java bean object by calling all the setters that match the column names. It
will assume your class has a default constructor to create instance with. From
<strong>Camel 2.14</strong> onwards then SelectList is also supported. <br
clear="none">
-d) If the query resulted in more than one rows, it throws an non-unique result
exception.<br clear="none">
-<strong>Camel 2.14.0:</strong> New <code>StreamList</code> output type value
that streams the result of the query using an <code>Iterator<Map<String,
Object>></code>, it can be used along with the <a shape="rect"
href="splitter.html">Splitter</a> EIP. </p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p> <code>outputClass</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <code>null</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel 2.12.1:</strong>
Specify the full package and class name to use as conversion when
outputType=SelectOne. From <strong>Camel 2.14</strong> onwards then SelectList
is also supported. </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>beanRowMapper</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12.1:</strong> To use a custom
<code>org.apache.camel.com
ponent.jdbc.BeanRowMapper</code> when using <code>outputClass</code>. The
default implementation will lower case the row names and skip underscores, and
dashes. For example <code>"CUST_ID"</code> is mapped as <code>"custId"</code>.
</p></td></tr></tbody></table></div>
-</div><h3 id="BookInOnePage-Result">Result</h3><p>By default the result is
returned in the OUT body as an <code>ArrayList<HashMap<String,
Object>></code>. The <code>List</code> object contains the list of rows
and the <code>Map</code> objects contain each row with the <code>String</code>
key as the column name. You can use the option <code>outputType</code> to
control the result.</p><p><strong>Note:</strong> This component fetches
<code>ResultSetMetaData</code> to be able to return the column name as the key
in the <code>Map</code>.</p><h4 id="BookInOnePage-MessageHeaders.8">Message
Headers</h4><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Header</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>CamelJdbcRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is a <code>SE
LECT</code>, query the row count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcUpdateCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is an
<code>UPDATE</code>, query the update count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRows</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
Rows that contains the generated kets.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
The number of rows in the header that contains generated
keys.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcColumnNames</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.1
1.1:</strong> The column names from the ResultSet as a
<code>java.util.Set</code> type.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcParametes</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> A
<code>java.util.Map</code> which has the headers to be used if
<code>useHeadersAsParameters</code> has been
enabled.</p></td></tr></tbody></table></div><h3
id="BookInOnePage-Generatedkeys">Generated keys</h3><p><strong>Available as of
Camel 2.10</strong></p><p>If you insert data using SQL INSERT, then the RDBMS
may support auto generated keys. You can instruct the <a shape="rect"
href="jdbc.html">JDBC</a> producer to return the generated keys in headers.<br
clear="none"> To do that set the header
<code>CamelRetrieveGeneratedKeys=true</code>. Then the generated keys will be
provided as headers with the keys listed in the table above.</p><p>You can see
more details in this <a shape="rect" class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java">unit
test</a>.</p> <div class="aui-message hint shadowed information-macro">
+</div></div><p>This component only supports producer endpoints.</p><p>You can
append query options to the URI in the following format,
<code>?option=value&option=value&...</code></p><h3
id="BookInOnePage-Options.47">Options</h3><div
class="confluenceTableSmall"><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>readSize</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>0</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The default maximum number of
rows that can be read by a polling query. The default value is
0.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>statement.<xxx></code></p></td><td
colspan="1" rowspan=
"1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.1:</strong> Sets additional
options on the <code>java.sql.Statement</code> that is used behind the scenes
to execute the queries. For instance, <code>statement.maxRows=10</code>. For
detailed documentation, see the <a shape="rect" class="external-link"
href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Statement.html"
rel="nofollow"><code>java.sql.Statement</code> javadoc</a>
documentation.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>useJDBC4ColumnNameAndLabelSemantics</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong>
Sets whether to use JDBC 4/3 column label/name semantics. You can use this
option to turn it <code>false</code> in case you have issues with your JDBC
driver to select data. This only applies w
hen using <code>SQL SELECT</code> using aliases (e.g. <code>SQL SELECT id as
identifier, name as given_name from persons</code>).</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>resetAutoCommit</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9:</strong> Camel will set
the autoCommit on the JDBC connection to be false, commit the change after
executed the statement and reset the autoCommit flag of the connection at the
end, if the resetAutoCommit is true. If the JDBC connection doesn't support to
reset the autoCommit flag, you can set the resetAutoCommit flag to be false,
and Camel will not try to reset the autoCommit flag.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>allowNamedParameters</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td
colspan="1" rowspan="1" class="co
nfluenceTd"><p><strong>Camel 2.12:</strong> Whether to allow using named
parameters in the queries.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>prepareStatementStrategy</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> Allows to
plugin to use a custom
<code>org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy</code> to
control preparation of the query and prepared statement.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>useHeadersAsParameters</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong>
Set this option to <code>true</code> to use the
<code>prepareStatementStrategy</code> with named parameters. This allows to
define queries with named placeholders, and use headers with the dynam
ic values for the query placeholders.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>outputType</code></p></td><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>SelectList</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.1:</strong> Make the
output of the producer to SelectList as List of Map, or SelectOne as single
Java object in the following way:<br clear="none"> a) If the query has only
single column, then that JDBC Column object is returned. (such as SELECT COUNT(
* ) FROM PROJECT will return a Long object.<br clear="none"> b) If the query
has more than one column, then it will return a Map of that result.<br
clear="none"> c) If the outputClass is set, then it will convert the query
result into an Java bean object by calling all the setters that match the
column names. It will assume your class has a default constructor to create
instance with. From <strong>Camel 2.14</strong> onwards then SelectList is al
so supported. <br clear="none"> d) If the query resulted in more than one
rows, it throws an non-unique result exception.<br clear="none"> <strong>Camel
2.14.0:</strong> New <code>StreamList</code> output type value that streams the
result of the query using an <code>Iterator<Map<String,
Object>></code>, it can be used along with the <a shape="rect"
href="splitter.html">Splitter</a> EIP.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>outputClass</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.1:</strong>
Specify the full package and class name to use as conversion when
outputType=SelectOne. From <strong>Camel 2.14</strong> onwards then SelectList
is also supported.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>beanRowMapper</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p><
/td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel
2.12.1:</strong> To use a custom
<code>org.apache.camel.component.jdbc.BeanRowMapper</code> when using
<code>outputClass</code>. The default implementation will lower case the row
names and skip underscores, and dashes. For example <code>"CUST_ID"</code> is
mapped as <code>"custId"</code>.</p></td></tr></tbody></table></div></div><h3
id="BookInOnePage-Result">Result</h3><p>By default the result is returned in
the OUT body as an <code>ArrayList<HashMap<String, Object>></code>.
The <code>List</code> object contains the list of rows and the <code>Map</code>
objects contain each row with the <code>String</code> key as the column name.
You can use the option <code>outputType</code> to control the
result.</p><p><strong>Note:</strong> This component fetches
<code>ResultSetMetaData</code> to be able to return the column name as the key
in the <code>Map</code>.</p><h4 id="BookInOnePage-MessageHeaders.8">Message
Headers</h4><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Header</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>CamelJdbcRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is a
<code>SELECT</code>, query the row count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcUpdateCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is an
<code>UPDATE</code>, query the update count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRows</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
Rows that contains the generated kets.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
The number of rows in the header that contains generated
keys.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcColumnNames</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11.1:</strong>
The column names from the ResultSet as a <code>java.util.Set</code>
type.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcParametes</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> A
<code>java.util.Map</code> which has the headers to be used if
<code>useHeadersAsParameters</code> has been
enabled.</p></td></tr></tbody></table></div><h3
id="BookInOnePage-Generatedkeys">Generated keys</h3><p><strong>Available as of
Camel 2.10</strong></p><p>If you insert data using SQL INSERT, then the RDBMS
may supp
ort auto generated keys. You can instruct the <a shape="rect"
href="jdbc.html">JDBC</a> producer to return the generated keys in headers.<br
clear="none"> To do that set the header
<code>CamelRetrieveGeneratedKeys=true</code>. Then the generated keys will be
provided as headers with the keys listed in the table above.</p><p>You can see
more details in this <a shape="rect" class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java">unit
test</a>.</p> <div class="aui-message hint shadowed information-macro">
<span class="aui-icon icon-hint">Icon</span>
<div class="message-content">
<p>Using generated keys does not work with
together with named parameters.</p>
@@ -24412,6 +24405,15 @@ from("direct:hello")
</div></div><h3 id="BookInOnePage-Sample-Pollingthedatabaseeveryminute"><br
clear="none"><span style="font-size: 16.0px;line-height: 1.5625;">Sample -
Polling the database every minute</span></h3><p>If we want to poll a database
using the JDBC component, we need to combine it with a polling scheduler such
as the <a shape="rect" href="timer.html">Timer</a> or <a shape="rect"
href="quartz.html">Quartz</a> etc. In the following example, we retrieve data
from the database every 60 seconds:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[from("timer://foo?period=60000").setBody(constant("select
* from
customer")).to("jdbc:testdb").to("activemq:queue:customers");
]]></script>
+</div></div><h3
id="BookInOnePage-Sample-MoveDataBetweenDataSources"><span>Sample - Move Data
Between Data Sources<br clear="none"></span></h3><p>A common use case is to
query for data, process it and move it to another data source (ETL operations).
In the following example, we retrieve new customer records from the source
table every hour, filter/transform them and move them to a destination
table:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[from("timer://MoveNewCustomersEveryHour?period=3600000")
+ .setBody(constant("select * from customer where create_time >
(sysdate-1/24)"))
+ .to("jdbc:testdb")
+ .split(body())
+ .process(new MyCustomerProcessor()) //filter/transform results
as needed
+ .setBody(simple("insert into processed_customer
values('${body[ID]}','${body[NAME]}')"))
+ .to("jdbc:testdb");
+]]></script>
</div></div><p> </p><p></p><h3 id="BookInOnePage-SeeAlso.49">See Also</h3>
<ul><li><a shape="rect" href="configuring-camel.html">Configuring
Camel</a></li><li><a shape="rect"
href="component.html">Component</a></li><li><a shape="rect"
href="endpoint.html">Endpoint</a></li><li><a shape="rect"
href="getting-started.html">Getting Started</a></li></ul><ul
class="alternate"><li><a shape="rect" href="sql.html">SQL</a></li></ul>
<h2 id="BookInOnePage-JettyComponent">Jetty Component</h2><p>The
<strong>jetty</strong> component provides HTTP-based <a shape="rect"
href="endpoint.html">endpoints</a> for consuming and producing HTTP requests.
That is, the Jetty component behaves as a simple Web server.<br clear="none">
Jetty can also be used as a http client which mean you can also use it with
Camel as a producer.</p> <div class="aui-message hint shadowed
information-macro">
Modified: websites/production/camel/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.
Modified: websites/production/camel/content/jdbc.html
==============================================================================
--- websites/production/camel/content/jdbc.html (original)
+++ websites/production/camel/content/jdbc.html Sat Nov 29 17:21:54 2014
@@ -86,7 +86,7 @@
<tbody>
<tr>
<td valign="top" width="100%">
-<div class="wiki-content maincontent"><h2 id="JDBC-JDBCComponent">JDBC
Component</h2><p>The <strong>jdbc</strong> component enables you to access
databases through JDBC, where SQL queries and operations are sent in the
message body. This component uses the standard JDBC API, unlike the <a
shape="rect" href="sql-component.html">SQL Component</a> component, which uses
spring-jdbc.</p><p>Maven users will need to add the following dependency to
their <code>pom.xml</code> for this component:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div class="wiki-content maincontent"><h2 id="JDBC-JDBCComponent">JDBC
Component</h2><p>The <strong>jdbc</strong> component enables you to access
databases through JDBC, where SQL queries (SELECT) and operations (INSERT,
UPDATE, etc) are sent in the message body. This component uses the standard
JDBC API, unlike the <a shape="rect" href="sql-component.html">SQL
Component</a> component, which uses spring-jdbc.</p><p>Maven users will need to
add the following dependency to their <code>pom.xml</code> for this
component:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jdbc</artifactId>
@@ -103,14 +103,7 @@
<h3 id="JDBC-URIformat">URI format</h3><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[jdbc:dataSourceName[?options]
]]></script>
-</div></div><p>This component only supports producer endpoints.</p><p>You can
append query options to the URI in the following format,
<code>?option=value&option=value&...</code></p><h3
id="JDBC-Options">Options</h3><div class="confluenceTableSmall">
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> Name </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Default Value </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Description </p></th></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p> <code>readSize</code>
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>0</code>
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The default
maximum number of rows that can be read by a polling query. The default value
is 0. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>statement.<xxx></code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>null</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.1:</strong> Sets additional options on
the <code>java.sql.Statement</code> that is used behind the scenes to execute
the queries. F
or instance, <code>statement.maxRows=10</code>. For detailed documentation,
see the <a shape="rect" class="external-link"
href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Statement.html"
rel="nofollow"><code>java.sql.Statement</code> javadoc</a> documentation.
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>useJDBC4ColumnNameAndLabelSemantics</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <code>true</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <strong>Camel 2.2:</strong> Sets whether
to use JDBC 4/3 column label/name semantics. You can use this option to turn it
<code>false</code> in case you have issues with your JDBC driver to select
data. This only applies when using <code>SQL SELECT</code> using aliases (e.g.
<code>SQL SELECT id as identifier, name as given_name from persons</code>).
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>resetAutoCommit</code> </p></td><td cols
pan="1" rowspan="1" class="confluenceTd"><p> <code>true</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel 2.9:</strong>
Camel will set the autoCommit on the JDBC connection to be false, commit the
change after executed the statement and reset the autoCommit flag of the
connection at the end, if the resetAutoCommit is true. If the JDBC connection
doesn't support to reset the autoCommit flag, you can set the resetAutoCommit
flag to be false, and Camel will not try to reset the autoCommit
flag.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>allowNamedParameters</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>true</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12:</strong> Whether to allow using
named parameters in the queries. </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>prepareStatementStrategy</code> </p></td><td
colspan="1" ro
wspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12:</strong> Allows to plugin to use a
custom
<code>org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy</code> to
control preparation of the query and prepared statement. </p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>
<code>useHeadersAsParameters</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>false</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> <strong>Camel 2.12:</strong> Set this
option to <code>true</code> to use the <code>prepareStatementStrategy</code>
with named parameters. This allows to define queries with named placeholders,
and use headers with the dynamic values for the query placeholders.
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
<code>outputType</code> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>SelectList</code> </p></t
d><td colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel
2.12.1:</strong> Make the output of the producer to SelectList as List of Map,
or SelectOne as single Java object in the following way:<br clear="none">
-a) If the query has only single column, then that JDBC Column object is
returned. (such as SELECT COUNT( * ) FROM PROJECT will return a Long object.<br
clear="none">
-b) If the query has more than one column, then it will return a Map of that
result.<br clear="none">
-c) If the outputClass is set, then it will convert the query result into an
Java bean object by calling all the setters that match the column names. It
will assume your class has a default constructor to create instance with. From
<strong>Camel 2.14</strong> onwards then SelectList is also supported. <br
clear="none">
-d) If the query resulted in more than one rows, it throws an non-unique result
exception.<br clear="none">
-<strong>Camel 2.14.0:</strong> New <code>StreamList</code> output type value
that streams the result of the query using an <code>Iterator<Map<String,
Object>></code>, it can be used along with the <a shape="rect"
href="splitter.html">Splitter</a> EIP. </p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p> <code>outputClass</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <code>null</code> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> <strong>Camel 2.12.1:</strong>
Specify the full package and class name to use as conversion when
outputType=SelectOne. From <strong>Camel 2.14</strong> onwards then SelectList
is also supported. </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> <code>beanRowMapper</code> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> <strong>Camel 2.12.1:</strong> To use a custom
<code>org.apache.camel.com
ponent.jdbc.BeanRowMapper</code> when using <code>outputClass</code>. The
default implementation will lower case the row names and skip underscores, and
dashes. For example <code>"CUST_ID"</code> is mapped as <code>"custId"</code>.
</p></td></tr></tbody></table></div>
-</div><h3 id="JDBC-Result">Result</h3><p>By default the result is returned in
the OUT body as an <code>ArrayList<HashMap<String, Object>></code>.
The <code>List</code> object contains the list of rows and the <code>Map</code>
objects contain each row with the <code>String</code> key as the column name.
You can use the option <code>outputType</code> to control the
result.</p><p><strong>Note:</strong> This component fetches
<code>ResultSetMetaData</code> to be able to return the column name as the key
in the <code>Map</code>.</p><h4 id="JDBC-MessageHeaders">Message
Headers</h4><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Header</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>CamelJdbcRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is a
<code>SELECT</code>, query t
he row count is returned in this OUT header.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>CamelJdbcUpdateCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is an
<code>UPDATE</code>, query the update count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRows</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
Rows that contains the generated kets.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
The number of rows in the header that contains generated
keys.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcColumnNames</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11.1:</strong>
The co
lumn names from the ResultSet as a <code>java.util.Set</code>
type.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcParametes</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> A
<code>java.util.Map</code> which has the headers to be used if
<code>useHeadersAsParameters</code> has been
enabled.</p></td></tr></tbody></table></div><h3
id="JDBC-Generatedkeys">Generated keys</h3><p><strong>Available as of Camel
2.10</strong></p><p>If you insert data using SQL INSERT, then the RDBMS may
support auto generated keys. You can instruct the <a shape="rect"
href="jdbc.html">JDBC</a> producer to return the generated keys in headers.<br
clear="none"> To do that set the header
<code>CamelRetrieveGeneratedKeys=true</code>. Then the generated keys will be
provided as headers with the keys listed in the table above.</p><p>You can see
more details in this <a shape="rect" class="external-link"
href="https://svn.apache.org
/repos/asf/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java">unit
test</a>.</p> <div class="aui-message hint shadowed information-macro">
+</div></div><p>This component only supports producer endpoints.</p><p>You can
append query options to the URI in the following format,
<code>?option=value&option=value&...</code></p><h3
id="JDBC-Options">Options</h3><div class="confluenceTableSmall"><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>readSize</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>0</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The default maximum number of
rows that can be read by a polling query. The default value is
0.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>statement.<xxx></code></p></td><td
colspan="1" rowspan="1" class="c
onfluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.1:</strong> Sets additional options on
the <code>java.sql.Statement</code> that is used behind the scenes to execute
the queries. For instance, <code>statement.maxRows=10</code>. For detailed
documentation, see the <a shape="rect" class="external-link"
href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Statement.html"
rel="nofollow"><code>java.sql.Statement</code> javadoc</a>
documentation.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>useJDBC4ColumnNameAndLabelSemantics</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong>
Sets whether to use JDBC 4/3 column label/name semantics. You can use this
option to turn it <code>false</code> in case you have issues with your JDBC
driver to select data. This only applies when using <c
ode>SQL SELECT</code> using aliases (e.g. <code>SQL SELECT id as identifier,
name as given_name from persons</code>).</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>resetAutoCommit</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.9:</strong>
Camel will set the autoCommit on the JDBC connection to be false, commit the
change after executed the statement and reset the autoCommit flag of the
connection at the end, if the resetAutoCommit is true. If the JDBC connection
doesn't support to reset the autoCommit flag, you can set the resetAutoCommit
flag to be false, and Camel will not try to reset the autoCommit
flag.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>allowNamedParameters</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd">
<p><strong>Camel 2.12:</strong> Whether to allow using named parameters in the
queries.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>prepareStatementStrategy</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> Allows to
plugin to use a custom
<code>org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy</code> to
control preparation of the query and prepared statement.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>useHeadersAsParameters</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong>
Set this option to <code>true</code> to use the
<code>prepareStatementStrategy</code> with named parameters. This allows to
define queries with named placeholders, and use headers with the dynamic values
fo
r the query placeholders.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>outputType</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>SelectList</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.1:</strong>
Make the output of the producer to SelectList as List of Map, or SelectOne as
single Java object in the following way:<br clear="none"> a) If the query has
only single column, then that JDBC Column object is returned. (such as SELECT
COUNT( * ) FROM PROJECT will return a Long object.<br clear="none"> b) If the
query has more than one column, then it will return a Map of that result.<br
clear="none"> c) If the outputClass is set, then it will convert the query
result into an Java bean object by calling all the setters that match the
column names. It will assume your class has a default constructor to create
instance with. From <strong>Camel 2.14</strong> onwards then SelectList is also
supported
. <br clear="none"> d) If the query resulted in more than one rows, it throws
an non-unique result exception.<br clear="none"> <strong>Camel 2.14.0:</strong>
New <code>StreamList</code> output type value that streams the result of the
query using an <code>Iterator<Map<String, Object>></code>, it can
be used along with the <a shape="rect" href="splitter.html">Splitter</a>
EIP.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>outputClass</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.1:</strong> Specify the
full package and class name to use as conversion when outputType=SelectOne.
From <strong>Camel 2.14</strong> onwards then SelectList is also
supported.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>beanRowMapper</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> </p></td><td cols
pan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.1:</strong> To
use a custom <code>org.apache.camel.component.jdbc.BeanRowMapper</code> when
using <code>outputClass</code>. The default implementation will lower case the
row names and skip underscores, and dashes. For example <code>"CUST_ID"</code>
is mapped as
<code>"custId"</code>.</p></td></tr></tbody></table></div></div><h3
id="JDBC-Result">Result</h3><p>By default the result is returned in the OUT
body as an <code>ArrayList<HashMap<String, Object>></code>. The
<code>List</code> object contains the list of rows and the <code>Map</code>
objects contain each row with the <code>String</code> key as the column name.
You can use the option <code>outputType</code> to control the
result.</p><p><strong>Note:</strong> This component fetches
<code>ResultSetMetaData</code> to be able to return the column name as the key
in the <code>Map</code>.</p><h4 id="JDBC-MessageHeaders">Message
Headers</h4><div class="table-w
rap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Header</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>CamelJdbcRowCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is a
<code>SELECT</code>, query the row count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcUpdateCount</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If the query is an
<code>UPDATE</code>, query the update count is returned in this OUT
header.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelGeneratedKeysRows</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong>
Rows that contains the generated kets.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>Ca
melGeneratedKeysRowCount</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.10:</strong> The number of rows in the
header that contains generated keys.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>CamelJdbcColumnNames</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11.1:</strong>
The column names from the ResultSet as a <code>java.util.Set</code>
type.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>CamelJdbcParametes</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> A
<code>java.util.Map</code> which has the headers to be used if
<code>useHeadersAsParameters</code> has been
enabled.</p></td></tr></tbody></table></div><h3
id="JDBC-Generatedkeys">Generated keys</h3><p><strong>Available as of Camel
2.10</strong></p><p>If you insert data using SQL INSERT, then the RDBMS may
support auto generated keys. You can instruct
the <a shape="rect" href="jdbc.html">JDBC</a> producer to return the
generated keys in headers.<br clear="none"> To do that set the header
<code>CamelRetrieveGeneratedKeys=true</code>. Then the generated keys will be
provided as headers with the keys listed in the table above.</p><p>You can see
more details in this <a shape="rect" class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java">unit
test</a>.</p> <div class="aui-message hint shadowed information-macro">
<span class="aui-icon icon-hint">Icon</span>
<div class="message-content">
<p>Using generated keys does not work with
together with named parameters.</p>
@@ -199,6 +192,15 @@ from("direct:hello")
</div></div><h3 id="JDBC-Sample-Pollingthedatabaseeveryminute"><br
clear="none"><span style="font-size: 16.0px;line-height: 1.5625;">Sample -
Polling the database every minute</span></h3><p>If we want to poll a database
using the JDBC component, we need to combine it with a polling scheduler such
as the <a shape="rect" href="timer.html">Timer</a> or <a shape="rect"
href="quartz.html">Quartz</a> etc. In the following example, we retrieve data
from the database every 60 seconds:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[from("timer://foo?period=60000").setBody(constant("select
* from
customer")).to("jdbc:testdb").to("activemq:queue:customers");
]]></script>
+</div></div><h3 id="JDBC-Sample-MoveDataBetweenDataSources"><span>Sample -
Move Data Between Data Sources<br clear="none"></span></h3><p>A common use case
is to query for data, process it and move it to another data source (ETL
operations). In the following example, we retrieve new customer records from
the source table every hour, filter/transform them and move them to a
destination table:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[from("timer://MoveNewCustomersEveryHour?period=3600000")
+ .setBody(constant("select * from customer where create_time >
(sysdate-1/24)"))
+ .to("jdbc:testdb")
+ .split(body())
+ .process(new MyCustomerProcessor()) //filter/transform results
as needed
+ .setBody(simple("insert into processed_customer
values('${body[ID]}','${body[NAME]}')"))
+ .to("jdbc:testdb");
+]]></script>
</div></div><p> </p><p></p><h3 id="JDBC-SeeAlso">See Also</h3>
<ul><li><a shape="rect" href="configuring-camel.html">Configuring
Camel</a></li><li><a shape="rect"
href="component.html">Component</a></li><li><a shape="rect"
href="endpoint.html">Endpoint</a></li><li><a shape="rect"
href="getting-started.html">Getting Started</a></li></ul><ul
class="alternate"><li><a shape="rect" href="sql.html">SQL</a></li></ul></div>
</td>