Modified: websites/production/activemq/content/outbound-communication.html
==============================================================================
--- websites/production/activemq/content/outbound-communication.html (original)
+++ websites/production/activemq/content/outbound-communication.html Sat Jun 27 
21:23:55 2015
@@ -32,16 +32,6 @@
     </style>
     <![endif]-->
 
-          <link 
href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' 
rel='stylesheet' type='text/css' /> 
-      <link 
href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' 
rel='stylesheet' type='text/css' /> 
-      <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script> 
-         
-      <script type="text/javascript"> 
-        SyntaxHighlighter.defaults['toolbar'] = false; 
-        SyntaxHighlighter.all(); 
-      </script> 
     
     <title>
     Apache ActiveMQ &#8482; -- Outbound Communication
@@ -86,15 +76,15 @@
 
 
 <h2 
id="OutboundCommunication-INLINEConfiguringaSessionBeantosendmessagestoActiveMQ">Configuring
 a Session Bean to send messages to ActiveMQ</h2>
-<p>In the attached <a shape="rect" 
href="outbound-communication.data/activemq-jboss-test.zip?version=3&amp;modificationDate=1117021355000&amp;api=v2">example
 application</a>, the three MDBs use the <code>SenderEJB</code> to send JMS 
messages to an ActiveMQ queue.  In this example, I will be explaining how 
to:</p>
+<p>In the attached <a shape="rect" 
href="outbound-communication.data/activemq-jboss-test.zip?version=3&amp;modificationDate=1117021355000&amp;api=v2"
 data-linked-resource-id="3278" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="activemq-jboss-test.zip" 
data-nice-type="Zip Archive" 
data-linked-resource-content-type="application/zip" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">example application</a>, the three 
MDBs use the <code>SenderEJB</code> to send JMS messages to an ActiveMQ queue.  
In this example, I will be explaining how to:</p>
 <ol><li>Configure and deploy an ActiveMQ <code>Queue</code> to 
JBoss</li><li>Configure and deploy an ActiveMQ 
<code>QueueConnectionFactory</code> to JBoss</li><li>Configure an EJB, deployed 
to JBoss, to reference the above two.</li></ol>
 
 
 <h3 id="OutboundCommunication-TheBean">The Bean</h3>
-<p>In the <a shape="rect" 
href="outbound-communication.data/ejb-jar.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2">ejb-jar.xml</a>
 deployment descriptor, the <code>SenderEJB</code> is declared as follows:<br 
clear="none">
+<p>In the <a shape="rect" 
href="outbound-communication.data/ejb-jar.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2"
 data-linked-resource-id="3249" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="ejb-jar.xml" data-nice-type="XML File" 
data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">ejb-jar.xml</a> deployment 
descriptor, the <code>SenderEJB</code> is declared as follows:<br clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-ejbSenderEJB"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>ejb-jar.xml &#8211; 
session bean declaration</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[ 
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[ 
 &lt;session&gt;
    ...
    &lt;ejb-name&gt;SenderEJB&lt;/ejb-name&gt;
@@ -118,10 +108,10 @@
 
 <p>The <code>jms/MyQueueConnectionFactory</code> is the JNDI name the 
<code>SenderEJB</code> will use to lookup a 
<code>javax.jms.QueueConnectionFactory</code>.  We will configure it to point 
to an ActiveMQ <code>QueueConnectionFactory</code>.</p>
 
-<p>The <code>jms/LogQueue</code> is the JNDI name the <code>SenderEJB</code> 
will use to lookup the <code>javax.jms.Queue</code> it will send messages to.  
We use the <code>message-destination-link</code> element to refer to the 
<code>LoggingQueue</code> which is declared in the 
<code>assembly-descriptor</code> section of the <a shape="rect" 
href="outbound-communication.data/ejb-jar.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2">ejb-jar.xml</a>
 deployment descriptor as: <br clear="none">
+<p>The <code>jms/LogQueue</code> is the JNDI name the <code>SenderEJB</code> 
will use to lookup the <code>javax.jms.Queue</code> it will send messages to.  
We use the <code>message-destination-link</code> element to refer to the 
<code>LoggingQueue</code> which is declared in the 
<code>assembly-descriptor</code> section of the <a shape="rect" 
href="outbound-communication.data/ejb-jar.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2"
 data-linked-resource-id="3249" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="ejb-jar.xml" data-nice-type="XML File" 
data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">ejb-jar.xml</a> deployment 
descriptor as: <br clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-ejbLoggingQueue"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>ejb-jar.xml &#8211; 
assembly descriptor section</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[ 
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[ 
 &lt;assembly-descriptor&gt;
    ...
    &lt;message-destination&gt;
@@ -138,7 +128,7 @@
 <p>The <code>resource-ref</code> element <a shape="rect" 
href="#OutboundCommunication-ejbSenderEJB">shown above</a>, will be linked to 
the following element in the <a shape="rect" class="external-link" 
href="http://activemq.codehaus.org/checkout/activemq/modules/ra/src/rar/META-INF/ra.xml";
 rel="nofollow">ra.xml</a> file, which is contained within the <a shape="rect" 
href="jboss-integration.html#JBossIntegration-rarfile">activemq-ra-1.2.rar</a> 
file:<br clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-raQueueConnectionFactory"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>ra.xml &#8211; The 
QueueConnectionFactory</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;outbound-resourceadapter&gt;
    ...
    &lt;connection-definition&gt;
@@ -156,7 +146,7 @@
 <p>The <code>message-destination</code> element <a shape="rect" 
href="#OutboundCommunication-ejbLoggingQueue">shown above</a>, will be linked 
to the following element in the <a shape="rect" class="external-link" 
href="http://activemq.codehaus.org/checkout/activemq/modules/ra/src/rar/META-INF/ra.xml";
 rel="nofollow">ra.xml</a> file:<br clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-raQueue"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>ra.xml &#8211; The 
Queue</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;adminobject&gt;
    &lt;adminobject-interface&gt;javax.jms.Queue&lt;/adminobject-interface&gt;
    
&lt;adminobject-class&gt;org.activemq.message.ActiveMQQueue&lt;/adminobject-class&gt;
@@ -169,15 +159,15 @@
 </div></div>
 
 <h3 id="OutboundCommunication-TheGlue">The Glue</h3>
-<p>In JBoss, connecting the resources needed by the <a shape="rect" 
href="outbound-communication.data/ejb-jar.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2">ejb-jar.xml</a>
 file to resources provided by the <a shape="rect" class="external-link" 
href="http://activemq.codehaus.org/checkout/activemq/modules/ra/src/rar/META-INF/ra.xml";
 rel="nofollow">ra.xml</a> file involves two additional files:</p>
-<ol><li><strong><a shape="rect" 
href="outbound-communication.data/panacya-jms-ds.xml?version=5&amp;modificationDate=1117021448000&amp;api=v2">panacya-jms-ds.xml</a></strong>
 - This is a JBoss data source file.  It specifies which connector objects 
JBoss should instantiate and where in JNDI JBoss should place those 
objects.</li><li><strong><a shape="rect" 
href="outbound-communication.data/jboss.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2">jboss.xml</a></strong>
 - This is a JBoss deployment descriptor which is contained within the <a 
shape="rect" 
href="jboss-integration.html#JBossIntegration-ejbjarfile">panacya-mdb-test-1.0.jar</a>
 file.  It links resources needed by the EJBs to the JNDI names of resources 
available in JBoss.</li></ol>
+<p>In JBoss, connecting the resources needed by the <a shape="rect" 
href="outbound-communication.data/ejb-jar.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2"
 data-linked-resource-id="3249" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="ejb-jar.xml" data-nice-type="XML File" 
data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">ejb-jar.xml</a> file to resources 
provided by the <a shape="rect" class="external-link" 
href="http://activemq.codehaus.org/checkout/activemq/modules/ra/src/rar/META-INF/ra.xml";
 rel="nofollow">ra.xml</a> file involves two additional files:</p>
+<ol><li><strong><a shape="rect" 
href="outbound-communication.data/panacya-jms-ds.xml?version=5&amp;modificationDate=1117021448000&amp;api=v2"
 data-linked-resource-id="3271" data-linked-resource-version="5" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="panacya-jms-ds.xml" data-nice-type="XML 
File" data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">panacya-jms-ds.xml</a></strong> - 
This is a JBoss data source file.  It specifies which connector objects JBoss 
should instantiate and where in JNDI JBoss should place those 
objects.</li><li><strong><a shape="rect" 
href="outbound-communication.data/jboss.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2"
 data-linked-resource-id="3251" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="jboss.xml" data-nice-type="XML File" 
data-linked-resource-content-type="text/xml" da
 ta-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">jboss.xml</a></strong> - This is a 
JBoss deployment descriptor which is contained within the <a shape="rect" 
href="jboss-integration.html#JBossIntegration-ejbjarfile">panacya-mdb-test-1.0.jar</a>
 file.  It links resources needed by the EJBs to the JNDI names of resources 
available in JBoss.</li></ol>
 
 
-<h5 
id="OutboundCommunication-panacya-jms-ds.xml&#8211;TheJBossDataSourceFile"><a 
shape="rect" 
href="outbound-communication.data/panacya-jms-ds.xml?version=5&amp;modificationDate=1117021448000&amp;api=v2">panacya-jms-ds.xml</a>
 &#8211; <em>The JBoss Data Source File</em></h5>
+<h5 
id="OutboundCommunication-panacya-jms-ds.xml&#8211;TheJBossDataSourceFile"><a 
shape="rect" 
href="outbound-communication.data/panacya-jms-ds.xml?version=5&amp;modificationDate=1117021448000&amp;api=v2"
 data-linked-resource-id="3271" data-linked-resource-version="5" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="panacya-jms-ds.xml" data-nice-type="XML 
File" data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">panacya-jms-ds.xml</a> &#8211; 
<em>The JBoss Data Source File</em></h5>
 <p>This first snippet configures the <code>QueueConnectionFactory</code>, <a 
shape="rect" href="#OutboundCommunication-raQueueConnectionFactory">declared 
above</a>, and places it in JNDI at 
<code>activemq/QueueConnectionFactory</code>:<br clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-dsQueueConnectionFactory"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>panacya-jms-ds.xml 
&#8211; The QueueConnectionFactory</b></div><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;tx-connection-factory&gt;
    &lt;jndi-name&gt;activemq/QueueConnectionFactory&lt;/jndi-name&gt;
    &lt;xa-transaction/&gt;
@@ -191,7 +181,7 @@
 <p>This second snippet configures the <code>Queue</code>, <a shape="rect" 
href="#OutboundCommunication-raQueue">declared above</a>, and places it in JNDI 
at <code>activemq/queue/outbound</code>:<br clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-dsQueue"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>panacya-jms-ds.xml 
&#8211; The Queue</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;mbean code=&quot;org.jboss.resource.deployment.AdminObject&quot; 
name=&quot;activemq.queue:name=outboundQueue&quot;&gt;
    &lt;attribute 
name=&quot;JNDIName&quot;&gt;activemq/queue/outbound&lt;/attribute&gt;
    &lt;depends 
optional-attribute-name=&quot;RARName&quot;&gt;jboss.jca:service=RARDeployment,name=&#39;activemq-ra-1.2-SNAPSHOT.rar&#39;&lt;/depends&gt;
@@ -203,13 +193,13 @@
 ]]></script>
 </div></div>
 
-<p>In the <a shape="rect" 
href="outbound-communication.data/panacya-jms-ds.xml?version=5&amp;modificationDate=1117021448000&amp;api=v2">panacya-jms-ds.xml</a>
 file section shown above, the value of the <code>Properties</code> element is 
set to <code>PhysicalName=queue.outbound</code>.  This value is the physical 
name of the ActiveMQ destination the <code>SenderEJB</code> will be sending 
messages to and not a JNDI name.  In other words, the value of the 
<code>PhysicalName</code> property has no meaning to JBoss.  It is purely an 
ActiveMQ setting. </p>
+<p>In the <a shape="rect" 
href="outbound-communication.data/panacya-jms-ds.xml?version=5&amp;modificationDate=1117021448000&amp;api=v2"
 data-linked-resource-id="3271" data-linked-resource-version="5" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="panacya-jms-ds.xml" data-nice-type="XML 
File" data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">panacya-jms-ds.xml</a> file section 
shown above, the value of the <code>Properties</code> element is set to 
<code>PhysicalName=queue.outbound</code>.  This value is the physical name of 
the ActiveMQ destination the <code>SenderEJB</code> will be sending messages to 
and not a JNDI name.  In other words, the value of the 
<code>PhysicalName</code> property has no meaning to JBoss.  It is purely an 
ActiveMQ setting. </p>
 
-<h5 id="OutboundCommunication-jboss.xml&#8211;TheJBossDeploymentDescriptor"><a 
shape="rect" 
href="outbound-communication.data/jboss.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2">jboss.xml</a>
 &#8211; <em>The JBoss Deployment Descriptor</em></h5>
-<p>This first snippet links the <code><a shape="rect" 
href="#OutboundCommunication-ejbSenderEJB">jms/MyQueueConnectionFactory</a></code>
 JNDI name used by the <code>SenderEJB</code> to the resource name 
<code>queuefactoryref</code> which is local to the <a shape="rect" 
href="outbound-communication.data/jboss.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2">jboss.xml</a>
 file: <br clear="none">
+<h5 id="OutboundCommunication-jboss.xml&#8211;TheJBossDeploymentDescriptor"><a 
shape="rect" 
href="outbound-communication.data/jboss.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2"
 data-linked-resource-id="3251" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="jboss.xml" data-nice-type="XML File" 
data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">jboss.xml</a> &#8211; <em>The JBoss 
Deployment Descriptor</em></h5>
+<p>This first snippet links the <code><a shape="rect" 
href="#OutboundCommunication-ejbSenderEJB">jms/MyQueueConnectionFactory</a></code>
 JNDI name used by the <code>SenderEJB</code> to the resource name 
<code>queuefactoryref</code> which is local to the <a shape="rect" 
href="outbound-communication.data/jboss.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2"
 data-linked-resource-id="3251" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="jboss.xml" data-nice-type="XML File" 
data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">jboss.xml</a> file: <br 
clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-jbossQueuefactoryref"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>jboss.xml &#8211; The 
QueueConnectionFactory for the SenderEJB</b></div><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;enterprise-beans&gt;
    &lt;session&gt;
       &lt;ejb-name&gt;SenderEJB&lt;/ejb-name&gt;
@@ -226,7 +216,7 @@
 <p>This second snippet links the local <code>queuefactoryref</code> name to 
the global JNDI name <code>java:/activemq/QueueConnectionFactory</code> which 
was <a shape="rect" 
href="#OutboundCommunication-dsQueueConnectionFactory">declared above</a>: <br 
clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-jbossQueueConnectionFactory"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>jboss.xml &#8211; Linking 
queuefactoryref to the global JNDI namespace</b></div><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;resource-managers&gt;
    &lt;resource-manager&gt;
       &lt;res-name&gt;queuefactoryref&lt;/res-name&gt;
@@ -237,10 +227,10 @@
 ]]></script>
 </div></div>
 
-<p>This third snippet links the <code>LoggingQueue</code>, which was <a 
shape="rect" href="#OutboundCommunication-ejbLoggingQueue">declared</a> in the 
<code>assembly-descriptor</code> section of the <a shape="rect" 
href="outbound-communication.data/ejb-jar.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2">ejb-jar.xml</a>,
 to the global JNDI name <code>activemq/queue/outbound</code> which was <a 
shape="rect" href="#OutboundCommunication-dsQueue">declared above</a>: <br 
clear="none">
+<p>This third snippet links the <code>LoggingQueue</code>, which was <a 
shape="rect" href="#OutboundCommunication-ejbLoggingQueue">declared</a> in the 
<code>assembly-descriptor</code> section of the <a shape="rect" 
href="outbound-communication.data/ejb-jar.xml?version=3&amp;modificationDate=1117021488000&amp;api=v2"
 data-linked-resource-id="3249" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="ejb-jar.xml" data-nice-type="XML File" 
data-linked-resource-content-type="text/xml" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">ejb-jar.xml</a>, to the global JNDI 
name <code>activemq/queue/outbound</code> which was <a shape="rect" 
href="#OutboundCommunication-dsQueue">declared above</a>: <br clear="none">
 <span class="confluence-anchor-link" 
id="OutboundCommunication-jbossQueue"></span></p>
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>jboss.xml &#8211; Linking 
LoggingQueue to the global JNDI namespace</b></div><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;assembly-descriptor&gt;
    &lt;message-destination&gt;
       
&lt;message-destination-name&gt;LoggingQueue&lt;/message-destination-name&gt;
@@ -252,7 +242,7 @@
 
 <p>The above example highlights the key configuration settings needed to 
enable EJBs deployed in JBoss to send JMS messages to an ActiveMQ destination.  
</p>
 
-<p>You can try the above example, plus a few more, by downloading the <a 
shape="rect" 
href="outbound-communication.data/activemq-jboss-test.zip?version=3&amp;modificationDate=1117021355000&amp;api=v2">activemq-jboss-test.zip</a>
 file which contains the complete sample project.</p></div>
+<p>You can try the above example, plus a few more, by downloading the <a 
shape="rect" 
href="outbound-communication.data/activemq-jboss-test.zip?version=3&amp;modificationDate=1117021355000&amp;api=v2"
 data-linked-resource-id="3278" data-linked-resource-version="3" 
data-linked-resource-type="attachment" 
data-linked-resource-default-alias="activemq-jboss-test.zip" 
data-nice-type="Zip Archive" 
data-linked-resource-content-type="application/zip" 
data-linked-resource-container-id="35943" 
data-linked-resource-container-version="53">activemq-jboss-test.zip</a> file 
which contains the complete sample project.</p></div>
         </td>
         <td valign="top">
           <div class="navigation">

Modified: websites/production/activemq/content/per-destination-policies.html
==============================================================================
--- websites/production/activemq/content/per-destination-policies.html 
(original)
+++ websites/production/activemq/content/per-destination-policies.html Sat Jun 
27 21:23:55 2015
@@ -32,17 +32,6 @@
     </style>
     <![endif]-->
 
-          <link 
href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' 
rel='stylesheet' type='text/css' /> 
-      <link 
href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' 
rel='stylesheet' type='text/css' /> 
-      <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushPlain.js' 
type='text/javascript'></script> 
-         
-      <script type="text/javascript"> 
-        SyntaxHighlighter.defaults['toolbar'] = false; 
-        SyntaxHighlighter.all(); 
-      </script> 
     
     <title>
     Apache ActiveMQ &#8482; -- Per Destination Policies
@@ -84,7 +73,7 @@
         <tr>
         <td valign="top" width="100%">
 <div class="wiki-content maincontent"><p>We support a number of different 
policies which can be attached to individual destinations (queues, topics) or 
to wildcards of queue/topic hierarchies. This makes it easy to configure how 
different regions of the JMS destination space are handled.</p><p>The 
properties you can set on a Destination are as follows:</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Common property</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>default</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>producerFlowControl</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>true</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>the producer will slow down and eventually block if no 
resources(e.g. memory) are available on the broker. If this is off messages get 
off-lined to dis
 k to prevent memory exhaustion</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>enableAudit</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>true</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>tracks duplicate messages (which can occur in failover 
for non-persistent messages)</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>useCache</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>true</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>persistent messages are cached for fast retrieval from 
store</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>maxPageSize</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>200</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>maximum number of persistent messages to page from 
store at a time</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>maxBrowsePageSize</p></td><td colspan="1" rowspan="1" 
class="confluence
 Td"><p>400</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>maximum 
number of persistent messages to page from store for a 
browser</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>memoryLimit</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>n/a</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>The memory limit for a given destination. This acts as 
a child to the overall broker memory specified by the <a shape="rect" 
href="producer-flow-control.html#ProducerFlowControl-Systemusage"><code>&lt;systemUsage&gt;</code>'s
 <code>memoryLimit</code> attribute</a>. There is no default for this value; it 
simply acts as a child to the overall broker memory until the broker memory is 
exhausted.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>minimumMessageSize</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>1024</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>for non-serialized messages (embedded brok
 er) - the assumed size of the message used for memory usage calculation. 
Serialized messages used the serialized size as the basis for the memory 
calculation</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>cursorMemoryHighWaterMark</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>70</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>the percentage (%) tipping point at which a system 
memory limit will cause a cursor to block or spool to disk</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>storeUsageHighWaterMark</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>100</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>the percentage (%) tipping point at which a system 
usage store limit will cause a sent to block</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>prioritizedMessages</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="
 confluenceTd"><p>have the store respect message priority</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>advisoryForConsumed</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>send an advisory message when a message is 
consumed by a client</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>advisoryForDelivery</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>send an advisory message when a message is sent to a 
client</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>advisoryForSlowConsumers</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>send an advisory message if a consumer is deemed 
slow</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>advsioryForFastProducers</p></td><td colspa
 n="1" rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>send an advisory message if a producer is 
deemed fast</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>advisoryWhenFull</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>send an advisory message when a limit 
(memory,store,temp disk) is full</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>gcInactiveDestinations</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>delete inactive destination</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>inactiveTimoutBeforeGC</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>5000</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>inactivity period (in ms) before destination is 
considered inactive</p></td></tr><tr><td 
 colspan="1" rowspan="1" 
class="confluenceTd"><p><span>usePrefetchExtension</span></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>true</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>the prefetch extension is used when 
a&#160;message is delivered but not acked, such that the broker can 
dispatch&#160;another message (e.g., prefetch == 0), the idea being that there 
will always be prefetch num&#160;messages pending. It also allows a transaction 
batch to exceed the prefetch&#160;value.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>slowConsumerStrategy</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>null</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>sets the strategy for handling slow 
consumers. see <a shape="rect" class="external-link" 
href="http://svn.apache.org/repos/asf/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/AbortSlowConsumerStrategy.java";>abortSlowConsumerStrategy</a
 ></p></td></tr><tr><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>maxDestinations</p></td><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>-1</p></td><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>(v5.12) if 0 or greater, sets the maximum number of 
 >destinations that can be created. This is useful to limit the number of 
 >hierarchical destinations that can be created under a wildcard 
 >destination.</p></td></tr></tbody></table></div><p>Additional properties for 
 >a Queue</p><div class="table-wrap"><table 
 >class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
 >class="confluenceTh"><p>Queue only property</p></th><th colspan="1" 
 >rowspan="1" class="confluenceTh"><p>default</p></th><th colspan="1" 
 >rowspan="1" class="confluenceTh"><p>description</p></th></tr><tr><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p>useConsumerPriority</p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p>true</p></td><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>use the priority of 
 a consumer when dispatching messages from a Queue</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>strictOrderDispatch</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>if true queue will not round robin 
consumers, but it'll use a single one until its prefetch buffer is 
full</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>optimizedDispatch</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>don't use a separate thread for dispatching from a 
Queue</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>lazyDispatch</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>only page in from store the number of messages that can 
be dispatched at time</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>
 consumersBeforeDispatchStarts</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>0</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>when the first consumer connects, wait for specified 
number of consumers before message dispatching starts</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>timeBeforeDispatchStarts</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>0</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>when the first consumer connects, wait for specified 
time (in ms) before message dispatching starts</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>queuePrefetch</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>n/a</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>sets the prefetch for consumers that are using the 
default value</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>expireMessagesPeriod</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>
 30000</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>the period 
(in ms) of checks for message expiry on queued messages, value of 0 
disables</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>persistJMSRedelivered</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>(v 5.10) if true, before a persistent message is 
dispatched by the broker for the first time, the message is rewritten to 
reflect the possible delivery.</p><p>This ensures the message JMSRedelivered 
header is a reliable indication of possible duplicate 
delivery.</p></td></tr></tbody></table></div><p>Additional properties for a 
Topic</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Topic only property</p></th><th 
colspan="1" rowspan="1" class="confluenceTh"><p>default</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>description</p></th></
 tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>topicPrefetch</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>n/a</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>sets the prefetch for topic consumers that are using 
the default value</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>durableTopicPrefetch</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>n/a</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>sets the prefetch for durable topic consumers that are 
using the default value</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>advisoryForDiscardingMessages</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>send an advisory when a message is discarded from a non 
durable subscription</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span style="color: 
rgb(0,0,0);">alwaysRetroactive</span></p></td
 ><td colspan="1" rowspan="1" class="confluenceTd"><p>false</p></td><td 
 >colspan="1" rowspan="1" class="confluenceTd"><p>(v5.6) makes all subscribers 
 >retroactive negating the need to modify the clients to enable this 
 >feature</p></td></tr><tr><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p><span style="color: 
 >rgb(0,0,0);">expireMessagesPeriod</span></p></td><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>30000</p></td><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>(v5.6) the period (in ms) of checks for message 
 >expiry on inactive durable subscribers, value of 0 
 >disables</p></td></tr></tbody></table></div><p><span style="line-height: 
 >1.4285715;">The following are examples of different policies that can be 
 >customised on a per destination basis</span></p><ul><li><a shape="rect" 
 >href="dispatch-policies.html">Dispatch Policies</a></li></ul><p>Here is an <a 
 >shape="rect" class="external-link" 
 >href="http://svn.apache.org/repos/asf/activemq/trunk/activemq-unit-tests/src/test/resour
 ces/org/apache/activemq/xbean/activemq-policy.xml">example</a> of this in 
use.</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;beans 
   xmlns=&quot;http://www.springframework.org/schema/beans&quot; 
   xmlns:amq=&quot;http://activemq.apache.org/schema/core&quot;

Modified: websites/production/activemq/content/persistence.html
==============================================================================
--- websites/production/activemq/content/persistence.html (original)
+++ websites/production/activemq/content/persistence.html Sat Jun 27 21:23:55 
2015
@@ -32,17 +32,6 @@
     </style>
     <![endif]-->
 
-          <link 
href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' 
rel='stylesheet' type='text/css' /> 
-      <link 
href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' 
rel='stylesheet' type='text/css' /> 
-      <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushPlain.js' 
type='text/javascript'></script> 
-         
-      <script type="text/javascript"> 
-        SyntaxHighlighter.defaults['toolbar'] = false; 
-        SyntaxHighlighter.all(); 
-      </script> 
     
     <title>
     Apache ActiveMQ &#8482; -- Persistence
@@ -84,36 +73,36 @@
         <tr>
         <td valign="top" width="100%">
 <div class="wiki-content maincontent"><h2 
id="Persistence-ActiveMQV5.9">ActiveMQ V5.9</h2><p>In ActiveMQ 5.9, the <a 
shape="rect" href="replicated-leveldb-store.html">Replicated LevelDB Store</a> 
is introduced. It handles using <a shape="rect" class="external-link" 
href="http://zookeeper.apache.org/";>Apache ZooKeeper</a> to pick a master from 
a set of broker nodes configured to replicate single LevelDB Store. Then 
synchronizes all slave LevelDB Stores with the master keeps them up to date by 
replicating all updates to the master. This might become the preferred <a 
shape="rect" href="masterslave.html">Master Slave</a> configuration going 
forward.</p><h2 id="Persistence-ActiveMQV5.8">ActiveMQ V5.8</h2><p>In ActiveMQ 
5.8, the <a shape="rect" href="leveldb-store.html">LevelDB Store</a> was 
introduced. The LevelDB Store is a file based persistence database. It has been 
optimized to provide even faster persistence than KahaDB. Although not yet the 
default message store, we expect this sto
 re implementation become the default in future releases.</p><h2 
id="Persistence-ActiveMQV5.3">ActiveMQ V5.3</h2><p>From 5.3 onwards - we 
recommend you use <a shape="rect" href="kahadb.html">KahaDB</a> - which offers 
improved scalability and recoverability over the <a shape="rect" 
href="amq-message-store.html">AMQ Message Store</a>.<br clear="none"> The <a 
shape="rect" href="amq-message-store.html">AMQ Message Store</a> which although 
faster than <a shape="rect" href="kahadb.html">KahaDB</a> - does not scales as 
well as <a shape="rect" href="kahadb.html">KahaDB</a> and recovery times take 
longer.</p><h2 id="Persistence-ActiveMQV4">ActiveMQ V4</h2><p>For long term 
persistence we recommend using JDBC coupled with our high performance journal. 
You can use just JDBC if you wish but its quite slow.</p><p>Our out of the box 
default configuration uses <a shape="rect" class="external-link" 
href="http://incubator.apache.org/derby/";>Apache Derby</a> as the default 
database, which is easy to em
 bed - but we support all the <a shape="rect" href="jdbc-support.html">major 
SQL databases</a> - just reconfigure your JDBC configuration in the <a 
shape="rect" href="xml-configuration.html">Xml Configuration</a>.</p><h2 
id="Persistence-Highperformancejournal-ActiveMQ4.x">High performance journal - 
ActiveMQ 4.x</h2><p>To achieve high performance of durable messaging in 
ACtiveMQ V4.x we strongly recommend you use our high performance journal - 
which is enabled by default. This works rather like a database; messages (and 
transcation commits/rollbacks and message acknowledgements) are written to the 
journal as fast as is humanly possible - then at intervals we checkpoint the 
journal to the long term persistence storage (in this case JDBC).</p><p>Its 
common when using queues for example that messages are consumed fairly shortly 
after being published; so you could publish 10,000 messages and only have a few 
messages outstanding - so when we checkpoint to the JDBC database, we often 
have o
 nly a small amount of messages to actually write to JDBC. Even if we have to 
write all the messages to the JDBC, we still get performance gains with the 
journal, since we can use a large transaction batch to insert the messages into 
the JDBC database to boost performance on the JDBC side.</p><p>Our journal is 
based on lots of the great work in the <a shape="rect" class="external-link" 
href="http://howl.objectweb.org/"; rel="nofollow">Howl</a> project; we keep 
close ties to the Howl community. However since ActiveMQ has to handle 
arbitarily large message sizes, we've had to make our journal handle any size 
of message and so we don't use the fixed size record model that Howl 
uses.</p><h2 id="Persistence-Configuringpersistence">Configuring 
persistence</h2><p>For full explict control over configuration check out the <a 
shape="rect" href="xml-configuration.html">Xml Configuration</a>. However a 
quick way to set which persistence adapter to use is to set the following 
system property to be
  the class name of the PersistenceAdapter implementation.</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[activemq.persistenceAdapter
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[activemq.persistenceAdapter
 ]]></script>
 </div></div><p>When running the broker from the command line, we look for the 
activemq.xml on the classpath unless you specify one to use. e.g.<br 
clear="none"> <strong>AMQ 4.x</strong></p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[activemq xbean:file:myconfig.xml
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[activemq xbean:file:myconfig.xml
 ]]></script>
 </div></div><p><strong>AMQ 3.x</strong></p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[activemq myconfig.xml
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[activemq myconfig.xml
 ]]></script>
 </div></div><p>or just<br clear="none"> <strong>AMQ3.x/AMQ4.x</strong></p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[activemq
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[activemq
 ]]></script>
-</div></div><p>Here is a sample XML configuration which shows how to configure 
the journal and the JDBC persistence.</p><p>AMQ 4.x</p><div class="error"><span 
class="error">Error formatting macro: snippet: 
java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div><p>For 
more details see the <a shape="rect" href="initial-configuration.html">Initial 
Configuration</a> guide.</p><h2 
id="Persistence-JDBCPersistencewithoutJournaling">JDBC Persistence without 
Journaling</h2><p>To enable JDBC persistence of JMS messages without 
journaling, we need to change the message broker's default persistence 
configuration from<br clear="none"> <strong>AMQ 4.x</strong></p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
+</div></div><p>Here is a sample XML configuration which shows how to configure 
the journal and the JDBC persistence.</p><p>AMQ 4.x</p>An error occurred: 
Unable to retrieve the URL: 
http://svn.apache.org/repos/asf/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/xbean/activemq.xml
 status code: 404. The error has been recorded.<p>For more details see the <a 
shape="rect" href="initial-configuration.html">Initial Configuration</a> 
guide.</p><h2 id="Persistence-JDBCPersistencewithoutJournaling">JDBC 
Persistence without Journaling</h2><p>To enable JDBC persistence of JMS 
messages without journaling, we need to change the message broker's default 
persistence configuration from<br clear="none"> <strong>AMQ 
4.x</strong></p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
       &lt;journaledJDBC journalLogFiles=&quot;5&quot; 
dataDirectory=&quot;../activemq-data&quot;/&gt;
 &lt;/persistenceAdapter&gt;
 ]]></script>
 </div></div><p>to</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
       &lt;jdbcPersistenceAdapter dataSource=&quot;#my-ds&quot;/&gt;
 &lt;/persistenceAdapter&gt;
 ]]></script>
 </div></div><p><strong>For AMQ 3.x</strong></p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;persistence&gt;
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;persistence&gt;
   &lt;journalPersistence directory=&quot;../var/journal&quot;&gt;
       &lt;jdbcPersistence dataSourceRef=&quot;derby-ds&quot;/&gt;
   &lt;/journalPersistence&gt;
 &lt;/persistence&gt;
 ]]></script>
 </div></div><p>to</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;persistence&gt;
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;persistence&gt;
      &lt;jdbcPersistence dataSourceRef=&quot;derby-ds&quot;/&gt;
  &lt;/persistence&gt;
 ]]></script>
@@ -130,7 +119,7 @@
 <p>ActiveMQ 5.0 and above:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
  &lt;broker brokerName=&quot;broker&quot; persistent=&quot;true&quot; 
useShutdownHook=&quot;false&quot;&gt;
     &lt;transportConnectors&gt;
       &lt;transportConnector uri=&quot;tcp://localhost:61616&quot;/&gt;
@@ -146,7 +135,7 @@
 <p>ActiveMQ 4.1 and earlier:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
  &lt;broker brokerName=&quot;broker&quot; persistent=&quot;true&quot; 
useShutdownHook=&quot;false&quot;&gt;
     &lt;transportConnectors&gt;
       &lt;transportConnector uri=&quot;tcp://localhost:61616&quot;/&gt;
@@ -157,7 +146,7 @@
   &lt;/broker&gt;
 ]]></script>
 </div></div><h2 id="Persistence-DisasterRecoveryoptions">Disaster Recovery 
options</h2><p>For people with high <a shape="rect" href="dr.html">DR</a> 
requirements we have various options for providing a <a shape="rect" 
href="replicated-message-store.html">Replicated Message Store</a> to allow full 
failover in times of major data centre failure.</p><h2 
id="Persistence-DisablingPersistence">Disabling Persistence</h2><p>If you don't 
want persistence at all you can disable it easily via the <a shape="rect" 
href="xml-configuration.html">Xml Configuration</a>. e.g.</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;broker persistent=&quot;false&quot;&gt;
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;broker persistent=&quot;false&quot;&gt;
 &lt;/broker&gt;
 ]]></script>
 </div></div><p>This will make the broker use the <a shape="rect" 
class="external-link" 
href="http://activemq.apache.org/maven/apidocs/org/apache/activemq/store/memory/MemoryPersistenceAdapter.html";>&lt;memoryPersistenceAdapter&gt;</a><br
 clear="none"> For an example of using a configuration URI see <a shape="rect" 
href="how-to-unit-test-jms-code.html">How to unit test JMS code</a></p></div>

Modified: websites/production/activemq/content/pluggable-storage-lockers.html
==============================================================================
--- websites/production/activemq/content/pluggable-storage-lockers.html 
(original)
+++ websites/production/activemq/content/pluggable-storage-lockers.html Sat Jun 
27 21:23:55 2015
@@ -32,16 +32,6 @@
     </style>
     <![endif]-->
 
-          <link 
href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' 
rel='stylesheet' type='text/css' /> 
-      <link 
href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' 
rel='stylesheet' type='text/css' /> 
-      <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script> 
-         
-      <script type="text/javascript"> 
-        SyntaxHighlighter.defaults['toolbar'] = false; 
-        SyntaxHighlighter.all(); 
-      </script> 
     
     <title>
     Apache ActiveMQ &#8482; -- Pluggable storage lockers
@@ -83,7 +73,7 @@
         <tr>
         <td valign="top" width="100%">
 <div class="wiki-content maincontent"><p>With the 5.7.0 release of ActiveMQ 
the storage locking mechanism used by a persistence adapter is pluggable. This 
feature only applies to brokers configured in a shared storage master/slave 
topology. Prior to release 5.7.0 the storage locking mechanism (and thus master 
election) was dictated by the choice of persistence adapter. With the KahaDB 
persistence adapter, for example, the storage locking mechanism was based on a 
shared file lock. Similarly, the JDBC persistence adapter used a database 
backed storage lock.</p><p>Now that the choice of storage lock is divorced from 
that of the persistence adapter one can mix and match. Storage locker 
pluggability is made possible because all lockers must implement the <a 
shape="rect" class="external-link" 
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Locker.java?hb=true";
 rel="nofollow">Locker</a> interface. This interface makes it e
 asy to implement your own storage locker when you have special requirements. 
Of course, every persistence adapter still has its own default locker which 
works as before.</p><h2 
id="Pluggablestoragelockers-Lockers">Lockers</h2><p>Every locker must implement 
the <a shape="rect" class="external-link" 
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Locker.java?hb=true";
 rel="nofollow">Locker</a> interface. The locker has the following 
properties:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Property Name</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>lockAcquireSleepInterval</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>10000</p></td><td colspan="1" 
rowsp
 an="1" class="confluenceTd"><p>Delay interval in milliseconds between lock 
acquire attempts</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>failIfLocked</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Should the start fail immediately if lock cannot be 
obtained</p></td></tr></tbody></table></div><h2 
id="Pluggablestoragelockers-PersistenceAdapters">Persistence 
Adapters</h2><p>Every persistence adapter (or other broker service that wants 
to use locks) needs to implement the <a shape="rect" class="external-link" 
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Lockable.java?r=1383400";
 rel="nofollow">Lockable</a> interface. This adds the following 
properties:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Property Name</p></th><th colspan
 ="1" rowspan="1" class="confluenceTh"><p>Default Value</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>useLock</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>true</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>can be used to turn off locking if 
necessary</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>lockKeepAlivePeriod</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>0</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>If bigger than 0, time period (in 
milliseconds) to keep lock alive</p></td></tr></tbody></table></div><h2 
id="Pluggablestoragelockers-ExistingLockers">Existing Lockers</h2><h3 
id="Pluggablestoragelockers-SharedFileLocker">Shared File Locker</h3><p>The 
Shared File Locker is the default locker for the KahaDB persistence adapter. It 
locks a file to ensure that only the broker holding th
 e lock (the master) is granted access to the message 
store.</p><p>Example:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
        &lt;kahaDB directory = &quot;target/activemq-data&quot;&gt;
                &lt;locker&gt;
                        &lt;shared-file-locker 
lockAcquireSleepInterval=&quot;5000&quot;/&gt;
@@ -91,7 +81,7 @@
        &lt;/kahaDB&gt;
 &lt;/persistenceAdapter&gt;]]></script>
 </div></div><p>This locker implements the <code>keepAlive</code> method from 
5.9.0 onwards so there's no point in using <code>lockKeepAlivePeriod</code> 
settings on older versions than ActiveMQ 5.9.0. Note that as of ActiveMQ 5.9.0 
the KahaDB persistence adapter can also use the Lease Database Locker (see 
below).</p><h3 id="Pluggablestoragelockers-DatabaseLocker">Database 
Locker</h3><p>The Database Locker is the default locker for the JDBC 
persistence adapter. It locks a database table in a transaction to ensure that 
only single resource is used.</p><p>Example:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
     &lt;jdbcPersistenceAdapter dataDirectory=&quot;${activemq.data}&quot; 
dataSource=&quot;#mysql-ds&quot; lockKeepAlivePeriod=&quot;10000&quot;&gt;
         &lt;locker&gt;
             &lt;database-locker lockAcquireSleepInterval=&quot;5000&quot;/&gt;
@@ -99,21 +89,15 @@
     &lt;/jdbcPersistenceAdapter&gt;
 &lt;/persistenceAdapter&gt;]]></script>
 </div></div><p>The Database Locker uses its&#160;<code>keepAlive</code> method 
to ensure the broker still holds the lock. You can set the keep alive period 
using the <code>lockKeepAlivePeriod</code> property. The default period is 
30000 ms. If a broker fails to acquire the lock on the database, it will retry 
every <code>lockAcquireSleepInterval</code> milliseconds.</p><p>This locker 
opens a JDBC transaction against a database table (<code>activemq_lock</code>) 
that lasts as long as the broker remains alive. This locks the entire table and 
prevents another broker from accessing the store. In most cases this will be a 
fairly long running JDBC transaction which occupies resources on the database 
over time.</p><p>A problem with this locker can arise when the master broker 
crashes or loses its connection to the database causing the lock to remain in 
the database until the database responds to the half closed socket connection 
via a TCP timeout. The database lock expiry requirement can pr
 event the slave from starting some time. In addition, if the database supports 
failover, and the connection is dropped in the event of a replica failover, 
that JDBC transaction will be rolled back. The broker sees this as a failure. 
Both master and slave brokes will again compete for a lock.</p><h3 
id="Pluggablestoragelockers-LeaseDatabaseLocker">Lease Database 
Locker</h3><p>The Lease Database Locker was created to solve the shortcomings 
of the Database Locker. The Lease Database Locker does not open a long running 
JDBC transaction. Instead it lets the master broker acquire a lock that's valid 
for a fixed (usually short) duration after which it expires. To retain the lock 
the master broker must periodically extend the lock's lease before it expires. 
Simultaneously the slave broker also checks periodically to see if the lease 
has expired. If, for whatever reason, the master broker fails to update its 
lease on the lock the slave will take ownership of the lock becoming the new 
master 
 in the process. The leased lock can survive a DB replica 
failover.</p><p>Example:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;persistenceAdapter&gt;
        &lt;jdbcPersistenceAdapter dataDirectory=&quot;${activemq.data}&quot; 
dataSource=&quot;#mysql-ds&quot; lockKeepAlivePeriod=&quot;5000&quot;&gt;
                &lt;locker&gt;
                        &lt;lease-database-locker 
lockAcquireSleepInterval=&quot;10000&quot;/&gt;
                &lt;/locker&gt;
        &lt;/jdbcPersistenceAdapter&gt;
 &lt;/persistenceAdapter&gt;]]></script>
-</div></div><p>In order for this mechanism to work correctly, each broker in 
the master/slave pair must have a different <code>brokerName</code> attribute 
defined on the <code>broker</code> tag or use the 
<span><code>leaseHolderId</code> attribute</span> on the&#160;<code><span 
style="line-height: 1.4285715;">lease-database-locker</span></code><span>, as 
it is this value that is used to reserve a lease.</span></p><p>The lease based 
lock is acquired by blocking at startup. It is then retained for a period whose 
duration (in ms) is given by the <code>lockKeepAlivePeriod</code> attribute. To 
retain the lock the master broker periodically extends its lease by 
<code>lockAcquireSleepInterval</code> milliseconds each time. In theory, 
therefore, the master broker is always 
(<code>lockAcquireSleepInterval</code>&#160;<code>-</code> 
<code>lockKeepAlivePeriod</code>) ahead of the slave broker with regard to the 
lease. It is imperative that <code>lockAcquireSleepInterval &gt; 
lockKeepAlivePerio
 d</code>, to ensure the lease is always current. As of ActiveMQ 5.9.0 a 
warning message is logged if this condition is not met.</p><p>In the simplest 
case, the clocks between master and slave must be in sync for this solution to 
work properly. If the clocks cannot be in sync, the locker can use the system 
time from the database CURRENT TIME and adjust the timeouts in accordance with 
their local variance from the DB system time. 
If&#160;<code>maxAllowableDiffFromDBTime</code> is greater than zero the local 
periods will be adjusted by any delta that exceeds 
<code>maxAllowableDiffFromDBTime</code>.</p>    <div class="aui-message hint 
shadowed information-macro">
-                            <span class="aui-icon icon-hint">Icon</span>
-                <div class="message-content">
-                            <p>It is important to know if the default rules 
your JDBC driver uses for converting <code>TIME</code> values are JDBC 
compliant. If you're using MySQL, for example, the driver's JDBC URL should 
contain&#160;<code>useJDBCCompliantTimezoneShift=true</code> to ensure that 
<code>TIME</code> value conversion is JDBC compliant. If not the locker could 
report a large time difference when it compares the retrieved lease expiration 
time against the current system time. Consult your JDBC driver's documentation 
for more details.</p>
-                    </div>
-    </div>
-<p>As of ActiveMQ 5.9.0 the lease database locker can be used in conjunction 
with the KahaDB persistence adapter. However, this particular combination 
requires that the lease database locker element contains a 
<code>&lt;statements/&gt;</code> child element. In the example below 
the&#160;<code>lockTableName</code> is also configured, although doing so is 
not mandatory.</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[ &lt;persistenceAdapter&gt;
+</div></div><p>In order for this mechanism to work correctly, each broker in 
the master/slave pair must have a different <code>brokerName</code> attribute 
defined on the <code>broker</code> tag or use the 
<span><code>leaseHolderId</code> attribute</span> on the&#160;<code><span 
style="line-height: 1.4285715;">lease-database-locker</span></code><span>, as 
it is this value that is used to reserve a lease.</span></p><p>The lease based 
lock is acquired by blocking at startup. It is then retained for a period whose 
duration (in ms) is given by the <code>lockKeepAlivePeriod</code> attribute. To 
retain the lock the master broker periodically extends its lease by 
<code>lockAcquireSleepInterval</code> milliseconds each time. In theory, 
therefore, the master broker is always 
(<code>lockAcquireSleepInterval</code>&#160;<code>-</code> 
<code>lockKeepAlivePeriod</code>) ahead of the slave broker with regard to the 
lease. It is imperative that <code>lockAcquireSleepInterval &gt; 
lockKeepAlivePerio
 d</code>, to ensure the lease is always current. As of ActiveMQ 5.9.0 a 
warning message is logged if this condition is not met.</p><p>In the simplest 
case, the clocks between master and slave must be in sync for this solution to 
work properly. If the clocks cannot be in sync, the locker can use the system 
time from the database CURRENT TIME and adjust the timeouts in accordance with 
their local variance from the DB system time. 
If&#160;<code>maxAllowableDiffFromDBTime</code> is greater than zero the local 
periods will be adjusted by any delta that exceeds 
<code>maxAllowableDiffFromDBTime</code>.</p><div 
class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>It is important to know if the 
default rules your JDBC driver uses for converting <code>TIME</code> values are 
JDBC compliant. If you're using MySQL, for example
 , the driver's JDBC URL should 
contain&#160;<code>useJDBCCompliantTimezoneShift=true</code> to ensure that 
<code>TIME</code> value conversion is JDBC compliant. If not the locker could 
report a large time difference when it compares the retrieved lease expiration 
time against the current system time. Consult your JDBC driver's documentation 
for more details.</p></div></div><p>As of ActiveMQ 5.9.0 the lease database 
locker can be used in conjunction with the KahaDB persistence adapter. However, 
this particular combination requires that the lease database locker element 
contains a <code>&lt;statements/&gt;</code> child element. In the example below 
the&#160;<code>lockTableName</code> is also configured, although doing so is 
not mandatory.</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[ &lt;persistenceAdapter&gt;
        &lt;kahaDB directory=&quot;target/activemq-data&quot; 
lockKeepAlivePeriod=&quot;5000&quot;&gt;
                &lt;locker&gt;
             &lt;!-- When used with the KahaDB persistence adapter the 
&#39;dataSource&#39; attribute must be defined on the locker itself: --&gt;

Modified: websites/production/activemq/content/producer-flow-control.html
==============================================================================
--- websites/production/activemq/content/producer-flow-control.html (original)
+++ websites/production/activemq/content/producer-flow-control.html Sat Jun 27 
21:23:55 2015
@@ -32,16 +32,6 @@
     </style>
     <![endif]-->
 
-          <link 
href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' 
rel='stylesheet' type='text/css' /> 
-      <link 
href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' 
rel='stylesheet' type='text/css' /> 
-      <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script> 
-         
-      <script type="text/javascript"> 
-        SyntaxHighlighter.defaults['toolbar'] = false; 
-        SyntaxHighlighter.all(); 
-      </script> 
     
     <title>
     Apache ActiveMQ &#8482; -- Producer Flow Control
@@ -83,11 +73,11 @@
         <tr>
         <td valign="top" width="100%">
 <div class="wiki-content maincontent"><h2 
id="ProducerFlowControl-ProducerFlowControl">Producer Flow Control</h2><p>In 
ActiveMQ 4.x flow control was implemented using TCP flow control. The 
underlying network connection of throttled consumers was suspended to enforce 
flow control limits. This strategy is very efficient but can lead to deadlocks 
if there are multiple producers and consumers sharing the same 
connection.</p><p>As of ActiveMQ 5.0, we can now individually flow control each 
producer on a shared connection without having to suspend the entire 
connection. By 'flow control' we mean that if the broker detects that the 
memory limit for the destination, or the temp- or file-store limits for the 
broker, have been exceeded, then the flow of messages can be slowed down. The 
producer will be either blocked until resources are available <em>or</em> will 
receive a JMSException: this behaviour is configurable and described in the 
section below on <code>&lt;systemUsage&gt;</code>.</p><p
 >It's worth noting that the default <code>&lt;systemUsage&gt;</code> settings 
 >will cause the producer to <em>block</em> when the <code>memoryLimit</code> 
 >or <code>&lt;systemUsage&gt;</code> limits are reached: this blocking 
 >behaviour is sometimes misinterpreted as a 'hung producer', when in fact the 
 >producer is simply diligently waiting until space is 
 >available.</p><ul><li>Messages that are sent synchronously will automatically 
 >use per producer flow control; this applies generally to persistent messages 
 >which are sent synchronously <em>unless</em> you enable the 
 ><code>useAsyncSend</code> flag.</li></ul><ul><li>Producers that use <a 
 >shape="rect" href="async-sends.html">Async Sends</a> - generally speaking, 
 >producers of non-persistent messages - don't bother waiting for any 
 >acknowledgement from the broker; so, if a memory limit has been exceeded, you 
 >will <em>not</em> get notfied. If you do want to be aware of broker limits 
 >being exceeded, you will need to configure the ProducerWindow
 Size connection option so that even async messages are flow controlled per 
producer.</li></ul><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[ActiveMQConnectionFactory connctionFactory = 
...
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[ActiveMQConnectionFactory connctionFactory = 
...
 connctionFactory.setProducerWindowSize(1024000);
 ]]></script>
 </div></div><p>The ProducerWindowSize is the maximum number of bytes of data 
that a producer will transmit to a broker before waiting for acknowledgment 
messages from the broker that it has accepted the previously sent 
messages.</p><p>Alternatively, if you're sending non-persisted messages (which 
are by default sent async), and want to be informed if the queue or topic's 
memory limit has been breached, then you can simply configure the connection 
factory to 'alwaysSyncSend'. While this is going to be slower, it will ensure 
that your message producer is informed immediately of memory issues.</p><p>If 
you like, you can disable flow control for specific JMS queues and topics on 
the broker by setting the <code>producerFlowControl</code> flag to false on the 
appropriate destination policy in the Broker configuration - e.g.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;destinationPolicy&gt;
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;destinationPolicy&gt;
   &lt;policyMap&gt;
     &lt;policyEntries&gt;
       &lt;policyEntry topic=&quot;FOO.&gt;&quot; 
producerFlowControl=&quot;false&quot;/&gt;
@@ -96,14 +86,14 @@ connctionFactory.setProducerWindowSize(1
 &lt;/destinationPolicy&gt;
 ]]></script>
 </div></div><p>see <a shape="rect" href="xml-configuration.html">Broker 
Configuration</a>.</p><p>Note that, since the introduction of the new file 
cursor in ActiveMQ 5.x, non-persisted messages are shunted into the temporary 
file store to reduce the amount of memory used for non-persistent messaging. As 
a result, you may find that a queue's memoryLimit is never reached, as the 
cursor doesn't use very much memory. If you really do want to keep all your 
non-persistent messages in memory, and stop producers when the limit is 
reached, you should configure the <code>&lt;vmQueueCursor&gt;</code>.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;policyEntry queue=&quot;&gt;&quot; 
producerFlowControl=&quot;true&quot; memoryLimit=&quot;1mb&quot;&gt;    
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;policyEntry queue=&quot;&gt;&quot; 
producerFlowControl=&quot;true&quot; memoryLimit=&quot;1mb&quot;&gt;    
   &lt;pendingQueuePolicy&gt;
     &lt;vmQueueCursor/&gt;
   &lt;/pendingQueuePolicy&gt;
 &lt;/policyEntry&gt;
 ]]></script>
 </div></div><p>The fragment above will ensure that all non-persistent queue 
messages are kept in memory, with each queue having a limit of 1Mb.</p><h3 
id="ProducerFlowControl-HowProducerFlowControlworks">How Producer Flow Control 
works</h3><p>If you are sending a persistent message (so that a response of the 
<a shape="rect" href="openwire.html">OpenWire</a> Message is expected then the 
broker will send the producer a <a shape="rect" class="external-link" 
href="http://activemq.apache.org/maven/5.9.0/apidocs/index.html";>ProducerAck</a>
 message. This informs the producer that the previous sending window has been 
processed, so that it can now send another window. Its kinda like consumer acks 
but in reverse.</p><h4 id="ProducerFlowControl-Advantage">Advantage</h4><p>So a 
nice producer might wait for a producer ack before sending more data, to avoid 
flooding the broker (and forcing the broker to block the entire connection if a 
slow consumer occurs). To see how this works in source code, 
 check out the <a shape="rect" class="external-link" 
href="http://activemq.apache.org/maven/5.9.0/apidocs/index.html";>ActiveMQMessageProducer</a>
 code.</p><p>Though a client can ignore the producer ACKs altogether and the 
broker should just stall the transport if it has to for slow consumer handling; 
though this does mean it'll stall the entire connection.</p><h3 
id="ProducerFlowControl-ConfigureClient-SideExceptions">Configure Client-Side 
Exceptions</h3><p>An alternative to the indefinite blocking of the 
<code>send()</code> operation when no space is free on the broker is to instead 
configure that an exception to be thrown on the client-side. By configuring the 
<code>sendFailIfNoSpace</code> property to <code>true</code>, the broker will 
cause the <code>send()</code> operation to fail with a 
<code>javax.jms.ResourceAllocationException</code>, which will propagate to the 
client. Below is an example of this configuration:</p><div class="code panel 
pdl" style="border-width: 1px;"><div 
 class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;systemUsage&gt;
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;systemUsage&gt;
  &lt;systemUsage sendFailIfNoSpace=&quot;true&quot;&gt;
    &lt;memoryUsage&gt;
      &lt;memoryUsage limit=&quot;20 mb&quot;/&gt;
@@ -111,7 +101,7 @@ connctionFactory.setProducerWindowSize(1
  &lt;/systemUsage&gt;
 &lt;/systemUsage&gt;]]></script>
 </div></div><p>The advantage of this property is that the client can catch the 
<code>javax.jms.ResourceAllocationException</code>, wait a bit and retry the 
<code>send()</code> operation instead of just hanging 
indefinitely.</p><p>Starting in version 5.3.1 the 
<code>sendFailIfNoSpaceAfterTimeout</code> property has been added. This 
property causes the <code>send()</code> operation to fail with an exception on 
the client-side, but only after waiting the given amount of time. If space on 
the broker is still not freed after the configured amount of time, only then 
does the <code>send()</code> operation fail with an exception to the 
client-side. Below is an example:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;systemUsage&gt;
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;systemUsage&gt;
  &lt;systemUsage sendFailIfNoSpaceAfterTimeout=&quot;3000&quot;&gt;
    &lt;memoryUsage&gt;
      &lt;memoryUsage limit=&quot;20 mb&quot;/&gt;
@@ -119,7 +109,7 @@ connctionFactory.setProducerWindowSize(1
  &lt;/systemUsage&gt;
 &lt;/systemUsage&gt;]]></script>
 </div></div><p>The timeout is defined in milliseconds so the example above 
waits for three seconds before failing the <code>send()</code> operation with 
an exception to the client-side. The advantage of this property is that it will 
block for the configured amount of time instead of failing immediately or 
blocking indefinitely. This property offers not only an improvement on the 
broker-side, but also an improvement for the client so it can catch the 
exception, wait a bit and retry the <code>send()</code> operation.</p><h2 
id="ProducerFlowControl-DisablingFlowControl">Disabling Flow Control</h2><p>A 
common requirement is to disable flow control so that message dispatching 
continues until all available disk is used up by pending messages (whether 
persistent or non persistent messaging is configured). To do this enable <a 
shape="rect" href="message-cursors.html">Message Cursors</a>.</p><h2 
id="ProducerFlowControl-Systemusage">System usage</h2><p>You can also slow down 
producers via som
 e attributes on the <code>&lt;systemUsage&gt;</code> element. Take a look at 
the following example:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[&lt;systemUsage&gt;
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;systemUsage&gt;
   &lt;systemUsage&gt;
     &lt;memoryUsage&gt;
       &lt;memoryUsage limit=&quot;64 mb&quot; /&gt;

Modified: websites/production/activemq/content/pure-master-slave.html
==============================================================================
--- websites/production/activemq/content/pure-master-slave.html (original)
+++ websites/production/activemq/content/pure-master-slave.html Sat Jun 27 
21:23:55 2015
@@ -32,16 +32,6 @@
     </style>
     <![endif]-->
 
-          <link 
href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' 
rel='stylesheet' type='text/css' /> 
-      <link 
href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' 
rel='stylesheet' type='text/css' /> 
-      <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script> 
-         
-      <script type="text/javascript"> 
-        SyntaxHighlighter.defaults['toolbar'] = false; 
-        SyntaxHighlighter.all(); 
-      </script> 
     
     <title>
     Apache ActiveMQ &#8482; -- Pure Master Slave
@@ -84,17 +74,10 @@
         <td valign="top" width="100%">
 <div class="wiki-content maincontent"><h3 
id="PureMasterSlave-PureMasterSlave">Pure Master Slave</h3>
 
-    <div class="aui-message problem shadowed information-macro">
-                    <p class="title">This feature has been deprecated and will 
be removed in version 5.8</p>
-                            <span class="aui-icon icon-problem">Icon</span>
-                <div class="message-content">
-                            
+<div class="confluence-information-macro 
confluence-information-macro-warning"><p class="title">This feature has been 
deprecated and will be removed in version 5.8</p><span class="aui-icon 
aui-icon-small aui-iconfont-error 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
 <p>This feature will be removed in 5.8 as it has not evolved to be production 
ready. <br clear="none">
 You are advised to use <a shape="rect" href="masterslave.html">shared storage 
master/slave</a> or the <a shape="rect" 
href="replicated-leveldb-store.html">Replicated LevelDB Store</a>.<br 
clear="none">
-See <a shape="rect" class="external-link" 
href="https://issues.apache.org/jira/browse/AMQ-4165";>AMQ-4165</a></p>
-                    </div>
-    </div>
-
+See <a shape="rect" class="external-link" 
href="https://issues.apache.org/jira/browse/AMQ-4165";>AMQ-4165</a></p></div></div>
 
 <p>A Pure Master Slave configuration provides a basic shared nothing, fully 
replicated topology which does not depend on a shared file system or shared 
database. </p>
 
@@ -117,7 +100,7 @@ in a clients transaction will not comple
 
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 failover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=false
 ]]></script>
 </div></div>
@@ -136,20 +119,14 @@ failover://(tcp://masterhost:61616,tcp:/
 
 <h3 id="PureMasterSlave-ConfiguringPureMasterSlave">Configuring Pure Master 
Slave</h3>
 
-    <div class="aui-message warning shadowed information-macro">
-                            <span class="aui-icon icon-warning">Icon</span>
-                <div class="message-content">
-                            
-<p>You should not configure a connection between the master and a slave. The 
connection is automatically established with the slave's configuration. If you 
explicitly configure a network connection, you may encounter race conditions 
when the master broker is under heavy load.</p>
-                    </div>
-    </div>
-
+<div class="confluence-information-macro 
confluence-information-macro-note"><span class="aui-icon aui-icon-small 
aui-iconfont-warning confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
+<p>You should not configure a connection between the master and a slave. The 
connection is automatically established with the slave's configuration. If you 
explicitly configure a network connection, you may encounter race conditions 
when the master broker is under heavy load.</p></div></div>
 
 <p>A master broker doesn't need any special configuration - it's a normal 
broker until a slave broker attaches itself.<br clear="none">
 To identify a broker as a slave - there is just one property to set (see 
below) as this <a shape="rect" class="external-link" 
href="http://svn.apache.org/repos/asf/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml";>example
 shows</a> - so configuration is nice and easy:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;broker masterConnectorURI=&quot;tcp://masterhost:62001&quot; 
shutdownOnMasterFailure=&quot;false&quot;&gt;
   &lt;persistenceAdapter&gt;
       &lt;journaledJDBC journalLogFiles=&quot;5&quot; 
dataDirectory=&quot;${activemq.base}/data/broker2&quot; /&gt;
@@ -170,7 +147,7 @@ To identify a broker as a slave - there
 <p>In ActiveMQ 4.1 or later you can use a 
<strong>&lt;masterConnector/&gt;</strong> element as an alternative XML 
configuration mechanism as shown in the following <a shape="rect" 
class="external-link" 
href="http://svn.apache.org/repos/asf/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml";>example</a>
 to configure the user and password that the slave will use to connect to the 
master</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;broker brokerName=&quot;slave&quot; useJmx=&quot;false&quot;  
deleteAllMessagesOnStartup=&quot;true&quot;  
xmlns=&quot;http://activemq.apache.org/schema/core&quot;&gt;
     &lt;services&gt;
       &lt;masterConnector remoteURI= &quot;tcp://localhost:62001&quot; 
userName=&quot;James&quot; password=&quot;Cheese&quot;/&gt;

Modified: websites/production/activemq/content/redelivery-policy.html
==============================================================================
--- websites/production/activemq/content/redelivery-policy.html (original)
+++ websites/production/activemq/content/redelivery-policy.html Sat Jun 27 
21:23:55 2015
@@ -32,15 +32,6 @@
     </style>
     <![endif]-->
 
-          <link 
href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' 
rel='stylesheet' type='text/css' /> 
-      <link 
href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' 
rel='stylesheet' type='text/css' /> 
-      <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script> 
-              <script 
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script> 
-         
-      <script type="text/javascript"> 
-        SyntaxHighlighter.defaults['toolbar'] = false; 
-        SyntaxHighlighter.all(); 
-      </script> 
     
     <title>
     Apache ActiveMQ &#8482; -- Redelivery Policy
@@ -99,7 +90,7 @@
 <p>As of ActiveMQ v5.7.0 you can now configure a <a shape="rect" 
class="external-link" 
href="http://svn.apache.org/viewvc/activemq/trunk/activemq-client/src/main/java/org/apache/activemq/RedeliveryPolicy.java?view=markup";>RedeliveryPolicy</a>
 on a per-destination bases.  The ActiveMQConnection factory class now exposes 
a <a shape="rect" class="external-link" 
href="http://svn.apache.org/viewvc/activemq/trunk/activemq-client/src/main/java/org/apache/activemq/broker/region/policy/RedeliveryPolicyMap.java?view=markup";>RedeliveryPolicyMap</a>
 property that allows to assign a RedeliveryPolicy using named destinations or 
using destination wildcards.  The code snipped below shows how to configure a 
different <a shape="rect" class="external-link" 
href="http://svn.apache.org/viewvc/activemq/trunk/activemq-client/src/main/java/org/apache/activemq/RedeliveryPolicy.java?view=markup";>RedeliveryPolicy</a>
 for Topics and Queues. </p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" 
type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 
     ActiveMQConnection connection ...  // Create a connection
 


Reply via email to