Author: buildbot
Date: Fri Oct  5 22:17:35 2012
New Revision: 834185

Log:
Production update by buildbot for camel

Modified:
    websites/production/camel/content/cache/main.pageCache
    websites/production/camel/content/sjms.html

Modified: websites/production/camel/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/camel/content/sjms.html
==============================================================================
--- websites/production/camel/content/sjms.html (original)
+++ websites/production/camel/content/sjms.html Fri Oct  5 22:17:35 2012
@@ -81,14 +81,14 @@
 
 <div class="panelMacro"><table class="noteMacro"><colgroup span="1"><col 
span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" 
valign="top"><img align="middle" 
src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif"; 
width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">This 
component is under active development.</td></tr></table></div>
 
-<p>The SJMS Component is a JMS client for use with Camel. SJMS uses a JMS 
client API written explicitly for Camel and does not depend on any third party 
messaging implementations keeping it light and flexible.  It is scheduled to be 
released as part of Camel 2.11 with the following functionality:</p>
+<p>The SJMS Component is a JMS client for use with Camel. SJMS uses a JMS 
client API written explicitly for Camel and does not depend on any third party 
messaging implementations keeping it light and resilient.  It is scheduled to 
be released as part of Camel 2.11 with the following functionality:</p>
 
 <ul><li>Standard Queue and Topic Support (Durable &amp; 
Non-Durable)</li><li>InOnly &amp; InOut MEP Support</li><li>Asynchronous 
Producer and Consumer Processing</li><li>Internal JMS Transaction 
Support</li></ul>
 
 
 <p>Additional key features include:</p>
 
-<ul><li>Plugable Connection Resource Management</li><li>Session, Consumer, 
&amp; Producer Pooling &amp; Caching Management</li><li>Transacted Batch 
Consumers &amp; Producers</li><li>Support for Customizable Transaction Commit 
Strategies (Local JMS Transactions only)</li></ul>
+<ul><li>Plugable Connection Resource Management</li><li>Session, Consumer, 
&amp; Producer Pooling &amp; Caching Management</li><li>Batch Consumers and 
Producers</li><li>Transacted Batch Consumers &amp; Producers</li><li>Support 
for Customizable Transaction Commit Strategies (Local JMS Transactions 
only)</li></ul>
 
 
 <div class="panelMacro"><table class="infoMacro"><colgroup span="1"><col 
span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" 
valign="top"><img align="middle" 
src="https://cwiki.apache.org/confluence/images/icons/emoticons/information.gif";
 width="16" height="16" alt="" border="0"></td><td colspan="1" 
rowspan="1"><b>Why the S in SJMS</b><br clear="none">S stands for Simple and 
Standard and Springless.  Also camel-jms was already taken. <img align="middle" 
class="emoticon" 
src="https://cwiki.apache.org/confluence/images/icons/emoticons/smile.gif"; 
height="20" width="20" alt="" border="0"></td></tr></table></div>
@@ -181,6 +181,39 @@ component.setMaxConnections(1);
 </div>
 </div>
 
+<h3><a shape="rect" name="SJMS-ProducerUsage"></a>Producer Usage</h3>
+
+<h4><a shape="rect" name="SJMS-InOnlyProducer%28Default%29"></a>InOnly 
Producer - (Default)</h4>
+
+<p>The InOnly Producer is the default behavior of the SJMS Producer 
Endpoint.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"direct:start"</span>)
+    .to(<span class="code-quote">"sjms:queue:bar"</span>);
+</pre>
+</div></div>
+
+<h4><a shape="rect" name="SJMS-InOutProducer"></a>InOut Producer</h4>
+
+<p>To enable InOut behavior append the <tt>exchangePattern</tt> attribute to 
the URI.  By default it will use a dedicated TemporaryQueue for each 
consumer.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"direct:start"</span>)
+    .to(<span 
class="code-quote">"sjms:queue:bar?exchangePattern=InOut"</span>);
+</pre>
+</div></div>
+
+<p>You can specify a <tt>namedReplyTo</tt> though which can provide a better 
monitor point.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"direct:start"</span>)
+    .to(<span 
class="code-quote">"sjms:queue:bar?exchangePattern=InOut&amp;namedReplyTo=my.reply.to.queue"</span>);
+</pre>
+</div></div>
+
 <h3><a shape="rect" name="SJMS-ConsumersConfigurationOptions"></a>Consumers 
Configuration Options</h3>
 
 <p>The SjmsConsumer Endpoint supports the following properties:</p>
@@ -190,7 +223,31 @@ component.setMaxConnections(1);
 </div>
 </div>
 
-<h3><a shape="rect" name="SJMS-UsageNotes"></a>Usage Notes</h3>
+<h3><a shape="rect" name="SJMS-ConsumerUsage"></a>Consumer Usage</h3>
+
+<h4><a shape="rect" name="SJMS-InOnlyConsumer%28Default%29"></a>InOnly 
Consumer - (Default)</h4>
+
+<p>The InOnly Consumer is the default Exchange behavior of the SJMS Consumer 
Endpoint.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"sjms:queue:bar"</span>)
+    .to(<span class="code-quote">"mock:result"</span>);
+</pre>
+</div></div>
+
+<h4><a shape="rect" name="SJMS-InOutConsumer"></a>InOut Consumer</h4>
+
+<p>To enable InOut behavior append the <tt>exchangePattern</tt> attribute to 
the URI.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+from(<span 
class="code-quote">"sjms:queue:in.out.test?exchangePattern=InOut"</span>)
+    .transform(constant(<span class="code-quote">"Bye Camel"</span>));
+</pre>
+</div></div>
+
+<h3><a shape="rect" name="SJMS-AdvancedUsageNotes"></a>Advanced Usage 
Notes</h3>
 
 <h4><a shape="rect" 
name="SJMS-PlugableConnectionResourceManagement"></a>Plugable Connection 
Resource Management <a shape="rect" name="SJMS-connectionresource"></a></h4>
 
@@ -200,18 +257,91 @@ component.setMaxConnections(1);
 
 <p>It is recommended though that for standard <a shape="rect" 
class="external-link" 
href="http://docs.oracle.com/javaee/5/api/javax/jms/ConnectionFactory.html"; 
rel="nofollow">ConnectionFactory</a> providers you use the <a shape="rect" 
class="external-link" 
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/ConnectionResourceIT.java";>ConnectionFactoryResource</a>
 implementation that is provided with SJMS as-is or extend as it is optimized 
for this component.</p>
 
-<p>To see a full example of its usage please refer to the <a shape="rect" 
class="external-link" 
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/ConnectionResourceIT.java";>ConnectionResourceIT</a>.</p>
+<p>Below is an example of using the pluggable ConnectionResource with the 
ActiveMQ PooledConnectionFactory:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> class AMQConnectionResource <span 
class="code-keyword">implements</span> ConnectionResource {
+    <span class="code-keyword">private</span> PooledConnectionFactory pcf;
+
+    <span class="code-keyword">public</span> AMQConnectionResource(<span 
class="code-object">String</span> connectString, <span 
class="code-object">int</span> maxConnections) {
+        <span class="code-keyword">super</span>();
+        pcf = <span class="code-keyword">new</span> 
PooledConnectionFactory(connectString);
+        pcf.setMaxConnections(maxConnections);
+        pcf.start();
+    }
+
+    <span class="code-keyword">public</span> void stop() {
+        pcf.stop();
+    }
+
+    @Override
+    <span class="code-keyword">public</span> Connection borrowConnection() 
<span class="code-keyword">throws</span> Exception {
+        Connection answer = pcf.createConnection();
+        answer.start();
+        <span class="code-keyword">return</span> answer;
+    }
+
+    @Override
+    <span class="code-keyword">public</span> Connection borrowConnection(<span 
class="code-object">long</span> timeout) <span 
class="code-keyword">throws</span> Exception {
+        <span class="code-comment">// SNIPPED...
+</span>    }
+
+    @Override
+    <span class="code-keyword">public</span> void returnConnection(Connection 
connection) <span class="code-keyword">throws</span> Exception {
+        <span class="code-comment">// Do nothing since there isn't a way to 
<span class="code-keyword">return</span> a Connection
+</span>        <span class="code-comment">// to the instance of 
PooledConnectionFactory
+</span>        log.info(<span class="code-quote">"Connection returned"</span>);
+    }
+}
+</pre>
+</div></div>
+
+<p>Then pass in the ConnectionResource to the SjmsComponent:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+CamelContext camelContext = <span class="code-keyword">new</span> 
DefaultCamelContext();
+AMQConnectionResource pool = <span class="code-keyword">new</span> 
AMQConnectionResource(<span class="code-quote">"tcp:<span 
class="code-comment">//localhost:33333"</span>, 1);
+</span>SjmsComponent component = <span class="code-keyword">new</span> 
SjmsComponent();
+component.setConnectionResource(pool);
+camelContext.addComponent(<span class="code-quote">"sjms"</span>, component);
+</pre>
+</div></div>
+
+<p>To see the full example of its usage please refer to the <a shape="rect" 
class="external-link" 
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/ConnectionResourceIT.java";>ConnectionResourceIT</a>.</p>
 
 <h4><a shape="rect" 
name="SJMS-Session%2CConsumer%2C%26ProducerPooling%26CachingManagement"></a>Session,
 Consumer, &amp; Producer Pooling &amp; Caching Management</h4>
 
 <p>Coming soon ...</p>
 
-<h4><a shape="rect" name="SJMS-BatchProducer"></a>Batch Producer</h4>
+<h4><a shape="rect" name="SJMS-BatchMessageSupport"></a>Batch Message 
Support</h4>
 
 <p>The SjmsProducer supports publishing a collection of messages by creating 
an Exchange that encapsulates a List. This SjmsProducer will take then iterate 
through the contents of the List and publish each message individually.</p>
 
 <p>If when producing a batch of messages there is the need to set headers that 
are unique to each message you can use the SJMS <a shape="rect" 
class="external-link" 
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/BatchMessage.java";>BatchMessage</a>
 class. When the SjmsProducer encounters a BatchMessage List it will iterate 
each BatchMessage and publish the included payload and headers.</p>
 
+<p>Below is an example of using the BatchMessage class.  First we create a 
List of BatchMessages:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+List&lt;BatchMessage&lt;<span class="code-object">String</span>&gt;&gt; 
messages = <span class="code-keyword">new</span> 
ArrayList&lt;BatchMessage&lt;<span class="code-object">String</span>&gt;&gt;();
+<span class="code-keyword">for</span> (<span class="code-object">int</span> i 
= 1; i &lt;= messageCount; i++) {
+    <span class="code-object">String</span> body = <span 
class="code-quote">"Hello World "</span> + i;
+    BatchMessage&lt;<span class="code-object">String</span>&gt; message = 
<span class="code-keyword">new</span> BatchMessage&lt;<span 
class="code-object">String</span>&gt;(body, <span 
class="code-keyword">null</span>);
+    messages.add(message);
+}
+</pre>
+</div></div>
+
+<p>Then publish the List:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+template.sendBody(<span class="code-quote">"sjms:queue:batch.queue"</span>, 
messages);
+</pre>
+</div></div>
+
 <h4><a shape="rect" 
name="SJMS-CustomizableTransactionCommitStrategies%28LocalJMSTransactionsonly%29"></a>Customizable
 Transaction Commit Strategies (Local JMS Transactions only)</h4>
 
 <p>SJMS provides a developer the means to create a custom and plugable 
transaction strategy through the use of the <a shape="rect" 
class="external-link" 
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionCommitStrategy.java";>TransactionCommitStrategy</a>
 interface. This allows a user to define a unique set of circumstances that the 
<a shape="rect" class="external-link" 
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/tx/SessionTransactionSynchronization.java";>SessionTransactionSynchronization</a>
 will use to determine when to commit the Session. An example of its use is the 
<a shape="rect" class="external-link" 
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/tx/BatchTransactionCommitStrategy.java";>BatchTransactionCommitStrategy</a>
 which is detailed further i
 n the next section.</p>
@@ -230,7 +360,28 @@ sjms:queue:transacted.batch.consumer?tra
 
 <p>If an exception occurs during the processing of a batch on the consumer 
endpoint, the Session rollback is invoked causing the messages to be 
redelivered to the next available consumer. The counter is also reset to 0 for 
the BatchTransactionCommitStrategy for the associated Session as well. It is 
the responsibility of the user to ensure they put hooks in their processors of 
batch messages to watch for messages with the JMSRedelivered header set to 
true. This is the indicator that messages were rolled back at some point and 
that a verification of a successful processing should occur.</p>
 
-<p>The producer endpoint is handled much differently though. With the producer 
after each message is delivered to its destination the Exchange is closed and 
there is no longer a reference to that message. To make a available to the 
Given that when a message is delivered to a destinatio</p>
+<p>The producer endpoint is handled much differently though. With the producer 
after each message is delivered to its destination the Exchange is closed and 
there is no longer a reference to that message. To make a available all the 
messages available for redelivery you simply enable transactions on a Producer 
Endpoint that is publishing BatchMessages. The transaction will commit at the 
conclusion of the exchange which includes all messages in the batch list.  
Nothing additional need be configured. For example:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+List&lt;BatchMessage&lt;<span class="code-object">String</span>&gt;&gt; 
messages = <span class="code-keyword">new</span> 
ArrayList&lt;BatchMessage&lt;<span class="code-object">String</span>&gt;&gt;();
+<span class="code-keyword">for</span> (<span class="code-object">int</span> i 
= 1; i &lt;= messageCount; i++) {
+    <span class="code-object">String</span> body = <span 
class="code-quote">"Hello World "</span> + i;
+    BatchMessage&lt;<span class="code-object">String</span>&gt; message = 
<span class="code-keyword">new</span> BatchMessage&lt;<span 
class="code-object">String</span>&gt;(body, <span 
class="code-keyword">null</span>);
+    messages.add(message);
+}
+</pre>
+</div></div>
+
+<p>Now publish the List with transactions enabled:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
+<pre class="code-java">
+template.sendBody(<span 
class="code-quote">"sjms:queue:batch.queue?transacted=<span 
class="code-keyword">true</span>"</span>, messages);
+</pre>
+</div></div>
+
+<h3><a shape="rect" name="SJMS-AdditionalNotes"></a>Additional Notes</h3>
 
 <h4><a shape="rect" name="SJMS-MessageHeaderFormat"></a>Message Header 
Format</h4>
 
@@ -251,40 +402,15 @@ See also the option jmsKeyFormatStrategy
 
 <p>To deliver content over the wire we must ensure that the body of the 
message that is being delivered adheres to the JMS Message Specification.  
Therefore, all that are produced must either be primitives or their counter 
objects (such as Integer, Long, Character). The types, String, CharSequence, 
Date, BigDecimal and BigInteger are all converted to their toString() 
representation. All other types are dropped.</p>
 
-<h3><a shape="rect" name="SJMS-ExampleUsage"></a>Example Usage</h3>
-
-<h4><a shape="rect" name="SJMS-InOnlyProducer%28Default%29"></a>InOnly 
Producer - (Default)</h4>
-
-<p>The InOnly Producer is the default behavior of the SJMS Producer 
Endpoint.</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-from(<span class="code-quote">"direct:start"</span>)
-    .to(<span class="code-quote">"sjms:queue:bar"</span>);
-</pre>
-</div></div>
-
-<h4><a shape="rect" name="SJMS-InOutProducer"></a>InOut Producer</h4>
-
-<p>To enable InOut behavior append the <tt>exchangePattern</tt> attribute to 
the URI.  By default it will use a dedicated TemporaryQueue for each 
consumer.</p>
+<h4><a shape="rect" name="SJMS-Clustering"></a>Clustering</h4>
 
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-from(<span class="code-quote">"direct:start"</span>)
-    .to(<span 
class="code-quote">"sjms:queue:bar?exchangePattern=InOut"</span>);
-</pre>
-</div></div>
+<p>When using InOut with SJMS in a clustered environment you must either use 
TemporaryQueue destinations or use a unique named reply to destination per 
InOut producer endpoint.  Message correlation is handled by the endpoint, not 
with message selectors at the broker.  The InOut Producer Endpoint uses Java 
Concurrency Exchangers cached by the Message JMSCorrelationID.  This provides a 
nice performance increase while reducing the overhead on the broker since all 
the messages are consumed from the destination in the order they are produced 
by the interested consumer.</p>
 
-<p>You can specify a <tt>namedReplyTo</tt> though which can provide a better 
monitor point.</p>
+<p>Currently the only correlation strategy is to use the JMSCorrelationId.  
The InOut Consumer uses this strategy as well ensuring that all responses 
messages to the included JMSReplyTo destination also have the JMSCorrelationId 
copied from the request as well.</p>
 
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-from(<span class="code-quote">"direct:start"</span>)
-    .to(<span 
class="code-quote">"sjms:queue:bar?exchangePattern=InOut&amp;namedReplyTo=my.reply.to.queue"</span>);
-</pre>
-</div></div>
+<h3><a shape="rect" name="SJMS-TransactionSupport"></a>Transaction Support <a 
shape="rect" name="SJMS-transactions"></a></h3>
 
-<h3><a shape="rect" name="SJMS-AdditionalNotes"></a>Additional Notes</h3>
+<p>SJMS currently only supports the use of internal JMS Transactions. There is 
no support for the Camel Transaction Processor or the Java Transaction API 
(JTA).</p>
 
 <h4><a shape="rect" 
name="SJMS-DoesSpringlessMeanICan%27tUseSpring%3F"></a>Does Springless Mean I 
Can't Use Spring?</h4>
 
@@ -302,17 +428,7 @@ from(<span class="code-quote">"direct:st
 </pre>
 </div></div>
 
-<p>Springless refers to moving away from the dependency on the Spring JMS API. 
 A new JMS client API is being developed from the ground up to power SJMS.</p>
-
-<h4><a shape="rect" name="SJMS-Clustering"></a>Clustering</h4>
-
-<p>When using InOut with SJMS in a clustered environment you must either use 
TemporaryQueue destinations or use a unique named reply to destination per 
InOut producer endpoint.  Message correlation is handled by the endpoint, not 
with message selectors at the broker.  The InOut Producer Endpoint uses Java 
Concurrency Exchangers cached by the Message JMSCorrelationID.  This provides a 
nice performance increase while reducing the overhead on the broker since all 
the messages are consumed from the destination in the order they are produced 
by the interested consumer.</p>
-
-<p>Currently the only correlation strategy is to use the JMSCorrelationId.  
The InOut Consumer uses this strategy as well ensuring that all responses 
messages to the included JMSReplyTo destination also have the JMSCorrelationId 
copied from the request as well.</p>
-
-<h3><a shape="rect" name="SJMS-TransactionSupport"></a>Transaction Support <a 
shape="rect" name="SJMS-transactions"></a></h3>
-
-<p>SJMS currently only supports the use of internal JMS Transactions. There is 
no support for the Camel Transaction Processor or the Java Transaction API 
(JTA).</p></div>
+<p>Springless refers to moving away from the dependency on the Spring JMS API. 
 A new JMS client API is being developed from the ground up to power 
SJMS.</p></div>
         </td>
         <td valign="top">
           <div class="navigation">


Reply via email to