You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by dk...@apache.org on 2017/12/14 14:49:00 UTC

[36/51] [abbrv] [partial] activemq-web git commit: Add body.storage type

http://git-wip-us.apache.org/repos/asf/activemq-web/blob/7a7d976c/advisory-message.xml
----------------------------------------------------------------------
diff --git a/advisory-message.xml b/advisory-message.xml
index dc77ee1..fd86b03 100644
--- a/advisory-message.xml
+++ b/advisory-message.xml
@@ -1,5 +1,4 @@
-<div class="wiki-content maincontent"><p>ActiveMQ supports advisory messages which allows you to watch the system using regular JMS messages. Currently we have advisory messages that support:</p><ul><li>consumers, producers and connections starting and stopping</li><li>temporary destinations being created and destroyed</li><li>messages expiring on topics and queues</li><li>brokers sending messages to destinations with no consumers.</li><li>connections starting and stopping</li></ul><p>Advisory messages can be thought as some kind of administrative channel where you receive information regarding what is happening on your JMS provider along with what's happening with producers, consumers and destinations. When you look at a broker via <a shape="rect" href="jmx.xml">JMX</a> you will see the advisory topics prefixed with <strong><code>ActiveMQ.Advisory.</code></strong>.</p><p>Every Advisory has the message <strong>type</strong> 'Advisory' and some predefined message properties:</p><div 
 class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Property</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Version</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>originBrokerId</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The id of the broker where the advisory originated.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>5.x</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>originBrokerName</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The name of the broker where the advisory originated.</p></td>
 <td colspan="1" rowspan="1" class="confluenceTd"><p>5.x</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>originBrokerURL</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The first URL of the broker where the advisory originated.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>5.2</p></td></tr></tbody></table></div><p>In addition, some messages carry a&#160;<strong><code>Command</code></strong> object, which carries additional information about the nature of the advisory, e.g., a subscription to each of the destination returns an <strong><code>ActiveMQMessage</code></strong>. Specific&#160;<strong><code>DataStructure</code></strong> objects, e.g.,. <strong><code>ConsumerInfo</code>, <code>ProducerInfo</code></strong>, <strong><code>ConnectionInfo</code></strong> can be retrieved using <strong><code>ActiveMQMessage.getDataStructure()</code></s
 trong>.</p><p>For example:</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[Destination advisoryDestination = AdvisorySupport.getProducerAdvisoryTopic(destination)
+<div class="wiki-content maincontent"><p>ActiveMQ supports advisory messages which allows you to watch the system using regular JMS messages. Currently we have advisory messages that support:</p><ul><li>consumers, producers and connections starting and stopping</li><li>temporary destinations being created and destroyed</li><li>messages expiring on topics and queues</li><li>brokers sending messages to destinations with no consumers.</li><li>connections starting and stopping</li></ul><p>Advisory messages can be thought as some kind of administrative channel where you receive information regarding what is happening on your JMS provider along with what's happening with producers, consumers and destinations. When you look at a broker via <link><page ri:content-title="JMX"></page></link> you will see the advisory topics prefixed with <strong><code>ActiveMQ.Advisory.</code></strong>.</p><p>Every Advisory has the message <strong>type</strong> 'Advisory' and some predefined message propertie
 s:</p><table><tbody><tr><th colspan="1" rowspan="1"><p>Property</p></th><th colspan="1" rowspan="1"><p>Type</p></th><th colspan="1" rowspan="1"><p>Description</p></th><th colspan="1" rowspan="1"><p>Version</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>originBrokerId</code></p></td><td colspan="1" rowspan="1"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1"><p>The id of the broker where the advisory originated.</p></td><td colspan="1" rowspan="1"><p>5.x</p></td></tr><tr><td colspan="1" rowspan="1"><p><code>originBrokerName</code></p></td><td colspan="1" rowspan="1"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1"><p>The name of the broker where the advisory originated.</p></td><td colspan="1" rowspan="1"><p>5.x</p></td></tr><tr><td colspan="1" rowspan="1"><p><code>originBrokerURL</code></p></td><td colspan="1" rowspan="1"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1"><p>The first URL of the broker where the advisory ori
 ginated.</p></td><td colspan="1" rowspan="1"><p>5.2</p></td></tr></tbody></table><p>In addition, some messages carry a&#160;<strong><code>Command</code></strong> object, which carries additional information about the nature of the advisory, e.g., a subscription to each of the destination returns an <strong><code>ActiveMQMessage</code></strong>. Specific&#160;<strong><code>DataStructure</code></strong> objects, e.g.,. <strong><code>ConsumerInfo</code>, <code>ProducerInfo</code></strong>, <strong><code>ConnectionInfo</code></strong> can be retrieved using <strong><code>ActiveMQMessage.getDataStructure()</code></strong>.</p><p>For example:</p><structured-macro ac:macro-id="44dc8e29-8077-4e45-bfef-b8553dac52a1" ac:name="code" ac:schema-version="1"><parameter ac:name="language">java</parameter><plain-text-body>Destination advisoryDestination = AdvisorySupport.getProducerAdvisoryTopic(destination)
 MessageConsumer consumer = session.createConsumer(advisoryDestination);
 consumer.setMessageListener(this);
 
@@ -10,41 +9,27 @@ public void onMessage(Message msg){
              ProducerInfo prod = (ProducerInfo) aMsg.getDataStructure();
         } 
         catch(JMSException e) {
-            log.error(&quot;Failed to process message: &quot; + msg);
+            log.error("Failed to process message: " + msg);
         }
     }
 }
-]]></script>
-</div></div><h2 id="AdvisoryMessage-Thefollowingadvisorytopicsaresupported">The following advisory topics are supported</h2><h3 id="AdvisoryMessage-Clientbasedadvisories">Client based advisories</h3><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">Tip</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>These are always generated.</p></div></div><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Connection</code></p></td><td colspan="1" rowspan="1" class="
 confluenceTd"><p>Connection start &amp; stop messages.</p></td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConnectionInfo</code>,&#160;<code>RemoveInfo</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Producer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Producer start &amp; stop messages on a Queue.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='producerCount'</code> - the number of producers</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ProducerInfo</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Producer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Producer start &amp; stop messages on a Topic.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='producerCount'</code>&#160;- the numbe
 r of producers</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ProducerInfo</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Consumer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Consumer start &amp; stop messages on a Queue.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerCount'</code> - the number of Consumers</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConnectionInfo</code>,&#160;<code>RemoveInfo</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Consumer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Consumer start &amp; stop messages on a Topic.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerCount'</code>&#160;- the number of Consumers</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConnectionInfo</cod
 e>,&#160;<code>RemoveInfo</code></p></td></tr></tbody></table></div><p>Note that the consumer start/stop advisory messages also have a&#160;<strong><code>consumerCount</code></strong> header to indicate the number of active consumers on the destination when the advisory message was sent. This means you can use the following selector to be notified when there are no active consumers on a given destination:</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[consumerCount = 0
-]]></script>
-</div></div><h3 id="AdvisoryMessage-DestinationandMessagebasedadvisories">Destination and Message based advisories</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PolicyEntry Property</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Queue create &amp; destroy.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>DestinationInfo</code></p></td><td cols
 pan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Topic create &amp; destroy.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.TempQueue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Temporary Queue create &amp; destroy.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceT
 d"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.TempTopic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Temporary Topic create &amp; destroy.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Expired.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Expired messages on a Queue.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String
 ='orignalMessageId'</code> - the expired id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Expired.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Expired messages on a Topic.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code> - the expired id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.NoConsumer.Queue</code></p></td><td colspan="1" rowspan="1" class="
 confluenceTd"><p>No consumer is available to process messages being sent on a Queue.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>sendAdvisoryIfNoConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.NoConsumer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>No consumer is available to process messages being sent on a Topic.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>sendAdvisoryIfNoConsumers<
 /code></p></td></tr></tbody></table></div><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">Tip</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p><strong><code>NoConsumer</code></strong> topic advisories are sent only for non-persistent messages.</p></div></div><h3 id="AdvisoryMessage-Newadvisoriesinversion5.2">New advisories in version 5.2</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PolicyEntry Property</p><
 /th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.SlowConsumer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Slow Queue Consumer.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerId'</code> - the consumer id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConsumerInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForSlowConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.SlowConsumer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Slow Topic Consumer.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerId'</code>&#160;- the consumer id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConsumerInfo</code></p></td><td colspan="1" r
 owspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForSlowConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.FastProducer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Fast Queue producer.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='producerId'</code> - the producer id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ProducerInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisdoryForFastProducers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory. FastProducer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Fast Topic producer.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Str
 ing='consumerId'</code>' - the producer id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ProducerInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisdoryForFastProducers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDiscarded.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message discarded.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code> - the discarded id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForDiscardingMessages</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDiscard
 ed.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message discarded.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the discarded id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForDiscardingMessages</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDelivered.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message delivered to the broker.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colsp
 an="1" rowspan="1" class="confluenceTd"><p><code>advisoryForDelivery</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDelivered.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message delivered to the broker.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForDelivery</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageConsumed.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message consumed by a client.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the deliver
 ed id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageConsumed.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message consumed by a client.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.FULL</code></p></td><td colspan="1" rowspan="1" class="co
 nfluenceTd"><p>A Usage resource is at its limit.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='usageName'</code> - the name of Usage resource</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryWhenFull</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MasterBroker</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A broker is now the master in a master/slave configuration.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr></tbody></table></div>
 <h3 id="AdvisoryMessage-NewAdvisoriesin5.4">New Advisories in 5.4</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PolicyEntry Property</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDLQd.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message sent to DLQ.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code> - the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rows
 pan="1" class="confluenceTd"><p>Always on</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDLQd.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message sent to DLQ.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Always on</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForConsumed</code></p></td></tr></tbody></table></div><h3 id="AdvisoryMessage-Networkbridgeadvisories">Network bridge advisories</h3><p>Starting with ActiveMQ version 5.5 you can watch advisory topics for events related to the status of network bridges. You can get advisory messages when the network bridge is star
 ted or stopped.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.NetworkBridge</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Network bridge being stopped or started.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Boolean="started"</code>&#160;-&#160;<strong><code>true</code></strong> if bridge is started,&#160;<strong><code>false</code></strong> if it is stopped.<br clear="none"><code>Boolean="createdByDuplex"</code>&#160;-&#160;<strong><code>true</code></strong> if the bridge is creat
 ed by remote network connector.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>BrokerInfo</code> - provides data of the remote broker</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Always on</p></td></tr></tbody></table></div><h3 id="AdvisoryMessage-EnablingAdvisoriesDisabledbyDefault">Enabling Advisories Disabled by Default</h3><p>The advisories that are not turned on by default (see the last column) can be enabled on a&#160;<strong><code>PolicyEntry</code></strong> in the ActiveMQ Broker Configuration, e.g., to enable a message consumed advisory you can configure the following:</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;destinationPolicy&gt;
+</plain-text-body></structured-macro><h2>The following advisory topics are supported</h2><h3>Client based advisories</h3><structured-macro ac:macro-id="2c5ea69f-8a07-4ac7-bdf3-8dd608099786" ac:name="tip" ac:schema-version="1"><parameter ac:name="title">Tip</parameter><rich-text-body><p>These are always generated.</p></rich-text-body></structured-macro><table><tbody><tr><th colspan="1" rowspan="1"><p>Advisory Topics</p></th><th colspan="1" rowspan="1"><p>Description</p></th><th colspan="1" rowspan="1"><p>Properties</p></th><th colspan="1" rowspan="1"><p>Data Structure</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.Connection</code></p></td><td colspan="1" rowspan="1"><p>Connection start &amp; stop messages.</p></td><td colspan="1" rowspan="1">&#160;</td><td colspan="1" rowspan="1"><p><code>ConnectionInfo</code>,&#160;<code>RemoveInfo</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.Producer.Queue</code></p></td><td colspan="1" ro
 wspan="1"><p>Producer start &amp; stop messages on a Queue.</p></td><td colspan="1" rowspan="1"><p><code>String='producerCount'</code> - the number of producers</p></td><td colspan="1" rowspan="1"><p><code>ProducerInfo</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.Producer.Topic</code></p></td><td colspan="1" rowspan="1"><p>Producer start &amp; stop messages on a Topic.</p></td><td colspan="1" rowspan="1"><p><code>String='producerCount'</code>&#160;- the number of producers</p></td><td colspan="1" rowspan="1"><p><code>ProducerInfo</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.Consumer.Queue</code></p></td><td colspan="1" rowspan="1"><p>Consumer start &amp; stop messages on a Queue.</p></td><td colspan="1" rowspan="1"><p><code>String='consumerCount'</code> - the number of Consumers</p></td><td colspan="1" rowspan="1"><p><code>ConnectionInfo</code>,&#160;<code>RemoveInfo</code></p></td></tr><tr><td colspan="1" rowspan="
 1"><p><code>ActiveMQ.Advisory.Consumer.Topic</code></p></td><td colspan="1" rowspan="1"><p>Consumer start &amp; stop messages on a Topic.</p></td><td colspan="1" rowspan="1"><p><code>String='consumerCount'</code>&#160;- the number of Consumers</p></td><td colspan="1" rowspan="1"><p><code>ConnectionInfo</code>,&#160;<code>RemoveInfo</code></p></td></tr></tbody></table><p>Note that the consumer start/stop advisory messages also have a&#160;<strong><code>consumerCount</code></strong> header to indicate the number of active consumers on the destination when the advisory message was sent. This means you can use the following selector to be notified when there are no active consumers on a given destination:</p><structured-macro ac:macro-id="c7af55a6-e07f-47e3-873e-b6af6e1ccd70" ac:name="code" ac:schema-version="1"><plain-text-body>consumerCount = 0
+</plain-text-body></structured-macro><h3>Destination and Message based advisories</h3><table><tbody><tr><th colspan="1" rowspan="1"><p>Advisory Topics</p></th><th colspan="1" rowspan="1"><p>Description</p></th><th colspan="1" rowspan="1"><p>Properties</p></th><th colspan="1" rowspan="1"><p>Data Structure</p></th><th colspan="1" rowspan="1"><p>Default</p></th><th colspan="1" rowspan="1"><p>PolicyEntry Property</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.Queue</code></p></td><td colspan="1" rowspan="1"><p>Queue create &amp; destroy.</p></td><td colspan="1" rowspan="1"><p><code>null</code></p></td><td colspan="1" rowspan="1"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1"><p><code>true</code></p></td><td colspan="1" rowspan="1"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.Topic</code></p></td><td colspan="1" rowspan="1"><p>Topic create &amp; destroy.</p></td><td colspan="1" rowspan="1"><p><c
 ode>null</code></p></td><td colspan="1" rowspan="1"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1"><p><code>true</code></p></td><td colspan="1" rowspan="1"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.TempQueue</code></p></td><td colspan="1" rowspan="1"><p>Temporary Queue create &amp; destroy.</p></td><td colspan="1" rowspan="1"><p><code>null</code></p></td><td colspan="1" rowspan="1"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1"><p><code>true</code></p></td><td colspan="1" rowspan="1"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.TempTopic</code></p></td><td colspan="1" rowspan="1"><p>Temporary Topic create &amp; destroy.</p></td><td colspan="1" rowspan="1"><p><code>null</code></p></td><td colspan="1" rowspan="1"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1"><p><code>true</code></p></td><td colspan="1" rowspan="1"><p><code>n
 one</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.Expired.Queue</code></p></td><td colspan="1" rowspan="1"><p>Expired messages on a Queue.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code> - the expired id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>true</code></p></td><td colspan="1" rowspan="1"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.Expired.Topic</code></p></td><td colspan="1" rowspan="1"><p>Expired messages on a Topic.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code> - the expired id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>true</code></p></td><td colspan="1" rowspan="1"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.NoConsumer.Queue</code></p></td><td colspan="1" rowspa
 n="1"><p>No consumer is available to process messages being sent on a Queue.</p></td><td colspan="1" rowspan="1"><p><code>null</code></p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>sendAdvisoryIfNoConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.NoConsumer.Topic</code></p></td><td colspan="1" rowspan="1"><p>No consumer is available to process messages being sent on a Topic.</p></td><td colspan="1" rowspan="1"><p><code>null</code></p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>sendAdvisoryIfNoConsumers</code></p></td></tr></tbody></table><structured-macro ac:macro-id="76e55271-1de0-476c-b8f4-207dc9f3cc7a" ac:name="tip" ac:schema-version="1"><parameter ac:name="title">Tip</parameter><rich-text-body><p><strong><code>No
 Consumer</code></strong> topic advisories are sent only for non-persistent messages.</p></rich-text-body></structured-macro><h3>New advisories in version 5.2</h3><table><tbody><tr><th colspan="1" rowspan="1"><p>Advisory Topics</p></th><th colspan="1" rowspan="1"><p>Description</p></th><th colspan="1" rowspan="1"><p>Properties</p></th><th colspan="1" rowspan="1"><p>Data Structure</p></th><th colspan="1" rowspan="1"><p>Default</p></th><th colspan="1" rowspan="1"><p>PolicyEntry Property</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.SlowConsumer.Queue</code></p></td><td colspan="1" rowspan="1"><p>Slow Queue Consumer.</p></td><td colspan="1" rowspan="1"><p><code>String='consumerId'</code> - the consumer id</p></td><td colspan="1" rowspan="1"><p><code>ConsumerInfo</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisoryForSlowConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>Active
 MQ.Advisory.SlowConsumer.Topic</code></p></td><td colspan="1" rowspan="1"><p>Slow Topic Consumer.</p></td><td colspan="1" rowspan="1"><p><code>String='consumerId'</code>&#160;- the consumer id</p></td><td colspan="1" rowspan="1"><p><code>ConsumerInfo</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisoryForSlowConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.FastProducer.Queue</code></p></td><td colspan="1" rowspan="1"><p>Fast Queue producer.</p></td><td colspan="1" rowspan="1"><p><code>String='producerId'</code> - the producer id</p></td><td colspan="1" rowspan="1"><p><code>ProducerInfo</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisdoryForFastProducers</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory. FastProducer.Topic</code></p></td><td colspan="1" rowspan="1"><p>Fast Topic produc
 er.</p></td><td colspan="1" rowspan="1"><p><code>String='consumerId'</code>' - the producer id</p></td><td colspan="1" rowspan="1"><p><code>ProducerInfo</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisdoryForFastProducers</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MessageDiscarded.Queue</code></p></td><td colspan="1" rowspan="1"><p>Message discarded.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code> - the discarded id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisoryForDiscardingMessages</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MessageDiscarded.Topic</code></p></td><td colspan="1" rowspan="1"><p>Message discarded.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code>&#160;-
  the discarded id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisoryForDiscardingMessages</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MessageDelivered.Queue</code></p></td><td colspan="1" rowspan="1"><p>Message delivered to the broker.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisoryForDelivery</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MessageDelivered.Topic</code></p></td><td colspan="1" rowspan="1"><p>Message delivered to the broker.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1"><
 p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisoryForDelivery</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MessageConsumed.Queue</code></p></td><td colspan="1" rowspan="1"><p>Message consumed by a client.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MessageConsumed.Topic</code></p></td><td colspan="1" rowspan="1"><p>Message consumed by a client.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p><code>false
 </code></p></td><td colspan="1" rowspan="1"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.FULL</code></p></td><td colspan="1" rowspan="1"><p>A Usage resource is at its limit.</p></td><td colspan="1" rowspan="1"><p><code>String='usageName'</code> - the name of Usage resource</p></td><td colspan="1" rowspan="1"><p><code>null</code></p></td><td colspan="1" rowspan="1"><p><code>false</code></p></td><td colspan="1" rowspan="1"><p><code>advisoryWhenFull</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MasterBroker</code></p></td><td colspan="1" rowspan="1"><p>A broker is now the master in a master/slave configuration.</p></td><td colspan="1" rowspan="1"><p><code>null</code></p></td><td colspan="1" rowspan="1"><p><code>null</code></p></td><td colspan="1" rowspan="1"><p><code>true</code></p></td><td colspan="1" rowspan="1"><p><code>none</code></p></td></tr></tbody></table><h3>New Advisories in 5.4</h
 3><table><tbody><tr><th colspan="1" rowspan="1"><p>Advisory Topics</p></th><th colspan="1" rowspan="1"><p>Description</p></th><th colspan="1" rowspan="1"><p>Properties</p></th><th colspan="1" rowspan="1"><p>Data Structure</p></th><th colspan="1" rowspan="1"><p>Default</p></th><th colspan="1" rowspan="1"><p>PolicyEntry Property</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MessageDLQd.Queue</code></p></td><td colspan="1" rowspan="1"><p>Message sent to DLQ.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code> - the delivered id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p>Always on</p></td><td colspan="1" rowspan="1"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.MessageDLQd.Topic</code></p></td><td colspan="1" rowspan="1"><p>Message sent to DLQ.</p></td><td colspan="1" rowspan="1"><p><code>String='orignalMessageId'</code
 >&#160;- the delivered id</p></td><td colspan="1" rowspan="1"><p><code>Message</code></p></td><td colspan="1" rowspan="1"><p>Always on</p></td><td colspan="1" rowspan="1"><p><code>advisoryForConsumed</code></p></td></tr></tbody></table><h3>Network bridge advisories</h3><p>Starting with ActiveMQ version 5.5 you can watch advisory topics for events related to the status of network bridges. You can get advisory messages when the network bridge is started or stopped.</p><table><tbody><tr><th colspan="1" rowspan="1"><p>Advisory Topics</p></th><th colspan="1" rowspan="1"><p>Description</p></th><th colspan="1" rowspan="1"><p>Properties</p></th><th colspan="1" rowspan="1"><p>Data Structure</p></th><th colspan="1" rowspan="1"><p>Default</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>ActiveMQ.Advisory.NetworkBridge</code></p></td><td colspan="1" rowspan="1"><p>Network bridge being stopped or started.</p></td><td colspan="1" rowspan="1"><p><code>Boolean="started"</code>&#160;-&#160;<str
 ong><code>true</code></strong> if bridge is started,&#160;<strong><code>false</code></strong> if it is stopped.<br clear="none"><code>Boolean="createdByDuplex"</code>&#160;-&#160;<strong><code>true</code></strong> if the bridge is created by remote network connector.</p></td><td colspan="1" rowspan="1"><p><code>BrokerInfo</code> - provides data of the remote broker</p></td><td colspan="1" rowspan="1"><p>Always on</p></td></tr></tbody></table><h3>Enabling Advisories Disabled by Default</h3><p>The advisories that are not turned on by default (see the last column) can be enabled on a&#160;<strong><code>PolicyEntry</code></strong> in the ActiveMQ Broker Configuration, e.g., to enable a message consumed advisory you can configure the following:</p><structured-macro ac:macro-id="9502ed06-6214-4cb7-aa22-717b7fd2a4a9" ac:name="code" ac:schema-version="1"><parameter ac:name="language">xml</parameter><plain-text-body>&lt;destinationPolicy&gt;
     &lt;policyMap&gt;
        &lt;policyEntries&gt; 
-           &lt;policyEntry topic=&quot;&gt;&quot; advisoryForConsumed=&quot;true&quot;/&gt;
+           &lt;policyEntry topic="&gt;" advisoryForConsumed="true"/&gt;
        &lt;/policyEntries&gt;
     &lt;/policyMap&gt;
 &lt;/destinationPolicy&gt;
-]]></script>
-</div></div><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Hint</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The&#160;<strong><code>&gt;</code></strong> character matches all topics - you can use wild-card matches for setting a destination policy - see <a shape="rect" href="wildcards.xml">Wildcards</a></p></div></div><h3 id="AdvisoryMessage-DisablingAdvisoryMessages">Disabling Advisory Messages</h3><p>The use of advisory messages incurs a small overhead in terms of memory and connection resources that is related to the number of destinations in your system. In some cases it can make sense to disable all advisories.</p><p>Advisories need to be disabled both on the Broker, via XML Configuration</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;broker advisorySupport=&quot;false&quot;&gt;
-]]></script>
-</div></div><p>or from java code:</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[BrokerService broker = new BrokerService();
+</plain-text-body></structured-macro><structured-macro ac:macro-id="ec51dc63-3e9c-481f-8962-6583fa4f8651" ac:name="info" ac:schema-version="1"><parameter ac:name="title">Hint</parameter><rich-text-body><p>The&#160;<strong><code>&gt;</code></strong> character matches all topics - you can use wild-card matches for setting a destination policy - see <link><page ri:content-title="Wildcards"></page></link></p></rich-text-body></structured-macro><h3>Disabling Advisory Messages</h3><p>The use of advisory messages incurs a small overhead in terms of memory and connection resources that is related to the number of destinations in your system. In some cases it can make sense to disable all advisories.</p><p>Advisories need to be disabled both on the Broker, via XML Configuration</p><structured-macro ac:macro-id="52656f76-8b75-4ef0-9135-c8522bb3b2d5" ac:name="code" ac:schema-version="1"><plain-text-body>&lt;broker advisorySupport="false"&gt;
+</plain-text-body></structured-macro><p>or from java code:</p><structured-macro ac:macro-id="ecc0e18b-00a0-468a-b1c0-3179f4e488e2" ac:name="code" ac:schema-version="1"><parameter ac:name="language">java</parameter><plain-text-body>BrokerService broker = new BrokerService();
 broker.setAdvisorySupport(false);
 // ...
 broker.start();
-]]></script>
-</div></div><p><em>and</em> on your&#160;<strong><code>ActiveMQConnectionFactory</code></strong> (because a subscription to an advisory topic will auto create it) via the <strong><code>brokerUrl</code></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[tcp://localhost:61616?jms.watchTopicAdvisories=false
-]]></script>
-</div></div><p>or via java code using the&#160;<strong><code>watchTopicAdvisories</code></strong> attribute on the <strong><code>ActiveMQConnectionFactory</code></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[ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
+</plain-text-body></structured-macro><p><em>and</em> on your&#160;<strong><code>ActiveMQConnectionFactory</code></strong> (because a subscription to an advisory topic will auto create it) via the <strong><code>brokerUrl</code></strong>:</p><structured-macro ac:macro-id="5fc78a1d-aa00-4204-9ee7-7c4d2f237104" ac:name="code" ac:schema-version="1"><plain-text-body>tcp://localhost:61616?jms.watchTopicAdvisories=false
+</plain-text-body></structured-macro><p>or via java code using the&#160;<strong><code>watchTopicAdvisories</code></strong> attribute on the <strong><code>ActiveMQConnectionFactory</code></strong>.</p><structured-macro ac:macro-id="3778eeca-7501-4303-9374-fda2e63aa39e" ac:name="code" ac:schema-version="1"><parameter ac:name="language">java</parameter><plain-text-body>ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
 factory.setWatchTopicAdvisories(false);
-]]></script>
-</div></div><div class="confluence-information-macro confluence-information-macro-warning"><p class="title">Warning</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Advisory messages are required for <a shape="rect" href="networks-of-brokers.xml">dynamic network broker topologies</a> as&#160;<code>NetworkConnectors</code> subscribe to advisory messages. In the absence of advisories, a network must be statically configured.</p></div></div><h3 id="AdvisoryMessage-UsingtheDestinations">Using the Destinations</h3><p>All of the above destinations are really prefixes which are appended with important information (like the actual topic or queue, the client ID, producer ID, consumer ID etc). This allows you to reuse the power of publish/subscribe, <a shape="rect" href="wildcards.xml">Wildcards</a> and <a shape="rect" href="selectors.xml">Selectors</a> to filter the advisory messages as you 
 see fit.</p><p>For example if you want to subscribe to expired messages on a topic&#160;<strong><code>FOO.BAR</code></strong> you could subscribe to <strong><code>ActiveMQ.Advisory.Expired.Topic.FOO.BAR</code></strong>. To subscribe to all messages of a certain kind of advisory just append <strong><code>.&gt;</code></strong> to the topic, e.g., to subscribe to all the consumers starting and stopping to topics and queues subscribe to <strong><code>ActiveMQ.Advisory.Consumer..&gt;</code></strong>.</p><h3 id="AdvisoryMessage-HelperMethods">Helper Methods</h3><p>Methods to get the advisory destination objects are available in <a shape="rect" class="external-link" href="http://incubator.apache.org/activemq/maven/activemq-core/apidocs/org/apache/activemq/advisory/AdvisorySupport.html">AdvisorySupport</a> through the following methods.</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[AdvisorySupport.getConsumerAdvisoryTopic()
+</plain-text-body></structured-macro><structured-macro ac:macro-id="535675d0-77ca-4a56-9600-69cccc65d3cc" ac:name="warning" ac:schema-version="1"><parameter ac:name="title">Warning</parameter><rich-text-body><p>Advisory messages are required for <link><page ri:content-title="Networks of Brokers"></page><plain-text-link-body>dynamic network broker topologies</plain-text-link-body></link> as&#160;<code>NetworkConnectors</code> subscribe to advisory messages. In the absence of advisories, a network must be statically configured.</p></rich-text-body></structured-macro><h3>Using the Destinations</h3><p>All of the above destinations are really prefixes which are appended with important information (like the actual topic or queue, the client ID, producer ID, consumer ID etc). This allows you to reuse the power of publish/subscribe, <link><page ri:content-title="Wildcards"></page></link> and <link><page ri:content-title="Selectors"></page></link> to filter the advisory messages as you see f
 it.</p><p>For example if you want to subscribe to expired messages on a topic&#160;<strong><code>FOO.BAR</code></strong> you could subscribe to <strong><code>ActiveMQ.Advisory.Expired.Topic.FOO.BAR</code></strong>. To subscribe to all messages of a certain kind of advisory just append <strong><code>.&gt;</code></strong> to the topic, e.g., to subscribe to all the consumers starting and stopping to topics and queues subscribe to <strong><code>ActiveMQ.Advisory.Consumer..&gt;</code></strong>.</p><h3>Helper Methods</h3><p>Methods to get the advisory destination objects are available in <a shape="rect" href="http://incubator.apache.org/activemq/maven/activemq-core/apidocs/org/apache/activemq/advisory/AdvisorySupport.html">AdvisorySupport</a> through the following methods.</p><structured-macro ac:macro-id="11781ec9-61c0-4bb9-bd46-ea59d7e54c35" ac:name="code" ac:schema-version="1"><plain-text-body>AdvisorySupport.getConsumerAdvisoryTopic()
 AdvisorySupport.getProducerAdvisoryTopic()
 AdvisorySupport.getExpiredTopicMessageAdvisoryTopic()
 AdvisorySupport.getExpiredQueueMessageAdvisoryTopic()
@@ -65,6 +50,5 @@ AdvisorySupport.getMessageDeliveredAdvisoryTopic()
 AdvisorySupport.getMessageConsumedAdvisoryTopic()
 AdvisorySupport.getMasterBrokerAdvisoryTopic()
 AdvisorySupport.getFullAdvisoryTopic()
-]]></script>
-</div></div><p>Some helper classes to deal with advisory messages are available in the <a shape="rect" class="external-link" href="http://activemq.apache.org/maven/activemq-core/apidocs/org/apache/activemq/advisory/package-summary.html">advisories</a> package.</p></div>
+</plain-text-body></structured-macro><p>Some helper classes to deal with advisory messages are available in the <a shape="rect" href="http://activemq.apache.org/maven/activemq-core/apidocs/org/apache/activemq/advisory/package-summary.html">advisories</a> package.</p></div>
 

http://git-wip-us.apache.org/repos/asf/activemq-web/blob/7a7d976c/ajax.xml
----------------------------------------------------------------------
diff --git a/ajax.xml b/ajax.xml
index 74f33f1..475c3da 100644
--- a/ajax.xml
+++ b/ajax.xml
@@ -1,16 +1,15 @@
-<div class="wiki-content maincontent"><h1 id="Ajax-Introduction">Introduction</h1>
+<div class="wiki-content maincontent"><h1>Introduction</h1>
 
-<p>ActiveMQ supports <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Ajax_%28programming%29" rel="nofollow">Ajax</a> which is an Asychronous Javascript And Xml mechanism for real time web applications. This means you can create highly real time web applications taking full advantage of the publish/subscribe nature of ActiveMQ</p>
+<p>ActiveMQ supports <a shape="rect" href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">Ajax</a> which is an Asychronous Javascript And Xml mechanism for real time web applications. This means you can create highly real time web applications taking full advantage of the publish/subscribe nature of ActiveMQ</p>
 
-<p>Ajax allows a regular DHTML client (with JavaScript and a modern version 5 or later web browser) to send and receive messages over the web. Ajax support in ActiveMQ builds on the same basis as the <a shape="rect" href="rest.xml">REST</a> connector for ActiveMQ which allows any web capable device to send or receive messages over JMS.</p>
+<p>Ajax allows a regular DHTML client (with JavaScript and a modern version 5 or later web browser) to send and receive messages over the web. Ajax support in ActiveMQ builds on the same basis as the <link><page ri:content-title="REST"></page></link> connector for ActiveMQ which allows any web capable device to send or receive messages over JMS.</p>
 
-<p>To see Ajax in action, try <a shape="rect" href="web-samples.xml">running the examples</a></p>
+<p>To see Ajax in action, try <link><page ri:content-title="Web Samples"></page><link-body>running the examples</link-body></link></p>
 
-<h1 id="Ajax-TheServlet">The Servlet</h1>
+<h1>The Servlet</h1>
 
 <p>The AMQ AjaxServlet needs to be installed in your webapplications to support JMS over Ajax:</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[
+<structured-macro ac:macro-id="cf8a34e3-339b-4d2e-abcd-14a0b1ec263c" ac:name="code" ac:schema-version="1"><plain-text-body>
 ...
   &lt;servlet&gt;
     &lt;servlet-name&gt;AjaxServlet&lt;/servlet-name&gt;
@@ -21,110 +20,99 @@
     &lt;servlet-name&gt;AjaxServlet&lt;/servlet-name&gt;
     &lt;url-pattern&gt;/amq/*&lt;/url-pattern&gt;
   &lt;/servlet-mapping&gt;
-]]></script>
-</div></div>
+</plain-text-body></structured-macro>
 <p>The servlet both serves the required js files and handles the JMS requests and responses.</p>
 
-<h1 id="Ajax-JavascriptAPI">Javascript API</h1>
+<h1>Javascript API</h1>
 
-<p>The ajax featues of amq are provided on the client side by the <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web-demo/src/main/webapp/js/amq.js">amq.js</a> script.  Beginning with ActiveMQ 5.4, this script utilizes one of three different adapters to support ajax communication with the server.  Current <a shape="rect" class="external-link" href="http://jquery.org" rel="nofollow">jQuery</a>, <a shape="rect" class="external-link" href="http://prototypejs.org" rel="nofollow">Prototype</a>, and <a shape="rect" class="external-link" href="http://www.dojotoolkit.org" rel="nofollow">Dojo</a> are supported, and recent versions of all three libraries are shipped with ActiveMQ.</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;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.4.2.min.js&quot;&gt;&lt;/script&gt;
-&lt;script type=&quot;text/javascript&quot; src=&quot;js/amq_jquery_adapter.js&quot;&gt;&lt;/script&gt;
-&lt;script type=&quot;text/javascript&quot; src=&quot;js/amq.js&quot;&gt;&lt;/script&gt;
-&lt;script type=&quot;text/javascript&quot;&gt;
+<p>The ajax featues of amq are provided on the client side by the <a shape="rect" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web-demo/src/main/webapp/js/amq.js">amq.js</a> script.  Beginning with ActiveMQ 5.4, this script utilizes one of three different adapters to support ajax communication with the server.  Current <a shape="rect" href="http://jquery.org">jQuery</a>, <a shape="rect" href="http://prototypejs.org">Prototype</a>, and <a shape="rect" href="http://www.dojotoolkit.org">Dojo</a> are supported, and recent versions of all three libraries are shipped with ActiveMQ.</p>
+<structured-macro ac:macro-id="ea161b97-6cb1-43f7-a745-306923234dd2" ac:name="code" ac:schema-version="1"><plain-text-body>
+&lt;script type="text/javascript" src="js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
+&lt;script type="text/javascript" src="js/amq_jquery_adapter.js"&gt;&lt;/script&gt;
+&lt;script type="text/javascript" src="js/amq.js"&gt;&lt;/script&gt;
+&lt;script type="text/javascript"&gt;
   var amq = org.activemq.Amq;
   amq.init({ 
-    uri: &#39;amq&#39;, 
+    uri: 'amq', 
     logging: true,
     timeout: 20
   });
 &lt;/script&gt;
-]]></script>
-</div></div>
+</plain-text-body></structured-macro>
 <p>Including these scripts results in the creation of a javascript object called <code>amq</code>, which provides the API to send messages and to subscribe to channels and topics.</p>
 
-<h2 id="Ajax-Sendingamessage">Sending a message</h2>
+<h2>Sending a message</h2>
 
 <p>All that is required to send a JMS message from the javascript client, is to call the method:</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[
+<structured-macro ac:macro-id="8b2d1f60-54ee-4a0f-bc71-dd9306c9cf82" ac:name="code" ac:schema-version="1"><plain-text-body>
 amq.sendMessage(myDestination,myMessage);
-]]></script>
-</div></div>
+</plain-text-body></structured-macro>
 <p>where <code>myDestination</code> is the URL string address of the destination (e.g. "topic://MY.NAME"  or "channel://MY.NAME") and <code>myMessage</code> is any well formed XML or plain text encoded as XML content.</p>
 
-<h2 id="Ajax-Receivingmessages">Receiving messages</h2>
+<h2>Receiving messages</h2>
 
-<p>To receive messages, the client must define a message handling function and register it with the <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web-demo/src/main/webapp/js/amq.js">amq</a> object. For example:</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[
+<p>To receive messages, the client must define a message handling function and register it with the <a shape="rect" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web-demo/src/main/webapp/js/amq.js">amq</a> object. For example:</p>
+<structured-macro ac:macro-id="a977b685-ac94-4ee9-847d-a46f1e798cff" ac:name="code" ac:schema-version="1"><plain-text-body>
 var myHandler =
 {
   rcvMessage: function(message)
   {
-     alert(&quot;received &quot;+message);
+     alert("received "+message);
   }
 };
 
 amq.addListener(myId,myDestination,myHandler.rcvMessage);
-]]></script>
-</div></div>
+</plain-text-body></structured-macro>
 
 <p>where <code>myId</code> is a string identifier that can be used for a later call to <code>amq.removeHandler(myId)</code> and <code>myDestination</code> is a URL string address of the destination (e.g. "topic://MY.NAME"  or "channel://MY.NAME").  When a message is received, a call back to the <code>myHandler.rcvMessage</code> function passes the message to your handling code.<br clear="none">
 The "message" is actually a text of the Text message or a String representation (<code>toString()</code>) in case of Object messages.</p>
 
-<p>Be aware that, by default, messages published via <a shape="rect" class="external-link" href="http://activemq.apache.org/stomp.html">Stomp</a> which include a <code>content-length</code> header will be converted by ActiveMQ to binary messages, and will not be visible to your web clients.  Beginning with ActiveMQ 5.4.0, you can resolve this problem by always setting the <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/AMQ-2833"><code>amq-msg-type</code> header</a> to <code>text</code> in messages which will may be consumed by web clients.</p>
+<p>Be aware that, by default, messages published via <a shape="rect" href="http://activemq.apache.org/stomp.html">Stomp</a> which include a <code>content-length</code> header will be converted by ActiveMQ to binary messages, and will not be visible to your web clients.  Beginning with ActiveMQ 5.4.0, you can resolve this problem by always setting the <a shape="rect" href="https://issues.apache.org/jira/browse/AMQ-2833"><code>amq-msg-type</code> header</a> to <code>text</code> in messages which will may be consumed by web clients.</p>
 
-<h3 id="Ajax-Selectorsupport">Selector support</h3>
+<h3>Selector support</h3>
 
-<p>By default, an ajax client will receive all messages on a topic or queue it is subscribed to.  In <a shape="rect" class="external-link" href="http://activemq.apache.org/activemq-541-release.html">ActiveMQ 5.4.1</a> amq.js supports <a shape="rect" class="external-link" href="http://activemq.apache.org/selectors.html">JMS selectors</a> since it is frequently useful to receive only a subset of these messages.  Selectors are supplied to an <code>amq.addListener</code> call by way of an optional 4th parameter.</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[
-amq.addListener( myId, myDestination, myHandler.rcvMessage, { selector:&quot;identifier=&#39;TEST&#39;&quot; } );
-]]></script>
-</div></div>
+<p>By default, an ajax client will receive all messages on a topic or queue it is subscribed to.  In <a shape="rect" href="http://activemq.apache.org/activemq-541-release.html">ActiveMQ 5.4.1</a> amq.js supports <a shape="rect" href="http://activemq.apache.org/selectors.html">JMS selectors</a> since it is frequently useful to receive only a subset of these messages.  Selectors are supplied to an <code>amq.addListener</code> call by way of an optional 4th parameter.</p>
+<structured-macro ac:macro-id="d3cf34a9-2e36-44e3-8610-62926d13eb50" ac:name="code" ac:schema-version="1"><plain-text-body>
+amq.addListener( myId, myDestination, myHandler.rcvMessage, { selector:"identifier='TEST'" } );
+</plain-text-body></structured-macro>
 <p>When used in this way, the Javascript client will receive only messages containing an <code>identifier</code> header set to the value <code>TEST</code>.</p>
 
-<h2 id="Ajax-UsingAMQAjaxinMultipleBrowserWindows">Using AMQ Ajax in Multiple Browser Windows</h2>
+<h2>Using AMQ Ajax in Multiple Browser Windows</h2>
 
-<p>All windows or tabs in a single browser share the same <code>JSESSIONID</code> on the ActiveMQ server.  Unless the server can distinguish listeners from multiple windows, messages which were intended for 1 window will be delivered to another one instead.  Effectively, this means that amq.js could be active in only a single browser window at any given time.  Beginning in <a shape="rect" class="external-link" href="http://activemq.apache.org/activemq-542-release.html">ActiveMQ 5.4.2</a>, this is resolved by allowing each call to <code>amq.init</code> to specify a unique <code>clientId</code>.  When this is done, multiple windows in the same browser can happily co-exist.  Each can have a separate set of message subscriptions on the broker with no interactions between them.</p>
+<p>All windows or tabs in a single browser share the same <code>JSESSIONID</code> on the ActiveMQ server.  Unless the server can distinguish listeners from multiple windows, messages which were intended for 1 window will be delivered to another one instead.  Effectively, this means that amq.js could be active in only a single browser window at any given time.  Beginning in <a shape="rect" href="http://activemq.apache.org/activemq-542-release.html">ActiveMQ 5.4.2</a>, this is resolved by allowing each call to <code>amq.init</code> to specify a unique <code>clientId</code>.  When this is done, multiple windows in the same browser can happily co-exist.  Each can have a separate set of message subscriptions on the broker with no interactions between them.</p>
 
-<p>In this example, we use the current time (at the time the web page is loaded) as a unique identifier.  This is effective as long as two browser windows are not opened within the same millisecond, and is the approach used by the example <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web-demo/src/main/webapp/chat.html">chat.html</a> included with ActiveMQ.  Other schemes to ensure the uniqueness of <code>clientId</code> can easily be devised.  Note that this <code>clientId</code> need only be unique within a single session.  (Browser windows opened in the same millisecond in separate browsers will not interact, since they are in different sessions.)</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[
+<p>In this example, we use the current time (at the time the web page is loaded) as a unique identifier.  This is effective as long as two browser windows are not opened within the same millisecond, and is the approach used by the example <a shape="rect" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web-demo/src/main/webapp/chat.html">chat.html</a> included with ActiveMQ.  Other schemes to ensure the uniqueness of <code>clientId</code> can easily be devised.  Note that this <code>clientId</code> need only be unique within a single session.  (Browser windows opened in the same millisecond in separate browsers will not interact, since they are in different sessions.)</p>
+<structured-macro ac:macro-id="0bed7262-f3fb-4f5b-8df6-0036f4e9432c" ac:name="code" ac:schema-version="1"><plain-text-body>
 org.activemq.Amq.init({
-  uri: &#39;amq&#39;, 
+  uri: 'amq', 
   logging: true, 
   timeout: 45, 
   clientId:(new Date()).getTime().toString() 
 });
-]]></script>
-</div></div>
+</plain-text-body></structured-macro>
 
 <p>Note that this <code>clientId</code> is common to all message subscriptions in a single tab or window, and is entirely different from the <code>clientId</code> which is supplied as a first argument in <code>amq.addListener</code> calls.</p>
 <ul><li>In <code>amq.init</code>, <code>clientId</code> serves to distinguish different web clients sharing the same <code>JSESSIONID</code>.  All windows in a single browser need a unique <code>clientId</code> when they call <code>amq.init</code>.</li><li>In <code>amq.addListener</code>, <code>clientId</code> is used to associate a message subscription with the callback function which should be invoked when a message is received for that subscription.  These <code>clientId</code> values are internal to each web page, and do not need to be unique across multiple windows or tabs.</li></ul>
 
 
-<h1 id="Ajax-Howitworks">How it works</h1>
+<h1>How it works</h1>
 
 
-<h2 id="Ajax-AjaxServletandMessageListenerServlet">AjaxServlet and MessageListenerServlet</h2>
+<h2>AjaxServlet and MessageListenerServlet</h2>
 
-<p>The ajax featues of amq are handled on the server side  by the <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/AjaxServlet.java">AjaxServlet</a> which extends the <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java">MessageListenerServlet</a>.  This servlet is responsible for tracking the existing clients (using a HttpSesssion) and lazily creating the AMQ and javax.jms objects required by the client to send and receive messages (eg. Destination, MessageConsumer, MessageAVailableListener). This servlet should be mapped to <code>/amq/*</code> in the web application context serving the Ajax client (this can be changed, but the client javascript <code>amq.uri</code> field needs to be updated to match.)</p>
+<p>The ajax featues of amq are handled on the server side  by the <a shape="rect" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/AjaxServlet.java">AjaxServlet</a> which extends the <a shape="rect" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java">MessageListenerServlet</a>.  This servlet is responsible for tracking the existing clients (using a HttpSesssion) and lazily creating the AMQ and javax.jms objects required by the client to send and receive messages (eg. Destination, MessageConsumer, MessageAVailableListener). This servlet should be mapped to <code>/amq/*</code> in the web application context serving the Ajax client (this can be changed, but the client javascript <code>amq.uri</code> field needs to be updated to match.)</p>
 
-<h2 id="Ajax-ClientSendingmessages">Client Sending messages</h2>
+<h2>Client Sending messages</h2>
 
-<p>When a message is sent from the client it is encoded as the content of a POST request, using the API of one of the supported connection adapters (jQuery, Prototype, or Dojo) for <a shape="rect" class="external-link" href="http://jibbering.com/2002/4/httprequest.html" rel="nofollow">XmlHttpRequest</a>.  The <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web-demo/src/main/webapp/js/amq.js">amq</a> object may combine several sendMessage calls into a single POST if it can do so without adding additional delays (see polling below).</p>
+<p>When a message is sent from the client it is encoded as the content of a POST request, using the API of one of the supported connection adapters (jQuery, Prototype, or Dojo) for <a shape="rect" href="http://jibbering.com/2002/4/httprequest.html">XmlHttpRequest</a>.  The <a shape="rect" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-web-demo/src/main/webapp/js/amq.js">amq</a> object may combine several sendMessage calls into a single POST if it can do so without adding additional delays (see polling below).</p>
 
 <p>When the MessageListenerServlet receives a POST, the messages are decoded as <code>application/x-www-form-urlencoded</code> parameters with their type (in this case <code>send</code> as opposed to <code>listen</code> or <code>unlisten</code> see below) and destination.  If a destination channel or topic do not exist, it is created. The message is sent to the destination as a TextMessage.</p>
 
-<h2 id="Ajax-Listeningformessages">Listening for messages</h2>
+<h2>Listening for messages</h2>
 
 <p>When a client registers a listener, a message subscription request is sent from the client to the server in a POST in the same way as a message, but with a type of <code>listen</code>.  When the MessageListenerServlet receives a <code>listen</code> message, it lazily creates a MessageAvailableConsumer and registers a Listener on it.</p>
 
-<h2 id="Ajax-WaitingPollformessages">Waiting Poll for messages</h2>
+<h2>Waiting Poll for messages</h2>
 
 <p>When a Listener created by the MessageListenerServlet is called to indicate that a message is available, due to the limitations of the HTTP client-server model, it is not possible to send that message directly to the ajax client.   Instead the client must perform a special type of <strong>Poll</strong> for messages.  Polling normally means periodically making a request to see if there are messages available and there is a trade off: either the poll frequency is high and excessive load is generated when the system is idle; or the frequency is low and the latency for detecting new messages is high.</p>
 
@@ -140,11 +128,11 @@ org.activemq.Amq.init({
 
 <p>The client is able to asynchronously send a message to the server by creating  (or using an existing) second connection to the server.  However, during the processing of the poll response, normal client message sending is suspended, so that all messages to be sent are queued and sent as a single POST with the poll that will be sent (with no delay) at the end of the processing. This ensures that only two connections are required between client and server (the normal for most browsers).</p>
 
-<h2 id="Ajax-ThreadlessWaiting">Threadless Waiting</h2>
+<h2>Threadless Waiting</h2>
 
-<p>The waiting poll described above is implemented using the <a shape="rect" class="external-link" href="http://docs.codehaus.org/display/JETTY/Continuations" rel="nofollow">Jetty 6 Continuations</a> mechanism.  This allows the thread associated with the request to be released during the wait, so that the container does not need to have a thread per client (which may be a large number).   If another servlet container is used, the Continuation mechanism falls back to use a wait and the thread is not released.</p>
+<p>The waiting poll described above is implemented using the <a shape="rect" href="http://docs.codehaus.org/display/JETTY/Continuations">Jetty 6 Continuations</a> mechanism.  This allows the thread associated with the request to be released during the wait, so that the container does not need to have a thread per client (which may be a large number).   If another servlet container is used, the Continuation mechanism falls back to use a wait and the thread is not released.</p>
 
-<h1 id="Ajax-ComparisontoPushlets">Comparison to Pushlets</h1>
+<h1>Comparison to Pushlets</h1>
 
 <p>Firstly we could easily add support for pushlets to ActiveMQ. However we prefer the Ajax approach for various reasons</p>
 <ul><li>using Ajax means that we use a distinct HTTP request for each send/receive which is much more friendly to web infrastructure (firewalls, proxies, caches and so forth) rather than having an infinitely-long GET.</li></ul>
@@ -165,5 +153,6 @@ org.activemq.Amq.init({
 <ul><li>pushlets assume the server knows what functions are used on the client side as the server basically writes JavaScript function calls down the scoket - it's better for us to send generic XML packets (or strings or whatever the message format is) and let the JavaScript client side be totally decoupled from the server side</li></ul>
 
 
-<ul><li>Ajax supports clean XML support allowing full XML documents to be streamed to the client for rich messages which are easy to process via standard JavaScript DOM support</li></ul></div>
+<ul><li>Ajax supports clean XML support allowing full XML documents to be streamed to the client for rich messages which are easy to process via standard JavaScript DOM support</li></ul>
+</div>
 

http://git-wip-us.apache.org/repos/asf/activemq-web/blob/7a7d976c/all-forums.xml
----------------------------------------------------------------------
diff --git a/all-forums.xml b/all-forums.xml
index 1f979a9..9496f55 100644
--- a/all-forums.xml
+++ b/all-forums.xml
@@ -1,5 +1,5 @@
-<div class="wiki-content maincontent"><p>
-<a shape="rect" id="nabblelink" href="http://www.nabble.com/ActiveMQ-f2354.html">ActiveMQ</a>
-<script src="http://www.nabble.com/embed/f2354"></script>
-</p><p></p></div>
+<div class="wiki-content maincontent"><p><structured-macro ac:macro-id="142a1ce5-7f1e-4ba8-956a-a28c34d2732a" ac:name="html" ac:schema-version="1"><plain-text-body>
+&lt;a id="nabblelink" href="http://www.nabble.com/ActiveMQ-f2354.html"&gt;ActiveMQ&lt;/a&gt;
+&lt;script src="http://www.nabble.com/embed/f2354"&gt;&lt;/script&gt;
+</plain-text-body></structured-macro></p><p></p></div>