camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r821570 - in /websites/production/camel/content: book-component-appendix.html book-in-one-page.html cache/main.pageCache camel-2100-release.html netty.html
Date Wed, 13 Jun 2012 10:20:46 GMT
Author: buildbot
Date: Wed Jun 13 10:20:45 2012
New Revision: 821570

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/camel-2100-release.html
    websites/production/camel/content/netty.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 Wed Jun 13 10:20:45 2012
@@ -11931,10 +11931,19 @@ netty:tcp:<span class="code-comment">//l
 The values that could be passed in, are the following:</p>
 
 <div class="confluenceTableSmall"><div class="table-wrap">
-<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>passphrase</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> password setting to use in order to encrypt/decrypt payloads sent using SSH </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFormat</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> keystore format to be used for payload encryption. Defaults to "JKS" if not set </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>securityProvider</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Security provider to be used for payload encryption. Defaults to "SunX509" if not set. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Client side ce
 rtificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>trustStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Server side certificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>sslHandler</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Reference to a class that could be used to return an SSL Handler </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom Handler class that can be used to perform special marshalling of outbound payloads. Must override <tt>org.jboss.netty.channel.ChannelDownStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encorders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of encoder to be used. You can use a String which have values separated by comma, and have 
 the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom Handler class that can be used to perform special marshalling of inbound payloads. Must override <tt>org.jboss.netty.channel.ChannelUpStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of decorder to be used. You can use a String which have values separated by comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr></tbody></table>
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>passphrase</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> password setting to use in order to encrypt/decrypt payloads sent using SSH </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFormat</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> keystore format to be used for payload encryption. Defaults to "JKS" if not set </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>securityProvider</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Security provider to be used for payload encryption. Defaults to "SunX509" if not set. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Client side ce
 rtificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>trustStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Server side certificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>sslHandler</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Reference to a class that could be used to return an SSL Handler </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom <tt>ChannelHandler</tt> class that can be used to perform special marshalling of outbound payloads. Must override <tt>org.jboss.netty.channel.ChannelDownStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encorders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of encoders to be used. You can use a String which have values separated by
  comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom <tt>ChannelHandler</tt> class that can be used to perform special marshalling of inbound payloads. Must override <tt>org.jboss.netty.channel.ChannelUpStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of decoders to be used. You can use a String which have values separated by comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr></tbody></table>
 </div>
 </div>
 
+<p><b>Important:</b> Read below about using non shareable encoders/decoders.</p>
+
+<h4><a shape="rect" name="BookComponentAppendix-Usingnonshareableencodersordecoders"></a>Using non shareable encoders or decoders</h4>
+
+<p>If your encoders or decoders is not shareable (eg they have the @Shareable class annotation), then your encoder/decoder must implement the <tt>org.apache.camel.component.netty.ChannelHandlerFactory</tt> interface, and return a new instance in the <tt>newChannelHandler</tt> method. This is to ensure the encoder/decoder can safely be used. If this is not the case, then the Netty component will log a WARN when<br clear="none">
+an endpoint is created.</p>
+
+<p>The Netty component offers a <tt>org.apache.camel.component.netty.ChannelHandlerFactories</tt> factory class, that has a number of commonly used methods.</p>
+
 <h3><a shape="rect" name="BookComponentAppendix-SendingMessagesto%2FfromaNettyendpoint"></a>Sending Messages to/from a Netty endpoint</h3>
 
 <h4><a shape="rect" name="BookComponentAppendix-NettyProducer"></a>Netty Producer</h4>
@@ -12062,10 +12071,13 @@ context.addRoutes(<span class="code-keyw
 
 <p>In certain cases it may be necessary to add chains of encoders and decoders to the netty pipeline. To add multpile codecs to a camel netty endpoint the 'encoders' and 'decoders' uri parameters should be used. Like the 'encoder' and 'decoder' parameters they are used to supply references (to lists of ChannelUpstreamHandlers and ChannelDownstreamHandlers) that should be added to the  pipeline. Note that if encoders is specified then the encoder param will be ignored, similarly for decoders and the decoder param.</p>
 
+<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">Read further above about using non shareable encoders/decoders.</td></tr></table></div>
+
 <p>The lists of codecs need to be added to the Camel's registry so they can be resolved when the endpoint is created.</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">LengthFieldBasedFrameDecoder lengthDecoder = <span class="code-keyword">new</span> LengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4);
+<pre class="code-java">ChannelHandlerFactory lengthDecoder = ChannelHandlerFactories.newLengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4);
+
 StringDecoder stringDecoder = <span class="code-keyword">new</span> StringDecoder();
 registry.bind(<span class="code-quote">"length-decoder"</span>, lengthDecoder);
 registry.bind(<span class="code-quote">"string-decoder"</span>, stringDecoder);
@@ -12075,11 +12087,11 @@ StringEncoder stringEncoder = <span clas
 registry.bind(<span class="code-quote">"length-encoder"</span>, lengthEncoder);
 registry.bind(<span class="code-quote">"string-encoder"</span>, stringEncoder);
 
-List&lt;ChannelUpstreamHandler&gt; decoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelUpstreamHandler&gt;();
+List&lt;ChannelHandler&gt; decoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelHandler&gt;();
 decoders.add(lengthDecoder);
 decoders.add(stringDecoder);
 
-List&lt;ChannelDownstreamHandler&gt; encoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelDownstreamHandler&gt;();
+List&lt;ChannelHandler&gt; encoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelHandler&gt;();
 encoders.add(lengthEncoder);
 encoders.add(stringEncoder);
 
@@ -12092,7 +12104,7 @@ registry.bind(<span class="code-quote">"
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <pre class="code-xml">    <span class="code-tag">&lt;util:list id=<span class="code-quote">"decoders"</span> list-class=<span class="code-quote">"java.util.LinkedList"</span>&gt;</span>
-        <span class="code-tag">&lt;bean class=<span class="code-quote">"org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder"</span>&gt;</span>
+        <span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.camel.component.netty.ChannelHandlerFactories"</span> factory-method=<span class="code-quote">"newLengthFieldBasedFrameDecoder"</span>&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"1048576"</span>/&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"0"</span>/&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"4"</span>/&gt;</span>
@@ -12114,7 +12126,7 @@ registry.bind(<span class="code-quote">"
     <span class="code-tag">&lt;/bean&gt;</span>
     <span class="code-tag">&lt;bean id=<span class="code-quote">"string-encoder"</span> class=<span class="code-quote">"org.jboss.netty.handler.codec.string.StringEncoder"</span>/&gt;</span>
 
-    <span class="code-tag">&lt;bean id=<span class="code-quote">"length-decoder"</span> class=<span class="code-quote">"org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder"</span>&gt;</span>
+    <span class="code-tag">&lt;bean id=<span class="code-quote">"length-decoder"</span> class=<span class="code-quote">"org.apache.camel.component.netty.ChannelHandlerFactories"</span> factory-method=<span class="code-quote">"newLengthFieldBasedFrameDecoder"</span>&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"1048576"</span>/&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"0"</span>/&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"4"</span>/&gt;</span>
@@ -12187,11 +12199,11 @@ For instance, the example below will clo
 <p>In order to add a custom pipeline, a custom channel pipeline factory must be created and registered with the context via the context registry (JNDIRegistry,or the camel-spring ApplicationContextRegistry etc).</p>
 
 <p>A custom pipeline factory must be constructed as follows</p>
-<ul><li>A Producer linked channel pipeline factory must extend the abstract class <tt>ClientPipelineFactory</tt>.</li><li>A Consumer linked channel pipeline factory must extend the abstract class <tt>ServerPipelineFactory</tt>.</li><li><b>Camel 2.9.1 or older:</b> The classes should override the getPipeline() method in order to insert custom handler(s), encoder(s) and decoder(s). Not overriding the getPipeline() method creates a pipeline with no handlers, encoders or decoders wired to the pipeline.</li><li><b>Camel 2.9.2 or newer:</b> The classes must implement the getPipeline(NettyProducer) / getPipeline(NettyConsumer) method in order to insert custom handler(s), encoder(s) and decoder(s).</li></ul>
+<ul><li>A Producer linked channel pipeline factory must extend the abstract class <tt>ClientPipelineFactory</tt>.</li><li>A Consumer linked channel pipeline factory must extend the abstract class <tt>ServerPipelineFactory</tt>.</li><li>The classes should override the getPipeline() method in order to insert custom handler(s), encoder(s) and decoder(s). Not overriding the getPipeline() method creates a pipeline with no handlers, encoders or decoders wired to the pipeline.</li></ul>
 
 
 <p>The example below shows how ServerChannel Pipeline factory may be created</p>
-<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Camel 2.9.1 or older</b></div><div class="codeContent panelContent">
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Using custom pipeline factory</b></div><div class="codeContent panelContent">
 <pre class="code-java">
 <span class="code-keyword">public</span> class SampleServerChannelPipelineFactory <span class="code-keyword">extends</span> ServerPipelineFactory {
     <span class="code-keyword">private</span> <span class="code-object">int</span> maxLineSize = 1024;
@@ -12211,27 +12223,6 @@ For instance, the example below will clo
 </pre>
 </div></div>
 
-<p>And from Camel 2.9.2 onwards you do</p>
-<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Camel 2.9.2 or newer</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">public</span> class SampleServerChannelPipelineFactory <span class="code-keyword">extends</span> ServerPipelineFactory {
-    <span class="code-keyword">private</span> <span class="code-object">int</span> maxLineSize = 1024;
-
-    <span class="code-keyword">public</span> ChannelPipeline getPipeline(NettyConsumer consumer) <span class="code-keyword">throws</span> Exception {
-        ChannelPipeline channelPipeline = Channels.pipeline();
-
-        channelPipeline.addLast(<span class="code-quote">"encoder-SD"</span>, <span class="code-keyword">new</span> StringEncoder(CharsetUtil.UTF_8));
-        channelPipeline.addLast(<span class="code-quote">"decoder-DELIM"</span>, <span class="code-keyword">new</span> DelimiterBasedFrameDecoder(maxLineSize, <span class="code-keyword">true</span>, Delimiters.lineDelimiter()));
-        channelPipeline.addLast(<span class="code-quote">"decoder-SD"</span>, <span class="code-keyword">new</span> StringDecoder(CharsetUtil.UTF_8));
-        <span class="code-comment">// here we add the <span class="code-keyword">default</span> Camel ServerChannelHandler <span class="code-keyword">for</span> the consumer, to allow Camel to route the message etc.
-</span>        channelPipeline.addLast(<span class="code-quote">"handler"</span>, <span class="code-keyword">new</span> ServerChannelHandler(consumer));
-
-        <span class="code-keyword">return</span> channelPipeline;
-    }
-}
-</pre>
-</div></div>
-
 <p>The custom channel pipeline factory can then be added to the registry and instantiated/utilized on a camel route in the following way</p>
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <pre class="code-java">

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 Wed Jun 13 10:20:45 2012
@@ -32355,10 +32355,19 @@ netty:tcp:<span class="code-comment">//l
 The values that could be passed in, are the following:</p>
 
 <div class="confluenceTableSmall"><div class="table-wrap">
-<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>passphrase</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> password setting to use in order to encrypt/decrypt payloads sent using SSH </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFormat</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> keystore format to be used for payload encryption. Defaults to "JKS" if not set </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>securityProvider</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Security provider to be used for payload encryption. Defaults to "SunX509" if not set. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Client side ce
 rtificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>trustStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Server side certificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>sslHandler</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Reference to a class that could be used to return an SSL Handler </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom Handler class that can be used to perform special marshalling of outbound payloads. Must override <tt>org.jboss.netty.channel.ChannelDownStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encorders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of encoder to be used. You can use a String which have values separated by comma, and have 
 the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom Handler class that can be used to perform special marshalling of inbound payloads. Must override <tt>org.jboss.netty.channel.ChannelUpStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of decorder to be used. You can use a String which have values separated by comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr></tbody></table>
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>passphrase</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> password setting to use in order to encrypt/decrypt payloads sent using SSH </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFormat</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> keystore format to be used for payload encryption. Defaults to "JKS" if not set </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>securityProvider</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Security provider to be used for payload encryption. Defaults to "SunX509" if not set. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Client side ce
 rtificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>trustStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Server side certificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>sslHandler</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Reference to a class that could be used to return an SSL Handler </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom <tt>ChannelHandler</tt> class that can be used to perform special marshalling of outbound payloads. Must override <tt>org.jboss.netty.channel.ChannelDownStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encorders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of encoders to be used. You can use a String which have values separated by
  comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom <tt>ChannelHandler</tt> class that can be used to perform special marshalling of inbound payloads. Must override <tt>org.jboss.netty.channel.ChannelUpStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of decoders to be used. You can use a String which have values separated by comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr></tbody></table>
 </div>
 </div>
 
+<p><b>Important:</b> Read below about using non shareable encoders/decoders.</p>
+
+<h4><a shape="rect" name="BookInOnePage-Usingnonshareableencodersordecoders"></a>Using non shareable encoders or decoders</h4>
+
+<p>If your encoders or decoders is not shareable (eg they have the @Shareable class annotation), then your encoder/decoder must implement the <tt>org.apache.camel.component.netty.ChannelHandlerFactory</tt> interface, and return a new instance in the <tt>newChannelHandler</tt> method. This is to ensure the encoder/decoder can safely be used. If this is not the case, then the Netty component will log a WARN when<br clear="none">
+an endpoint is created.</p>
+
+<p>The Netty component offers a <tt>org.apache.camel.component.netty.ChannelHandlerFactories</tt> factory class, that has a number of commonly used methods.</p>
+
 <h3><a shape="rect" name="BookInOnePage-SendingMessagesto%2FfromaNettyendpoint"></a>Sending Messages to/from a Netty endpoint</h3>
 
 <h4><a shape="rect" name="BookInOnePage-NettyProducer"></a>Netty Producer</h4>
@@ -32486,10 +32495,13 @@ context.addRoutes(<span class="code-keyw
 
 <p>In certain cases it may be necessary to add chains of encoders and decoders to the netty pipeline. To add multpile codecs to a camel netty endpoint the 'encoders' and 'decoders' uri parameters should be used. Like the 'encoder' and 'decoder' parameters they are used to supply references (to lists of ChannelUpstreamHandlers and ChannelDownstreamHandlers) that should be added to the  pipeline. Note that if encoders is specified then the encoder param will be ignored, similarly for decoders and the decoder param.</p>
 
+<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">Read further above about using non shareable encoders/decoders.</td></tr></table></div>
+
 <p>The lists of codecs need to be added to the Camel's registry so they can be resolved when the endpoint is created.</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">LengthFieldBasedFrameDecoder lengthDecoder = <span class="code-keyword">new</span> LengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4);
+<pre class="code-java">ChannelHandlerFactory lengthDecoder = ChannelHandlerFactories.newLengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4);
+
 StringDecoder stringDecoder = <span class="code-keyword">new</span> StringDecoder();
 registry.bind(<span class="code-quote">"length-decoder"</span>, lengthDecoder);
 registry.bind(<span class="code-quote">"string-decoder"</span>, stringDecoder);
@@ -32499,11 +32511,11 @@ StringEncoder stringEncoder = <span clas
 registry.bind(<span class="code-quote">"length-encoder"</span>, lengthEncoder);
 registry.bind(<span class="code-quote">"string-encoder"</span>, stringEncoder);
 
-List&lt;ChannelUpstreamHandler&gt; decoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelUpstreamHandler&gt;();
+List&lt;ChannelHandler&gt; decoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelHandler&gt;();
 decoders.add(lengthDecoder);
 decoders.add(stringDecoder);
 
-List&lt;ChannelDownstreamHandler&gt; encoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelDownstreamHandler&gt;();
+List&lt;ChannelHandler&gt; encoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelHandler&gt;();
 encoders.add(lengthEncoder);
 encoders.add(stringEncoder);
 
@@ -32516,7 +32528,7 @@ registry.bind(<span class="code-quote">"
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <pre class="code-xml">    <span class="code-tag">&lt;util:list id=<span class="code-quote">"decoders"</span> list-class=<span class="code-quote">"java.util.LinkedList"</span>&gt;</span>
-        <span class="code-tag">&lt;bean class=<span class="code-quote">"org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder"</span>&gt;</span>
+        <span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.camel.component.netty.ChannelHandlerFactories"</span> factory-method=<span class="code-quote">"newLengthFieldBasedFrameDecoder"</span>&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"1048576"</span>/&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"0"</span>/&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"4"</span>/&gt;</span>
@@ -32538,7 +32550,7 @@ registry.bind(<span class="code-quote">"
     <span class="code-tag">&lt;/bean&gt;</span>
     <span class="code-tag">&lt;bean id=<span class="code-quote">"string-encoder"</span> class=<span class="code-quote">"org.jboss.netty.handler.codec.string.StringEncoder"</span>/&gt;</span>
 
-    <span class="code-tag">&lt;bean id=<span class="code-quote">"length-decoder"</span> class=<span class="code-quote">"org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder"</span>&gt;</span>
+    <span class="code-tag">&lt;bean id=<span class="code-quote">"length-decoder"</span> class=<span class="code-quote">"org.apache.camel.component.netty.ChannelHandlerFactories"</span> factory-method=<span class="code-quote">"newLengthFieldBasedFrameDecoder"</span>&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"1048576"</span>/&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"0"</span>/&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"4"</span>/&gt;</span>
@@ -32611,11 +32623,11 @@ For instance, the example below will clo
 <p>In order to add a custom pipeline, a custom channel pipeline factory must be created and registered with the context via the context registry (JNDIRegistry,or the camel-spring ApplicationContextRegistry etc).</p>
 
 <p>A custom pipeline factory must be constructed as follows</p>
-<ul><li>A Producer linked channel pipeline factory must extend the abstract class <tt>ClientPipelineFactory</tt>.</li><li>A Consumer linked channel pipeline factory must extend the abstract class <tt>ServerPipelineFactory</tt>.</li><li><b>Camel 2.9.1 or older:</b> The classes should override the getPipeline() method in order to insert custom handler(s), encoder(s) and decoder(s). Not overriding the getPipeline() method creates a pipeline with no handlers, encoders or decoders wired to the pipeline.</li><li><b>Camel 2.9.2 or newer:</b> The classes must implement the getPipeline(NettyProducer) / getPipeline(NettyConsumer) method in order to insert custom handler(s), encoder(s) and decoder(s).</li></ul>
+<ul><li>A Producer linked channel pipeline factory must extend the abstract class <tt>ClientPipelineFactory</tt>.</li><li>A Consumer linked channel pipeline factory must extend the abstract class <tt>ServerPipelineFactory</tt>.</li><li>The classes should override the getPipeline() method in order to insert custom handler(s), encoder(s) and decoder(s). Not overriding the getPipeline() method creates a pipeline with no handlers, encoders or decoders wired to the pipeline.</li></ul>
 
 
 <p>The example below shows how ServerChannel Pipeline factory may be created</p>
-<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Camel 2.9.1 or older</b></div><div class="codeContent panelContent">
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Using custom pipeline factory</b></div><div class="codeContent panelContent">
 <pre class="code-java">
 <span class="code-keyword">public</span> class SampleServerChannelPipelineFactory <span class="code-keyword">extends</span> ServerPipelineFactory {
     <span class="code-keyword">private</span> <span class="code-object">int</span> maxLineSize = 1024;
@@ -32635,27 +32647,6 @@ For instance, the example below will clo
 </pre>
 </div></div>
 
-<p>And from Camel 2.9.2 onwards you do</p>
-<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Camel 2.9.2 or newer</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">public</span> class SampleServerChannelPipelineFactory <span class="code-keyword">extends</span> ServerPipelineFactory {
-    <span class="code-keyword">private</span> <span class="code-object">int</span> maxLineSize = 1024;
-
-    <span class="code-keyword">public</span> ChannelPipeline getPipeline(NettyConsumer consumer) <span class="code-keyword">throws</span> Exception {
-        ChannelPipeline channelPipeline = Channels.pipeline();
-
-        channelPipeline.addLast(<span class="code-quote">"encoder-SD"</span>, <span class="code-keyword">new</span> StringEncoder(CharsetUtil.UTF_8));
-        channelPipeline.addLast(<span class="code-quote">"decoder-DELIM"</span>, <span class="code-keyword">new</span> DelimiterBasedFrameDecoder(maxLineSize, <span class="code-keyword">true</span>, Delimiters.lineDelimiter()));
-        channelPipeline.addLast(<span class="code-quote">"decoder-SD"</span>, <span class="code-keyword">new</span> StringDecoder(CharsetUtil.UTF_8));
-        <span class="code-comment">// here we add the <span class="code-keyword">default</span> Camel ServerChannelHandler <span class="code-keyword">for</span> the consumer, to allow Camel to route the message etc.
-</span>        channelPipeline.addLast(<span class="code-quote">"handler"</span>, <span class="code-keyword">new</span> ServerChannelHandler(consumer));
-
-        <span class="code-keyword">return</span> channelPipeline;
-    }
-}
-</pre>
-</div></div>
-
 <p>The custom channel pipeline factory can then be added to the registry and instantiated/utilized on a camel route in the following way</p>
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <pre class="code-java">

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

Modified: websites/production/camel/content/camel-2100-release.html
==============================================================================
--- websites/production/camel/content/camel-2100-release.html (original)
+++ websites/production/camel/content/camel-2100-release.html Wed Jun 13 10:20:45 2012
@@ -84,7 +84,7 @@
 
 <p>Welcome to the 2.10.0 release with approximately XXX issues resolved - including new features, improvements, and bug fixes, such as: </p>
 
-<ul><li>Added support for Java 1.7</li><li>Added consumer to <a shape="rect" href="jcr.html" title="JCR">JCR</a> component</li><li>Internal code cleanup to reduce warnings reported by Eclipse</li><li>Moved <a shape="rect" href="spring-testing.html" title="Spring Testing">Spring Testing</a> from <tt>camel-test</tt> to <tt>camel-test-spring</tt> component.</li><li>Camel <a shape="rect" href="using-propertyplaceholder.html" title="Using PropertyPlaceholder">Property Placeholders</a> are now supported in embedded <a shape="rect" href="expression.html" title="Expression">Expression</a>s within Camel routes.</li><li>Added missing options in the XML DSL for the <a shape="rect" href="xpath.html" title="XPath">XPath</a> language to control and set which XPath Engine to use, etc.</li><li>Added option <tt>logNamespaces</tt> to the <a shape="rect" href="xpath.html" title="XPath">XPath</a> language to have <tt>INFO</tt> logging of detected namespaces from message.  This can be used to tr
 oubleshoot issues where an <a shape="rect" href="xpath.html" title="XPath">XPath</a> expression doesn't work as expected (as it's often a namespace conflict).</li><li>Added <tt>replyToCacheLevelName</tt> option to the <a shape="rect" href="jms.html" title="JMS">JMS</a> component, allowing configuration of cache levels for persistent reply consumers when doing request/reply over JMS. Some message brokers do not work well with caching, so users may need to set this option to <tt>CACHE_NONE</tt>.</li><li>Added <tt>antInclude</tt> and <tt>antExclude</tt> options to <a shape="rect" href="file2.html" title="File2">File</a> and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> components to make it easier to specify include/exclude filters using ANT syntax.</li><li>The <a shape="rect" href="camel-maven-archetypes.html" title="Camel Maven Archetypes">Camel archetypes</a> for Java and Scala no longer generate projects with Spring dependencies.</li><li>Improved <tt>JdbcMessageIdRe
 pository</tt> in the <a shape="rect" href="sql-component.html" title="SQL Component">SQL</a> to use custom SQL statements/queries.</li><li>Added option to <a shape="rect" href="properties.html" title="Properties">Properties</a> to allow silently ignoring property locations not found, such as a .properties file.</li><li>Added <tt>managementNamePattern</tt> attribute to <tt>&lt;camelContext&gt;</tt> to make it very easy to customize and control the JMX naming of the Camel application. See details at <a shape="rect" href="camel-jmx.html#CamelJMX-CamelJMXManagementNamingStrategy">Camel JMX</a>. For example, in OSGi environments you can explicitly configure a <tt>managementNamePattern</tt> in case you do not want the bundleId as part of MBean names.</li><li>Added streaming update support to <a shape="rect" href="solr.html" title="Solr">Solr</a> as well as support for SolrInputDocuments</li><li>Added SolrJ DirectXMLRequest support to <a shape="rect" href="solr.html" title="Solr">S
 olr</a> to support XML based index updates</li><li>Improved Camel <a shape="rect" href="mail.html" title="Mail">Mail</a> to support the <tt>replyTo</tt> option</li><li>Added <tt>traceEnabled</tt> option to <a shape="rect" href="jetty.html" title="Jetty">Jetty</a> component so you have control over whether to allow HTTP TRACE calls against your Jetty endpoints.</li><li>Polished the <a shape="rect" href="camel-maven-archetypes.html" title="Camel Maven Archetypes">Camel Maven Archetypes</a> to let the projects be prepared for <a shape="rect" href="testing.html" title="Testing">Testing</a>, and fixed any WARNs from Maven.</li><li>Added <tt>dumpRouteStatsAsXml</tt> methods to <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> to make it easier to get the total performance stats as XML, and in one JMX call.</li><li><a shape="rect" href="graceful-shutdown.html" title="Graceful Shutdown">Graceful Shutdown</a> is now more aggressive if timeout occurred during shutdown, r
 ejecting continued processing of messages or redeliveries.</li><li>Add <tt>ShutdownPrepared</tt> SPI to allow custom Services (also EIPs) in routes to do custom code in preparation for shutdown.</li><li>The <tt>camel-archetype-java</tt> <a shape="rect" href="camel-maven-archetypes.html" title="Camel Maven Archetypes">Camel Maven Archetypes</a> is now a pure Java DSL based project (no longer Spring)</li><li><a shape="rect" href="jms.html" title="JMS">JMS</a> consumer is less verbose when logging uncaught exceptions thrown while processing a message. Added <tt>errorHandlerLoggingLevel</tt>, and <tt>errorHandlerLogStackTrace</tt> options to tweak the logging verbosity.</li><li>Added <tt>messageId</tt> as an <a shape="rect" href="mdc-logging.html" title="MDC logging">MDC logging</a> key.</li><li>Improved Camel's Transaction <a shape="rect" href="error-handler.html" title="Error Handler">Error Handler</a> logging to better pinpoint and correlate redelivered messages (from, e.g., 
 a JMS broker), making the logs much easier to read.</li><li>Added a timeout option to <a shape="rect" href="spring-web-services.html" title="Spring Web Services">Spring Web Services</a> for specifying the read timeout while invoking a webservice.</li><li>Optimized <a shape="rect" href="type-converter.html" title="Type Converter">Type Converter</a> registry for possible concurrency contention when looking up a type converter.</li><li>Improved <a shape="rect" href="simple.html" title="Simple">Simple</a> language to work better with floating point numbers in <a shape="rect" href="predicate.html" title="Predicate">Predicate</a>s</li><li>Camel is now less verbose when starting and stopping, with less being logged at <tt>INFO</tt> level.</li><li>Add support for keyed data queues to <a shape="rect" href="jt400.html" title="JT400">JT400</a> component.</li><li><a shape="rect" href="idempotent-consumer.html" title="Idempotent Consumer">Idempotent Consumer</a> is now enlisted in JMX, w
 hich allows monitoring the duplicate message count as well as the operation to reset it.</li><li>Thread pools registered in <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> are now unregistered when Camel shuts them down. Note that all MBeans will be unregistered from JMX when Camel shuts itself down. This improvement is to unregister thread pools more eagerly, such as when routes are removed at runtime.</li><li>Camel will now also copy the message headers for a <tt>JmsMessage</tt> if you leverage <tt>useOriginalMessage</tt> in an <tt>onException</tt> definition.</li><li>Added <tt>mockEndpointsAndSkip</tt> to <a shape="rect" href="advicewith.html" title="AdviceWith">AdviceWith</a> and the <a shape="rect" href="testing.html" title="Testing">Test Kit</a></li><li>The <a shape="rect" href="file2.html" title="File2">File</a> and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> components now support filtering directories. The <tt>isDirectory</tt> method on the
  <tt>GenericFile</tt> class can be used to skip unwanted directories, accelerating file consumption.</li><li><a shape="rect" href="smpp.html" title="SMPP">SMPP</a> connections can now be tunneled through an HTTP proxy by configuring HTTP proxy settings.</li><li>Camel now also checks, when starting a route dynamically, whether there would be any violations on multiple consumers from the same <a shape="rect" href="endpoint.html" title="Endpoint">Endpoint</a>. Previously this check only occurred during Camel startup - now it always happens.</li><li>Stopping a <tt>ConsumerTemplate</tt> or a <tt>ProducerTemplate</tt> will now stop and shutdown its cache to cleanup any resources which otherwise may not have been reclaimed until shutdown.</li><li><a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/impl/ScheduledPollConsumer.html">ScheduledPollConsumer</a> will now shutdown thread pools more eagerly, such as when stop
 ping a <tt>ConsumerTemplate</tt>.</li><li>Added option <tt>asyncStartListener</tt> to <a shape="rect" href="jms.html" title="JMS">JMS</a> to allow starting JMS consumers (e.g. routes) asynchronously. This can be used to avoid blocking in case the JMS consumer takes long time to establish a connection to the JMS broker.</li><li><a shape="rect" href="wire-tap.html" title="Wire Tap">Wire Tap</a> now supports <a shape="rect" href="error-handling-in-camel.html" title="Error handling in Camel">Error Handling</a> when sending a tapped message to an <a shape="rect" href="endpoint.html" title="Endpoint">Endpoint</a>.</li><li>Added the autogenColumns, configRef and strategyRef options to the <a shape="rect" href="csv.html" title="CSV">CSV</a> dataformat in XML DSL whereas the new skipFirstLine option is provided in Java API as well.</li><li><a shape="rect" href="validation.html" title="Validation">Validator</a> component will now fail with a better error message if resource schema ref
 ers to element which cannot be resolved.</li><li>Added support for retrieving generated keys from <a shape="rect" href="jdbc.html" title="JDBC">JDBC</a> component.</li><li>Added support for Spring 3.1.x.</li><li>Added <tt>retainFirst</tt>, and <tt>retainLast</tt> options to <a shape="rect" href="mock.html" title="Mock">Mock</a> component.</li><li>Improved <a shape="rect" href="simple.html" title="Simple">Simple</a> language to allow referring to headers using bracket notation.</li><li>Added support for the scp: protocol via <a shape="rect" href="jsch.html" title="Jsch">Jsch</a>.</li><li>Added support to exclude certain fields when marshalling POJO's to <a shape="rect" href="json.html" title="JSON">JSON</a>. Available with both the Jackson and GSON library.</li><li>Allow to configure frequency of timeout checker when doing request/reply over <a shape="rect" href="jms.html" title="JMS">JMS</a></li><li>Improved the Java DSL to make it easier to use predicates from the build-in 
 DSL, that has commonly used predicates and expressions.</li><li><a shape="rect" href="aggregator2.html" title="Aggregator2">Aggregate</a> EIP now supports <tt>TimeoutAwareAggregationStrategy</tt> aggregation strategies.</li><li>The default <tt>Injector</tt> now performs bean post processing to inject @Produce, @Consume, @EndpointInject fields etc.</li><li>The <a shape="rect" href="camel-run-maven-goal.html" title="Camel Run Maven Goal">camel-run</a> maven plugin now supports running <a shape="rect" href="using-osgi-blueprint-with-camel.html" title="Using OSGi blueprint with Camel">OSGi Blueprint applications</a>.</li><li>Added utilization statistics to the type converter registry (which can be accessed from <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a>), and are logged as Camel is shutting down.</li><li>Improved <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> to work better with servers such as WebSphere which alters MBean names when enlisti
 ng mbeans into the server (Camel now have an internal mapping table).</li><li>All <a shape="rect" href="eip.html" title="EIP">EIP</a>s out of the box from Camel now provides <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> utilization statistics.</li><li>The <a shape="rect" href="file2.html" title="File2">File</a> and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> consumers will now let <tt>org.apache.camel.spi.ExceptionHandler</tt> deal with exceptions occurred during acquiring real lock as well. See <a shape="rect" href="file2.html" title="File2">File</a> page for example of using a custom <tt>ExceptionHandler</tt>.</li><li>Reduce the logging level from ERROR to WARN on the default <tt>LoggingExceptionHandler</tt>.</li><li>Added option <tt>consumer.bridgeErrorHandler</tt> to allow consumers such as <a shape="rect" href="file2.html" title="File2">File</a> and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> to use the routing engine <a shape="rect
 " href="error-handler.html" title="Error Handler">Error Handler</a> to deal with exceptions occurring in the consumer (outside the routing engine), for example if having trouble picking up a file from a shared network drive etc. See more details at <a shape="rect" href="file2.html" title="File2">File</a> page. This option applies to all consumers which extends the <tt>DefaultConsumer</tt> from <tt>camel-core</tt>.</li><li>Added <tt>eagerMaxMessagesPerPoll</tt> option to <a shape="rect" href="file2.html" title="File2">File</a>, and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> endpoints to allow to do a full sorting of the files and also limit the pool at the same time</li><li>The <a shape="rect" href="xslt.html" title="XSLT">XSLT</a>, <a shape="rect" href="velocity.html" title="Velocity">Velocity</a>, <a shape="rect" href="freemarker.html" title="FreeMarker">FreeMarker</a>, and <a shape="rect" href="stringtemplate.html" title="StringTemplate">StringTemplate</a> compo
 nents using http resource for the template now supports query parameters</li><li>You can specify the class type with <a shape="rect" href="bindy.html" title="Bindy">Bindy</a> to make it stand out what type is being used, as well the <tt>unmarshal</tt> operation returns a list of the pojos (and the pojo directly if only 1). Which makes it easier to use/work with.</li><li>Added <tt>group</tt> option to <a shape="rect" href="tokenizer.html" title="Tokenizer">Tokenizer</a> to make it easier with the <a shape="rect" href="splitter.html" title="Splitter">Splitter</a> to split by combining N number of parts together, eg splitting files in chunks by N lines combined.</li><li>Camel is now compatible to the upcoming Karaf 3 release</li><li>Added <tt>ExchangeSendingEvent</tt> to <tt>EventNotifier</tt> to emit an event <b>before</b> sending an <a shape="rect" href="exchange.html" title="Exchange">Exchange</a> to an <a shape="rect" href="endpoint.html" title="Endpoint">Endpoint</a>. Then
  we have events for both before and after.</li><li>Relaxed syntax check in <a shape="rect" href="simple.html" title="Simple">Simple</a> language to only scan for functions if a start token was explicit configured. This allows to easier do json like expressions.</li><li>Added support for escaping values in <a shape="rect" href="simple.html" title="Simple">Simple</a> language using the \ character.</li><li>Added new <a shape="rect" href="camel-maven-archetypes.html" title="Camel Maven Archetypes">Camel Maven Archetypes</a> for creating new <a shape="rect" href="component.html" title="Component">Component</a> using Scala.</li><li>Added <tt>trim</tt> option to <a shape="rect" href="languages.html" title="Languages">Languages</a> in the XML DSL, to control trimming the expression values, to remove the whitespace noise from XML tags.</li><li>Improved the <a shape="rect" href="file2.html" title="File2">File</a> consumer to support competing consumers on a shared drive to not pickup
  files from other consumers, as marker file is always used, for <tt>readLock</tt> strategies such as changed, rename and fileLock. For example if you have a clustered environment and have multiple Camel applications pickup files from a shared drive with <tt>readLock=changed</tt>.</li><li>The <a shape="rect" href="file2.html" title="File2">File</a> consumer with <tt>readLock=changed</tt> will now consider zero length file as in progress files.</li><li>Made it easier to <a shape="rect" href="using-propertyplaceholder.html" title="Using PropertyPlaceholder">bridge Spring and Camel property placeholders</a>, by configuring only once, using a new <tt>BridgePropertyPlaceholderConfigurer</tt> bean type.</li><li>Improved the <a shape="rect" href="smpp.html" title="SMPP">SMPP</a> component to refer to a <tt>org.jsmpp.session.SessionStateListener</tt> to receive callbacks when the session state changed.</li><li>Added connection pooling to <a shape="rect" href="jt400.html" title="JT400
 ">JT400</a> component</li><li><a shape="rect" href="restlet.html" title="Restlet">Restlet</a> component can be configured with Restlet Server parameters, for example to configure thread pool sizes.</li><li>CamelContext MBean in <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> now shows aggregated performance stats for all the routes</li><li>Made it easy to override properties when <a shape="rect" href="testing.html" title="Testing">Testing</a> with Camel when <a shape="rect" href="using-propertyplaceholder.html" title="Using PropertyPlaceholder">Using PropertyPlaceholder</a>. For example unit testing with OSGi Blueprint using config admin service to provide properties, is now easy as you can provide the properties from directly within the unit test source code itself.</li></ul>
+<ul><li>Added support for Java 1.7</li><li>Added consumer to <a shape="rect" href="jcr.html" title="JCR">JCR</a> component</li><li>Internal code cleanup to reduce warnings reported by Eclipse</li><li>Moved <a shape="rect" href="spring-testing.html" title="Spring Testing">Spring Testing</a> from <tt>camel-test</tt> to <tt>camel-test-spring</tt> component.</li><li>Camel <a shape="rect" href="using-propertyplaceholder.html" title="Using PropertyPlaceholder">Property Placeholders</a> are now supported in embedded <a shape="rect" href="expression.html" title="Expression">Expression</a>s within Camel routes.</li><li>Added missing options in the XML DSL for the <a shape="rect" href="xpath.html" title="XPath">XPath</a> language to control and set which XPath Engine to use, etc.</li><li>Added option <tt>logNamespaces</tt> to the <a shape="rect" href="xpath.html" title="XPath">XPath</a> language to have <tt>INFO</tt> logging of detected namespaces from message.  This can be used to tr
 oubleshoot issues where an <a shape="rect" href="xpath.html" title="XPath">XPath</a> expression doesn't work as expected (as it's often a namespace conflict).</li><li>Added <tt>replyToCacheLevelName</tt> option to the <a shape="rect" href="jms.html" title="JMS">JMS</a> component, allowing configuration of cache levels for persistent reply consumers when doing request/reply over JMS. Some message brokers do not work well with caching, so users may need to set this option to <tt>CACHE_NONE</tt>.</li><li>Added <tt>antInclude</tt> and <tt>antExclude</tt> options to <a shape="rect" href="file2.html" title="File2">File</a> and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> components to make it easier to specify include/exclude filters using ANT syntax.</li><li>The <a shape="rect" href="camel-maven-archetypes.html" title="Camel Maven Archetypes">Camel archetypes</a> for Java and Scala no longer generate projects with Spring dependencies.</li><li>Improved <tt>JdbcMessageIdRe
 pository</tt> in the <a shape="rect" href="sql-component.html" title="SQL Component">SQL</a> to use custom SQL statements/queries.</li><li>Added option to <a shape="rect" href="properties.html" title="Properties">Properties</a> to allow silently ignoring property locations not found, such as a .properties file.</li><li>Added <tt>managementNamePattern</tt> attribute to <tt>&lt;camelContext&gt;</tt> to make it very easy to customize and control the JMX naming of the Camel application. See details at <a shape="rect" href="camel-jmx.html#CamelJMX-CamelJMXManagementNamingStrategy">Camel JMX</a>. For example, in OSGi environments you can explicitly configure a <tt>managementNamePattern</tt> in case you do not want the bundleId as part of MBean names.</li><li>Added streaming update support to <a shape="rect" href="solr.html" title="Solr">Solr</a> as well as support for SolrInputDocuments</li><li>Added SolrJ DirectXMLRequest support to <a shape="rect" href="solr.html" title="Solr">S
 olr</a> to support XML based index updates</li><li>Improved Camel <a shape="rect" href="mail.html" title="Mail">Mail</a> to support the <tt>replyTo</tt> option</li><li>Added <tt>traceEnabled</tt> option to <a shape="rect" href="jetty.html" title="Jetty">Jetty</a> component so you have control over whether to allow HTTP TRACE calls against your Jetty endpoints.</li><li>Polished the <a shape="rect" href="camel-maven-archetypes.html" title="Camel Maven Archetypes">Camel Maven Archetypes</a> to let the projects be prepared for <a shape="rect" href="testing.html" title="Testing">Testing</a>, and fixed any WARNs from Maven.</li><li>Added <tt>dumpRouteStatsAsXml</tt> methods to <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> to make it easier to get the total performance stats as XML, and in one JMX call.</li><li><a shape="rect" href="graceful-shutdown.html" title="Graceful Shutdown">Graceful Shutdown</a> is now more aggressive if timeout occurred during shutdown, r
 ejecting continued processing of messages or redeliveries.</li><li>Add <tt>ShutdownPrepared</tt> SPI to allow custom Services (also EIPs) in routes to do custom code in preparation for shutdown.</li><li>The <tt>camel-archetype-java</tt> <a shape="rect" href="camel-maven-archetypes.html" title="Camel Maven Archetypes">Camel Maven Archetypes</a> is now a pure Java DSL based project (no longer Spring)</li><li><a shape="rect" href="jms.html" title="JMS">JMS</a> consumer is less verbose when logging uncaught exceptions thrown while processing a message. Added <tt>errorHandlerLoggingLevel</tt>, and <tt>errorHandlerLogStackTrace</tt> options to tweak the logging verbosity.</li><li>Added <tt>messageId</tt> as an <a shape="rect" href="mdc-logging.html" title="MDC logging">MDC logging</a> key.</li><li>Improved Camel's Transaction <a shape="rect" href="error-handler.html" title="Error Handler">Error Handler</a> logging to better pinpoint and correlate redelivered messages (from, e.g., 
 a JMS broker), making the logs much easier to read.</li><li>Added a timeout option to <a shape="rect" href="spring-web-services.html" title="Spring Web Services">Spring Web Services</a> for specifying the read timeout while invoking a webservice.</li><li>Optimized <a shape="rect" href="type-converter.html" title="Type Converter">Type Converter</a> registry for possible concurrency contention when looking up a type converter.</li><li>Improved <a shape="rect" href="simple.html" title="Simple">Simple</a> language to work better with floating point numbers in <a shape="rect" href="predicate.html" title="Predicate">Predicate</a>s</li><li>Camel is now less verbose when starting and stopping, with less being logged at <tt>INFO</tt> level.</li><li>Add support for keyed data queues to <a shape="rect" href="jt400.html" title="JT400">JT400</a> component.</li><li><a shape="rect" href="idempotent-consumer.html" title="Idempotent Consumer">Idempotent Consumer</a> is now enlisted in JMX, w
 hich allows monitoring the duplicate message count as well as the operation to reset it.</li><li>Thread pools registered in <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> are now unregistered when Camel shuts them down. Note that all MBeans will be unregistered from JMX when Camel shuts itself down. This improvement is to unregister thread pools more eagerly, such as when routes are removed at runtime.</li><li>Camel will now also copy the message headers for a <tt>JmsMessage</tt> if you leverage <tt>useOriginalMessage</tt> in an <tt>onException</tt> definition.</li><li>Added <tt>mockEndpointsAndSkip</tt> to <a shape="rect" href="advicewith.html" title="AdviceWith">AdviceWith</a> and the <a shape="rect" href="testing.html" title="Testing">Test Kit</a></li><li>The <a shape="rect" href="file2.html" title="File2">File</a> and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> components now support filtering directories. The <tt>isDirectory</tt> method on the
  <tt>GenericFile</tt> class can be used to skip unwanted directories, accelerating file consumption.</li><li><a shape="rect" href="smpp.html" title="SMPP">SMPP</a> connections can now be tunneled through an HTTP proxy by configuring HTTP proxy settings.</li><li>Camel now also checks, when starting a route dynamically, whether there would be any violations on multiple consumers from the same <a shape="rect" href="endpoint.html" title="Endpoint">Endpoint</a>. Previously this check only occurred during Camel startup - now it always happens.</li><li>Stopping a <tt>ConsumerTemplate</tt> or a <tt>ProducerTemplate</tt> will now stop and shutdown its cache to cleanup any resources which otherwise may not have been reclaimed until shutdown.</li><li><a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/impl/ScheduledPollConsumer.html">ScheduledPollConsumer</a> will now shutdown thread pools more eagerly, such as when stop
 ping a <tt>ConsumerTemplate</tt>.</li><li>Added option <tt>asyncStartListener</tt> to <a shape="rect" href="jms.html" title="JMS">JMS</a> to allow starting JMS consumers (e.g. routes) asynchronously. This can be used to avoid blocking in case the JMS consumer takes long time to establish a connection to the JMS broker.</li><li><a shape="rect" href="wire-tap.html" title="Wire Tap">Wire Tap</a> now supports <a shape="rect" href="error-handling-in-camel.html" title="Error handling in Camel">Error Handling</a> when sending a tapped message to an <a shape="rect" href="endpoint.html" title="Endpoint">Endpoint</a>.</li><li>Added the autogenColumns, configRef and strategyRef options to the <a shape="rect" href="csv.html" title="CSV">CSV</a> dataformat in XML DSL whereas the new skipFirstLine option is provided in Java API as well.</li><li><a shape="rect" href="validation.html" title="Validation">Validator</a> component will now fail with a better error message if resource schema ref
 ers to element which cannot be resolved.</li><li>Added support for retrieving generated keys from <a shape="rect" href="jdbc.html" title="JDBC">JDBC</a> component.</li><li>Added support for Spring 3.1.x.</li><li>Added <tt>retainFirst</tt>, and <tt>retainLast</tt> options to <a shape="rect" href="mock.html" title="Mock">Mock</a> component.</li><li>Improved <a shape="rect" href="simple.html" title="Simple">Simple</a> language to allow referring to headers using bracket notation.</li><li>Added support for the scp: protocol via <a shape="rect" href="jsch.html" title="Jsch">Jsch</a>.</li><li>Added support to exclude certain fields when marshalling POJO's to <a shape="rect" href="json.html" title="JSON">JSON</a>. Available with both the Jackson and GSON library.</li><li>Allow to configure frequency of timeout checker when doing request/reply over <a shape="rect" href="jms.html" title="JMS">JMS</a></li><li>Improved the Java DSL to make it easier to use predicates from the build-in 
 DSL, that has commonly used predicates and expressions.</li><li><a shape="rect" href="aggregator2.html" title="Aggregator2">Aggregate</a> EIP now supports <tt>TimeoutAwareAggregationStrategy</tt> aggregation strategies.</li><li>The default <tt>Injector</tt> now performs bean post processing to inject @Produce, @Consume, @EndpointInject fields etc.</li><li>The <a shape="rect" href="camel-run-maven-goal.html" title="Camel Run Maven Goal">camel-run</a> maven plugin now supports running <a shape="rect" href="using-osgi-blueprint-with-camel.html" title="Using OSGi blueprint with Camel">OSGi Blueprint applications</a>.</li><li>Added utilization statistics to the type converter registry (which can be accessed from <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a>), and are logged as Camel is shutting down.</li><li>Improved <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> to work better with servers such as WebSphere which alters MBean names when enlisti
 ng mbeans into the server (Camel now have an internal mapping table).</li><li>All <a shape="rect" href="eip.html" title="EIP">EIP</a>s out of the box from Camel now provides <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> utilization statistics.</li><li>The <a shape="rect" href="file2.html" title="File2">File</a> and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> consumers will now let <tt>org.apache.camel.spi.ExceptionHandler</tt> deal with exceptions occurred during acquiring real lock as well. See <a shape="rect" href="file2.html" title="File2">File</a> page for example of using a custom <tt>ExceptionHandler</tt>.</li><li>Reduce the logging level from ERROR to WARN on the default <tt>LoggingExceptionHandler</tt>.</li><li>Added option <tt>consumer.bridgeErrorHandler</tt> to allow consumers such as <a shape="rect" href="file2.html" title="File2">File</a> and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> to use the routing engine <a shape="rect
 " href="error-handler.html" title="Error Handler">Error Handler</a> to deal with exceptions occurring in the consumer (outside the routing engine), for example if having trouble picking up a file from a shared network drive etc. See more details at <a shape="rect" href="file2.html" title="File2">File</a> page. This option applies to all consumers which extends the <tt>DefaultConsumer</tt> from <tt>camel-core</tt>.</li><li>Added <tt>eagerMaxMessagesPerPoll</tt> option to <a shape="rect" href="file2.html" title="File2">File</a>, and <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> endpoints to allow to do a full sorting of the files and also limit the pool at the same time</li><li>The <a shape="rect" href="xslt.html" title="XSLT">XSLT</a>, <a shape="rect" href="velocity.html" title="Velocity">Velocity</a>, <a shape="rect" href="freemarker.html" title="FreeMarker">FreeMarker</a>, and <a shape="rect" href="stringtemplate.html" title="StringTemplate">StringTemplate</a> compo
 nents using http resource for the template now supports query parameters</li><li>You can specify the class type with <a shape="rect" href="bindy.html" title="Bindy">Bindy</a> to make it stand out what type is being used, as well the <tt>unmarshal</tt> operation returns a list of the pojos (and the pojo directly if only 1). Which makes it easier to use/work with.</li><li>Added <tt>group</tt> option to <a shape="rect" href="tokenizer.html" title="Tokenizer">Tokenizer</a> to make it easier with the <a shape="rect" href="splitter.html" title="Splitter">Splitter</a> to split by combining N number of parts together, eg splitting files in chunks by N lines combined.</li><li>Camel is now compatible to the upcoming Karaf 3 release</li><li>Added <tt>ExchangeSendingEvent</tt> to <tt>EventNotifier</tt> to emit an event <b>before</b> sending an <a shape="rect" href="exchange.html" title="Exchange">Exchange</a> to an <a shape="rect" href="endpoint.html" title="Endpoint">Endpoint</a>. Then
  we have events for both before and after.</li><li>Relaxed syntax check in <a shape="rect" href="simple.html" title="Simple">Simple</a> language to only scan for functions if a start token was explicit configured. This allows to easier do json like expressions.</li><li>Added support for escaping values in <a shape="rect" href="simple.html" title="Simple">Simple</a> language using the \ character.</li><li>Added new <a shape="rect" href="camel-maven-archetypes.html" title="Camel Maven Archetypes">Camel Maven Archetypes</a> for creating new <a shape="rect" href="component.html" title="Component">Component</a> using Scala.</li><li>Added <tt>trim</tt> option to <a shape="rect" href="languages.html" title="Languages">Languages</a> in the XML DSL, to control trimming the expression values, to remove the whitespace noise from XML tags.</li><li>Improved the <a shape="rect" href="file2.html" title="File2">File</a> consumer to support competing consumers on a shared drive to not pickup
  files from other consumers, as marker file is always used, for <tt>readLock</tt> strategies such as changed, rename and fileLock. For example if you have a clustered environment and have multiple Camel applications pickup files from a shared drive with <tt>readLock=changed</tt>.</li><li>The <a shape="rect" href="file2.html" title="File2">File</a> consumer with <tt>readLock=changed</tt> will now consider zero length file as in progress files.</li><li>Made it easier to <a shape="rect" href="using-propertyplaceholder.html" title="Using PropertyPlaceholder">bridge Spring and Camel property placeholders</a>, by configuring only once, using a new <tt>BridgePropertyPlaceholderConfigurer</tt> bean type.</li><li>Improved the <a shape="rect" href="smpp.html" title="SMPP">SMPP</a> component to refer to a <tt>org.jsmpp.session.SessionStateListener</tt> to receive callbacks when the session state changed.</li><li>Added connection pooling to <a shape="rect" href="jt400.html" title="JT400
 ">JT400</a> component</li><li><a shape="rect" href="restlet.html" title="Restlet">Restlet</a> component can be configured with Restlet Server parameters, for example to configure thread pool sizes.</li><li>CamelContext MBean in <a shape="rect" href="camel-jmx.html" title="Camel JMX">JMX</a> now shows aggregated performance stats for all the routes</li><li>Made it easy to override properties when <a shape="rect" href="testing.html" title="Testing">Testing</a> with Camel when <a shape="rect" href="using-propertyplaceholder.html" title="Using PropertyPlaceholder">Using PropertyPlaceholder</a>. For example unit testing with OSGi Blueprint using config admin service to provide properties, is now easy as you can provide the properties from directly within the unit test source code itself.</li><li>Improved <a shape="rect" href="netty.html" title="Netty">Netty</a> to support both shareable and non-shareable encoders and decoders.</li></ul>
 
 
 <h3><a shape="rect" name="Camel2.10.0Release-Fixedissues"></a>Fixed issues</h3>

Modified: websites/production/camel/content/netty.html
==============================================================================
--- websites/production/camel/content/netty.html (original)
+++ websites/production/camel/content/netty.html Wed Jun 13 10:20:45 2012
@@ -126,10 +126,19 @@ netty:tcp:<span class="code-comment">//l
 The values that could be passed in, are the following:</p>
 
 <div class="confluenceTableSmall"><div class="table-wrap">
-<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>passphrase</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> password setting to use in order to encrypt/decrypt payloads sent using SSH </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFormat</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> keystore format to be used for payload encryption. Defaults to "JKS" if not set </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>securityProvider</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Security provider to be used for payload encryption. Defaults to "SunX509" if not set. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Client side ce
 rtificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>trustStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Server side certificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>sslHandler</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Reference to a class that could be used to return an SSL Handler </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom Handler class that can be used to perform special marshalling of outbound payloads. Must override <tt>org.jboss.netty.channel.ChannelDownStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encorders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of encoder to be used. You can use a String which have values separated by comma, and have 
 the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom Handler class that can be used to perform special marshalling of inbound payloads. Must override <tt>org.jboss.netty.channel.ChannelUpStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of decorder to be used. You can use a String which have values separated by comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr></tbody></table>
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>passphrase</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> password setting to use in order to encrypt/decrypt payloads sent using SSH </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFormat</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> keystore format to be used for payload encryption. Defaults to "JKS" if not set </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>securityProvider</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Security provider to be used for payload encryption. Defaults to "SunX509" if not set. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>keyStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Client side ce
 rtificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>trustStoreFile</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Server side certificate keystore to be used for encryption </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>sslHandler</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Reference to a class that could be used to return an SSL Handler </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom <tt>ChannelHandler</tt> class that can be used to perform special marshalling of outbound payloads. Must override <tt>org.jboss.netty.channel.ChannelDownStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>encorders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of encoders to be used. You can use a String which have values separated by
  comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoder</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A custom <tt>ChannelHandler</tt> class that can be used to perform special marshalling of inbound payloads. Must override <tt>org.jboss.netty.channel.ChannelUpStreamHandler</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>decoders</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> A list of decoders to be used. You can use a String which have values separated by comma, and have the values be looked up in the <a shape="rect" href="registry.html" title="Registry">Registry</a>. Just remember to prefix the value with # so Camel knows it should lookup. </td></tr></tbody></table>
 </div>
 </div>
 
+<p><b>Important:</b> Read below about using non shareable encoders/decoders.</p>
+
+<h4><a shape="rect" name="Netty-Usingnonshareableencodersordecoders"></a>Using non shareable encoders or decoders</h4>
+
+<p>If your encoders or decoders is not shareable (eg they have the @Shareable class annotation), then your encoder/decoder must implement the <tt>org.apache.camel.component.netty.ChannelHandlerFactory</tt> interface, and return a new instance in the <tt>newChannelHandler</tt> method. This is to ensure the encoder/decoder can safely be used. If this is not the case, then the Netty component will log a WARN when<br clear="none">
+an endpoint is created.</p>
+
+<p>The Netty component offers a <tt>org.apache.camel.component.netty.ChannelHandlerFactories</tt> factory class, that has a number of commonly used methods.</p>
+
 <h3><a shape="rect" name="Netty-SendingMessagesto%2FfromaNettyendpoint"></a>Sending Messages to/from a Netty endpoint</h3>
 
 <h4><a shape="rect" name="Netty-NettyProducer"></a>Netty Producer</h4>
@@ -257,10 +266,13 @@ context.addRoutes(<span class="code-keyw
 
 <p>In certain cases it may be necessary to add chains of encoders and decoders to the netty pipeline. To add multpile codecs to a camel netty endpoint the 'encoders' and 'decoders' uri parameters should be used. Like the 'encoder' and 'decoder' parameters they are used to supply references (to lists of ChannelUpstreamHandlers and ChannelDownstreamHandlers) that should be added to the  pipeline. Note that if encoders is specified then the encoder param will be ignored, similarly for decoders and the decoder param.</p>
 
+<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">Read further above about using non shareable encoders/decoders.</td></tr></table></div>
+
 <p>The lists of codecs need to be added to the Camel's registry so they can be resolved when the endpoint is created.</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">LengthFieldBasedFrameDecoder lengthDecoder = <span class="code-keyword">new</span> LengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4);
+<pre class="code-java">ChannelHandlerFactory lengthDecoder = ChannelHandlerFactories.newLengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4);
+
 StringDecoder stringDecoder = <span class="code-keyword">new</span> StringDecoder();
 registry.bind(<span class="code-quote">"length-decoder"</span>, lengthDecoder);
 registry.bind(<span class="code-quote">"string-decoder"</span>, stringDecoder);
@@ -270,11 +282,11 @@ StringEncoder stringEncoder = <span clas
 registry.bind(<span class="code-quote">"length-encoder"</span>, lengthEncoder);
 registry.bind(<span class="code-quote">"string-encoder"</span>, stringEncoder);
 
-List&lt;ChannelUpstreamHandler&gt; decoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelUpstreamHandler&gt;();
+List&lt;ChannelHandler&gt; decoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelHandler&gt;();
 decoders.add(lengthDecoder);
 decoders.add(stringDecoder);
 
-List&lt;ChannelDownstreamHandler&gt; encoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelDownstreamHandler&gt;();
+List&lt;ChannelHandler&gt; encoders = <span class="code-keyword">new</span> ArrayList&lt;ChannelHandler&gt;();
 encoders.add(lengthEncoder);
 encoders.add(stringEncoder);
 
@@ -287,7 +299,7 @@ registry.bind(<span class="code-quote">"
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <pre class="code-xml">    <span class="code-tag">&lt;util:list id=<span class="code-quote">"decoders"</span> list-class=<span class="code-quote">"java.util.LinkedList"</span>&gt;</span>
-        <span class="code-tag">&lt;bean class=<span class="code-quote">"org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder"</span>&gt;</span>
+        <span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.camel.component.netty.ChannelHandlerFactories"</span> factory-method=<span class="code-quote">"newLengthFieldBasedFrameDecoder"</span>&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"1048576"</span>/&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"0"</span>/&gt;</span>
             <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"4"</span>/&gt;</span>
@@ -309,7 +321,7 @@ registry.bind(<span class="code-quote">"
     <span class="code-tag">&lt;/bean&gt;</span>
     <span class="code-tag">&lt;bean id=<span class="code-quote">"string-encoder"</span> class=<span class="code-quote">"org.jboss.netty.handler.codec.string.StringEncoder"</span>/&gt;</span>
 
-    <span class="code-tag">&lt;bean id=<span class="code-quote">"length-decoder"</span> class=<span class="code-quote">"org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder"</span>&gt;</span>
+    <span class="code-tag">&lt;bean id=<span class="code-quote">"length-decoder"</span> class=<span class="code-quote">"org.apache.camel.component.netty.ChannelHandlerFactories"</span> factory-method=<span class="code-quote">"newLengthFieldBasedFrameDecoder"</span>&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"1048576"</span>/&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"0"</span>/&gt;</span>
         <span class="code-tag">&lt;constructor-arg value=<span class="code-quote">"4"</span>/&gt;</span>
@@ -382,11 +394,11 @@ For instance, the example below will clo
 <p>In order to add a custom pipeline, a custom channel pipeline factory must be created and registered with the context via the context registry (JNDIRegistry,or the camel-spring ApplicationContextRegistry etc).</p>
 
 <p>A custom pipeline factory must be constructed as follows</p>
-<ul><li>A Producer linked channel pipeline factory must extend the abstract class <tt>ClientPipelineFactory</tt>.</li><li>A Consumer linked channel pipeline factory must extend the abstract class <tt>ServerPipelineFactory</tt>.</li><li><b>Camel 2.9.1 or older:</b> The classes should override the getPipeline() method in order to insert custom handler(s), encoder(s) and decoder(s). Not overriding the getPipeline() method creates a pipeline with no handlers, encoders or decoders wired to the pipeline.</li><li><b>Camel 2.9.2 or newer:</b> The classes must implement the getPipeline(NettyProducer) / getPipeline(NettyConsumer) method in order to insert custom handler(s), encoder(s) and decoder(s).</li></ul>
+<ul><li>A Producer linked channel pipeline factory must extend the abstract class <tt>ClientPipelineFactory</tt>.</li><li>A Consumer linked channel pipeline factory must extend the abstract class <tt>ServerPipelineFactory</tt>.</li><li>The classes should override the getPipeline() method in order to insert custom handler(s), encoder(s) and decoder(s). Not overriding the getPipeline() method creates a pipeline with no handlers, encoders or decoders wired to the pipeline.</li></ul>
 
 
 <p>The example below shows how ServerChannel Pipeline factory may be created</p>
-<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Camel 2.9.1 or older</b></div><div class="codeContent panelContent">
+<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Using custom pipeline factory</b></div><div class="codeContent panelContent">
 <pre class="code-java">
 <span class="code-keyword">public</span> class SampleServerChannelPipelineFactory <span class="code-keyword">extends</span> ServerPipelineFactory {
     <span class="code-keyword">private</span> <span class="code-object">int</span> maxLineSize = 1024;
@@ -406,27 +418,6 @@ For instance, the example below will clo
 </pre>
 </div></div>
 
-<p>And from Camel 2.9.2 onwards you do</p>
-<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Camel 2.9.2 or newer</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">public</span> class SampleServerChannelPipelineFactory <span class="code-keyword">extends</span> ServerPipelineFactory {
-    <span class="code-keyword">private</span> <span class="code-object">int</span> maxLineSize = 1024;
-
-    <span class="code-keyword">public</span> ChannelPipeline getPipeline(NettyConsumer consumer) <span class="code-keyword">throws</span> Exception {
-        ChannelPipeline channelPipeline = Channels.pipeline();
-
-        channelPipeline.addLast(<span class="code-quote">"encoder-SD"</span>, <span class="code-keyword">new</span> StringEncoder(CharsetUtil.UTF_8));
-        channelPipeline.addLast(<span class="code-quote">"decoder-DELIM"</span>, <span class="code-keyword">new</span> DelimiterBasedFrameDecoder(maxLineSize, <span class="code-keyword">true</span>, Delimiters.lineDelimiter()));
-        channelPipeline.addLast(<span class="code-quote">"decoder-SD"</span>, <span class="code-keyword">new</span> StringDecoder(CharsetUtil.UTF_8));
-        <span class="code-comment">// here we add the <span class="code-keyword">default</span> Camel ServerChannelHandler <span class="code-keyword">for</span> the consumer, to allow Camel to route the message etc.
-</span>        channelPipeline.addLast(<span class="code-quote">"handler"</span>, <span class="code-keyword">new</span> ServerChannelHandler(consumer));
-
-        <span class="code-keyword">return</span> channelPipeline;
-    }
-}
-</pre>
-</div></div>
-
 <p>The custom channel pipeline factory can then be added to the registry and instantiated/utilized on a camel route in the following way</p>
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <pre class="code-java">



Mime
View raw message