<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-2354</id>
	<title>Nabble - ActiveMQ</title>
	<updated>2009-11-25T13:03:52Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/ActiveMQ-f2354.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ActiveMQ-f2354.html" />
	<subtitle type="html">&lt;a href=&quot;http://activemq.apache.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Apache ActiveMQ&lt;/a&gt; is the most popular and powerful open source Message Broker. Apache ActiveMQ is fast, supports many &lt;a href=&quot;http://activemq.apache.org/cross-language-clients.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Cross Language Clients and Protocols&lt;/a&gt; and many &lt;a href=&quot;http://activemq.apache.org/features.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;advanced features&lt;a target=&quot;_top&quot;&gt; while fully supporting JMS 1.1 and J2EE 1.4. Apache ActiveMQ is released under the Apache 2.0 License</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26520269</id>
	<title>[jira] Updated: (AMQ-2513) JMX bug - javax.management.InstanceNotFoundException</title>
	<published>2009-11-25T13:03:52Z</published>
	<updated>2009-11-25T13:03:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Dariusz Szablinski updated AMQ-2513:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Component/s: JMX
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; JMX bug - javax.management.InstanceNotFoundException
&lt;br&gt;&amp;gt; ----------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2513
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: JMX
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.3.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Dariusz Szablinski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.1, 5.4.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: activemq.log, activemq.xml, jconsole.jpg
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; How to reproduce:
&lt;br&gt;&amp;gt; 1) start broker
&lt;br&gt;&amp;gt; 2) start sending/receiving messages to/from a queue
&lt;br&gt;&amp;gt; 3) the queue will show up in MBeans tree
&lt;br&gt;&amp;gt; 4) kill the broker (e.g. end process on windows)
&lt;br&gt;&amp;gt; 5) stat broker again
&lt;br&gt;&amp;gt; 6) you can find your queue in Broker-&amp;gt;Queues attribute, but not as a separate node on MBeans tree (see screenshot)
&lt;br&gt;&amp;gt; 7) (optional) start sending/receiving messages to/from a queue
&lt;br&gt;&amp;gt; 8) open web console. following exception will be thrown:
&lt;br&gt;&amp;gt; 2009-11-25 21:47:45,525 | ERROR | /admin/queues.jsp;jsessionid=yjy1i2uuahpk | org.mortbay.log | btpool0-1
&lt;br&gt;&amp;gt; javax.el.ELException: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;gt; 	at javax.el.BeanELResolver.getValue(BeanELResolver.java:266)
&lt;br&gt;&amp;gt; 	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
&lt;br&gt;&amp;gt; 	at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
&lt;br&gt;&amp;gt; 	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:984)
&lt;br&gt;&amp;gt; 	at org.apache.jsp.queues_jsp._jspx_meth_c_forEach_0(org.apache.jsp.queues_jsp:141)
&lt;br&gt;&amp;gt; 	at org.apache.jsp.queues_jsp._jspService(org.apache.jsp.queues_jsp:101)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
&lt;br&gt;&amp;gt; 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364)
&lt;br&gt;&amp;gt; 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
&lt;br&gt;&amp;gt; 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
&lt;br&gt;&amp;gt; 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:43)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:81)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
&lt;br&gt;&amp;gt; 	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.Server.handle(Server.java:324)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
&lt;br&gt;&amp;gt; 	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
&lt;br&gt;&amp;gt; 	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
&lt;br&gt;&amp;gt; Caused by: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;gt; 	at $Proxy4.getName(Unknown Source)
&lt;br&gt;&amp;gt; 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&lt;br&gt;&amp;gt; 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&lt;br&gt;&amp;gt; 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&lt;br&gt;&amp;gt; 	at java.lang.reflect.Method.invoke(Method.java:597)
&lt;br&gt;&amp;gt; 	at javax.el.BeanELResolver.getValue(BeanELResolver.java:261)
&lt;br&gt;&amp;gt; 	... 39 more
&lt;br&gt;&amp;gt; Caused by: javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=dee.q
&lt;br&gt;&amp;gt; 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
&lt;br&gt;&amp;gt; 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662)
&lt;br&gt;&amp;gt; 	at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638)
&lt;br&gt;&amp;gt; 	at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263)
&lt;br&gt;&amp;gt; 	... 45 more
&lt;br&gt;&amp;gt; I'm using latest 5.3.1-SNAPSHOT
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2513%29-JMX-bug---javax.management.InstanceNotFoundException-tp26520199p26520269.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520270</id>
	<title>[jira] Updated: (AMQ-2513) JMX bug - javax.management.InstanceNotFoundException</title>
	<published>2009-11-25T13:03:52Z</published>
	<updated>2009-11-25T13:03:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Dariusz Szablinski updated AMQ-2513:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: activemq.xml
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; JMX bug - javax.management.InstanceNotFoundException
&lt;br&gt;&amp;gt; ----------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2513
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: JMX
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.3.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Dariusz Szablinski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.1, 5.4.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: activemq.log, activemq.xml, jconsole.jpg
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; How to reproduce:
&lt;br&gt;&amp;gt; 1) start broker
&lt;br&gt;&amp;gt; 2) start sending/receiving messages to/from a queue
&lt;br&gt;&amp;gt; 3) the queue will show up in MBeans tree
&lt;br&gt;&amp;gt; 4) kill the broker (e.g. end process on windows)
&lt;br&gt;&amp;gt; 5) stat broker again
&lt;br&gt;&amp;gt; 6) you can find your queue in Broker-&amp;gt;Queues attribute, but not as a separate node on MBeans tree (see screenshot)
&lt;br&gt;&amp;gt; 7) (optional) start sending/receiving messages to/from a queue
&lt;br&gt;&amp;gt; 8) open web console. following exception will be thrown:
&lt;br&gt;&amp;gt; 2009-11-25 21:47:45,525 | ERROR | /admin/queues.jsp;jsessionid=yjy1i2uuahpk | org.mortbay.log | btpool0-1
&lt;br&gt;&amp;gt; javax.el.ELException: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;gt; 	at javax.el.BeanELResolver.getValue(BeanELResolver.java:266)
&lt;br&gt;&amp;gt; 	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
&lt;br&gt;&amp;gt; 	at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
&lt;br&gt;&amp;gt; 	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:984)
&lt;br&gt;&amp;gt; 	at org.apache.jsp.queues_jsp._jspx_meth_c_forEach_0(org.apache.jsp.queues_jsp:141)
&lt;br&gt;&amp;gt; 	at org.apache.jsp.queues_jsp._jspService(org.apache.jsp.queues_jsp:101)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
&lt;br&gt;&amp;gt; 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364)
&lt;br&gt;&amp;gt; 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
&lt;br&gt;&amp;gt; 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
&lt;br&gt;&amp;gt; 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:43)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:81)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
&lt;br&gt;&amp;gt; 	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.Server.handle(Server.java:324)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
&lt;br&gt;&amp;gt; 	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
&lt;br&gt;&amp;gt; 	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
&lt;br&gt;&amp;gt; Caused by: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;gt; 	at $Proxy4.getName(Unknown Source)
&lt;br&gt;&amp;gt; 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&lt;br&gt;&amp;gt; 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&lt;br&gt;&amp;gt; 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&lt;br&gt;&amp;gt; 	at java.lang.reflect.Method.invoke(Method.java:597)
&lt;br&gt;&amp;gt; 	at javax.el.BeanELResolver.getValue(BeanELResolver.java:261)
&lt;br&gt;&amp;gt; 	... 39 more
&lt;br&gt;&amp;gt; Caused by: javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=dee.q
&lt;br&gt;&amp;gt; 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
&lt;br&gt;&amp;gt; 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662)
&lt;br&gt;&amp;gt; 	at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638)
&lt;br&gt;&amp;gt; 	at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263)
&lt;br&gt;&amp;gt; 	... 45 more
&lt;br&gt;&amp;gt; I'm using latest 5.3.1-SNAPSHOT
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2513%29-JMX-bug---javax.management.InstanceNotFoundException-tp26520199p26520270.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520229</id>
	<title>[jira] Updated: (AMQ-2513) JMX bug - javax.management.InstanceNotFoundException</title>
	<published>2009-11-25T13:01:52Z</published>
	<updated>2009-11-25T13:01:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Dariusz Szablinski updated AMQ-2513:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: jconsole.jpg
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; JMX bug - javax.management.InstanceNotFoundException
&lt;br&gt;&amp;gt; ----------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2513
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.3.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Dariusz Szablinski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.1, 5.4.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: activemq.log, jconsole.jpg
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; How to reproduce:
&lt;br&gt;&amp;gt; 1) start broker
&lt;br&gt;&amp;gt; 2) start sending/receiving messages to/from a queue
&lt;br&gt;&amp;gt; 3) the queue will show up in MBeans tree
&lt;br&gt;&amp;gt; 4) kill the broker (e.g. end process on windows)
&lt;br&gt;&amp;gt; 5) stat broker again
&lt;br&gt;&amp;gt; 6) you can find your queue in Broker-&amp;gt;Queues attribute, but not as a separate node on MBeans tree (see screenshot)
&lt;br&gt;&amp;gt; 7) (optional) start sending/receiving messages to/from a queue
&lt;br&gt;&amp;gt; 8) open web console. following exception will be thrown:
&lt;br&gt;&amp;gt; 2009-11-25 21:47:45,525 | ERROR | /admin/queues.jsp;jsessionid=yjy1i2uuahpk | org.mortbay.log | btpool0-1
&lt;br&gt;&amp;gt; javax.el.ELException: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;gt; 	at javax.el.BeanELResolver.getValue(BeanELResolver.java:266)
&lt;br&gt;&amp;gt; 	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
&lt;br&gt;&amp;gt; 	at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
&lt;br&gt;&amp;gt; 	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:984)
&lt;br&gt;&amp;gt; 	at org.apache.jsp.queues_jsp._jspx_meth_c_forEach_0(org.apache.jsp.queues_jsp:141)
&lt;br&gt;&amp;gt; 	at org.apache.jsp.queues_jsp._jspService(org.apache.jsp.queues_jsp:101)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
&lt;br&gt;&amp;gt; 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364)
&lt;br&gt;&amp;gt; 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
&lt;br&gt;&amp;gt; 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
&lt;br&gt;&amp;gt; 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:43)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:81)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
&lt;br&gt;&amp;gt; 	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.Server.handle(Server.java:324)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
&lt;br&gt;&amp;gt; 	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
&lt;br&gt;&amp;gt; 	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
&lt;br&gt;&amp;gt; Caused by: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;gt; 	at $Proxy4.getName(Unknown Source)
&lt;br&gt;&amp;gt; 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&lt;br&gt;&amp;gt; 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&lt;br&gt;&amp;gt; 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&lt;br&gt;&amp;gt; 	at java.lang.reflect.Method.invoke(Method.java:597)
&lt;br&gt;&amp;gt; 	at javax.el.BeanELResolver.getValue(BeanELResolver.java:261)
&lt;br&gt;&amp;gt; 	... 39 more
&lt;br&gt;&amp;gt; Caused by: javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=dee.q
&lt;br&gt;&amp;gt; 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
&lt;br&gt;&amp;gt; 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662)
&lt;br&gt;&amp;gt; 	at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638)
&lt;br&gt;&amp;gt; 	at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263)
&lt;br&gt;&amp;gt; 	... 45 more
&lt;br&gt;&amp;gt; I'm using latest 5.3.1-SNAPSHOT
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2513%29-JMX-bug---javax.management.InstanceNotFoundException-tp26520199p26520229.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520230</id>
	<title>[jira] Updated: (AMQ-2513) JMX bug - javax.management.InstanceNotFoundException</title>
	<published>2009-11-25T13:01:52Z</published>
	<updated>2009-11-25T13:01:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Dariusz Szablinski updated AMQ-2513:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: activemq.log
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; JMX bug - javax.management.InstanceNotFoundException
&lt;br&gt;&amp;gt; ----------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2513
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.3.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Dariusz Szablinski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.1, 5.4.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: activemq.log, jconsole.jpg
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; How to reproduce:
&lt;br&gt;&amp;gt; 1) start broker
&lt;br&gt;&amp;gt; 2) start sending/receiving messages to/from a queue
&lt;br&gt;&amp;gt; 3) the queue will show up in MBeans tree
&lt;br&gt;&amp;gt; 4) kill the broker (e.g. end process on windows)
&lt;br&gt;&amp;gt; 5) stat broker again
&lt;br&gt;&amp;gt; 6) you can find your queue in Broker-&amp;gt;Queues attribute, but not as a separate node on MBeans tree (see screenshot)
&lt;br&gt;&amp;gt; 7) (optional) start sending/receiving messages to/from a queue
&lt;br&gt;&amp;gt; 8) open web console. following exception will be thrown:
&lt;br&gt;&amp;gt; 2009-11-25 21:47:45,525 | ERROR | /admin/queues.jsp;jsessionid=yjy1i2uuahpk | org.mortbay.log | btpool0-1
&lt;br&gt;&amp;gt; javax.el.ELException: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;gt; 	at javax.el.BeanELResolver.getValue(BeanELResolver.java:266)
&lt;br&gt;&amp;gt; 	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
&lt;br&gt;&amp;gt; 	at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
&lt;br&gt;&amp;gt; 	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:984)
&lt;br&gt;&amp;gt; 	at org.apache.jsp.queues_jsp._jspx_meth_c_forEach_0(org.apache.jsp.queues_jsp:141)
&lt;br&gt;&amp;gt; 	at org.apache.jsp.queues_jsp._jspService(org.apache.jsp.queues_jsp:101)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
&lt;br&gt;&amp;gt; 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470)
&lt;br&gt;&amp;gt; 	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364)
&lt;br&gt;&amp;gt; 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
&lt;br&gt;&amp;gt; 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
&lt;br&gt;&amp;gt; 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:43)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:81)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
&lt;br&gt;&amp;gt; 	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.Server.handle(Server.java:324)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
&lt;br&gt;&amp;gt; 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
&lt;br&gt;&amp;gt; 	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
&lt;br&gt;&amp;gt; 	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
&lt;br&gt;&amp;gt; Caused by: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;gt; 	at $Proxy4.getName(Unknown Source)
&lt;br&gt;&amp;gt; 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&lt;br&gt;&amp;gt; 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&lt;br&gt;&amp;gt; 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&lt;br&gt;&amp;gt; 	at java.lang.reflect.Method.invoke(Method.java:597)
&lt;br&gt;&amp;gt; 	at javax.el.BeanELResolver.getValue(BeanELResolver.java:261)
&lt;br&gt;&amp;gt; 	... 39 more
&lt;br&gt;&amp;gt; Caused by: javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=dee.q
&lt;br&gt;&amp;gt; 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
&lt;br&gt;&amp;gt; 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662)
&lt;br&gt;&amp;gt; 	at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638)
&lt;br&gt;&amp;gt; 	at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263)
&lt;br&gt;&amp;gt; 	... 45 more
&lt;br&gt;&amp;gt; I'm using latest 5.3.1-SNAPSHOT
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2513%29-JMX-bug---javax.management.InstanceNotFoundException-tp26520199p26520230.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520199</id>
	<title>[jira] Created: (AMQ-2513) JMX bug - javax.management.InstanceNotFoundException</title>
	<published>2009-11-25T12:59:52Z</published>
	<updated>2009-11-25T12:59:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">JMX bug - javax.management.InstanceNotFoundException
&lt;br&gt;----------------------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: AMQ-2513
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2513&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2513&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: ActiveMQ
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; Affects Versions: 5.3.1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Dariusz Szablinski
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Fix For: 5.3.1, 5.4.0
&lt;br&gt;&lt;br&gt;&lt;br&gt;How to reproduce:
&lt;br&gt;&lt;br&gt;1) start broker
&lt;br&gt;2) start sending/receiving messages to/from a queue
&lt;br&gt;3) the queue will show up in MBeans tree
&lt;br&gt;4) kill the broker (e.g. end process on windows)
&lt;br&gt;5) stat broker again
&lt;br&gt;6) you can find your queue in Broker-&amp;gt;Queues attribute, but not as a separate node on MBeans tree (see screenshot)
&lt;br&gt;7) (optional) start sending/receiving messages to/from a queue
&lt;br&gt;8) open web console. following exception will be thrown:
&lt;br&gt;&lt;br&gt;2009-11-25 21:47:45,525 | ERROR | /admin/queues.jsp;jsessionid=yjy1i2uuahpk | org.mortbay.log | btpool0-1
&lt;br&gt;javax.el.ELException: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at javax.el.BeanELResolver.getValue(BeanELResolver.java:266)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:984)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.jsp.queues_jsp._jspx_meth_c_forEach_0(org.apache.jsp.queues_jsp:141)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.jsp.queues_jsp._jspService(org.apache.jsp.queues_jsp:101)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:43)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:81)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.Server.handle(Server.java:324)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
&lt;br&gt;Caused by: java.lang.reflect.UndeclaredThrowableException
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at $Proxy4.getName(Unknown Source)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.lang.reflect.Method.invoke(Method.java:597)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at javax.el.BeanELResolver.getValue(BeanELResolver.java:261)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ... 39 more
&lt;br&gt;Caused by: javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=dee.q
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ... 45 more
&lt;br&gt;&lt;br&gt;&lt;br&gt;I'm using latest 5.3.1-SNAPSHOT
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2513%29-JMX-bug---javax.management.InstanceNotFoundException-tp26520199p26520199.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520175</id>
	<title>[jira] Commented: (AMQ-2511) Regression: Inactivity monitor does not time out stale connections.</title>
	<published>2009-11-25T12:57:52Z</published>
	<updated>2009-11-25T12:57:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2511?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56115#action_56115&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2511?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56115#action_56115&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Hiram Chirino commented on AMQ-2511:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;fix applied to 5.4 branch in rev 884267.
&lt;br&gt;need to back port to 5.3 branch.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Regression: Inactivity monitor does not time out stale connections.
&lt;br&gt;&amp;gt; -------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2511
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2511&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2511&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Broker
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.3.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Hiram Chirino
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Hiram Chirino
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.4.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The fix @ AMQ-2088 cause a the Inactivity Monitor to regress.
&lt;br&gt;&amp;gt; Now when a socket is waiting to read the next message, or is in the middle of receiving the next message it sets a flag that disable the inactivity monitor from timing out the connection. The problem is that if the connection gets hung, then it won't time out since the flag is set.
&lt;br&gt;&amp;gt; I think a better approach would be for the wireformat to expose a counter which is incremented as data is read.
&lt;br&gt;&amp;gt; That way between inactivity check intervals the inactivity monitor can check to see if that value has changed since it's last check.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2511%29-Regression%3A-Inactivity-monitor-does-not-time-out-stale-connections.-tp26516822p26520175.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520155</id>
	<title>svn commit: r884267 - in /activemq/trunk: activemq-core/src/main/java/org/apache/activemq/openwire/ activemq-core/src/main/java/org/apache/activemq/transport/ activemq-core/src/main/java/org/apache/activemq/transport/failover/ activemq-core/src/main/ja...</title>
	<published>2009-11-25T12:56:30Z</published>
	<updated>2009-11-25T12:56:30Z</updated>
	<author>
		<name>chirino</name>
	</author>
	<content type="html">Author: chirino
&lt;br&gt;Date: Wed Nov 25 20:56:28 2009
&lt;br&gt;New Revision: 884267
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=884267&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=884267&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;Fix for AMQ-2511: &amp;nbsp;Inactivity monitor does not time out stale connections.
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/InactivityMonitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/Transport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpBufferedInputStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandChannel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramChannel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramSocket.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/ObjectStreamWireFormat.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/WireFormat.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/StubTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransport.java
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -22,7 +22,6 @@
&lt;br&gt;&amp;nbsp;import java.lang.reflect.Method;
&lt;br&gt;&amp;nbsp;import java.util.HashMap;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;-import java.util.concurrent.atomic.AtomicBoolean;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.apache.activemq.command.CommandTypes;
&lt;br&gt;&amp;nbsp;import org.apache.activemq.command.DataStructure;
&lt;br&gt;@@ -63,8 +62,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private DataByteArrayInputStream bytesIn = new DataByteArrayInputStream();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private WireFormatInfo preferedWireFormatInfo;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private AtomicBoolean receivingMessage = new AtomicBoolean(false);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public OpenWireFormat() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this(DEFAULT_VERSION);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -353,7 +350,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Object doUnmarshal(DataInput dis) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;byte dataType = dis.readByte();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receivingMessage.set(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (dataType != NULL_TYPE) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DataStreamMarshaller dsm = (DataStreamMarshaller)dataMarshallers[dataType &amp; 0xFF];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (dsm == null) {
&lt;br&gt;@@ -367,10 +363,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dsm.looseUnmarshal(this, data, dis);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receivingMessage.set(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return data;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receivingMessage.set(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -595,10 +589,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public WireFormatInfo getPreferedWireFormatInfo() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return preferedWireFormatInfo;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public boolean inReceive() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;	return receivingMessage.get();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void renegotiateWireFormat(WireFormatInfo info) throws IOException {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/InactivityMonitor.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/InactivityMonitor.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/InactivityMonitor.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/InactivityMonitor.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/InactivityMonitor.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -23,6 +23,7 @@
&lt;br&gt;&amp;nbsp;import java.util.concurrent.ThreadPoolExecutor;
&lt;br&gt;&amp;nbsp;import java.util.concurrent.TimeUnit;
&lt;br&gt;&amp;nbsp;import java.util.concurrent.atomic.AtomicBoolean;
&lt;br&gt;+import java.util.concurrent.atomic.AtomicInteger;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.apache.activemq.command.KeepAliveInfo;
&lt;br&gt;&amp;nbsp;import org.apache.activemq.command.WireFormatInfo;
&lt;br&gt;@@ -56,6 +57,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final AtomicBoolean commandReceived = new AtomicBoolean(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final AtomicBoolean inReceive = new AtomicBoolean(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final AtomicInteger lastReceiveCounter = new AtomicInteger(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SchedulerTimerTask writeCheckerTask;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SchedulerTimerTask readCheckerTask;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;@@ -153,7 +156,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;final void readCheck() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (inReceive.get() || wireFormat.inReceive()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int currentCounter = next.getReceiveCounter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int previousCounter = lastReceiveCounter.getAndSet(currentCounter);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (inReceive.get() || currentCounter!=previousCounter ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isTraceEnabled()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.trace(&amp;quot;A receive is in progress&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/Transport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/Transport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/Transport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/Transport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/Transport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -154,4 +154,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void reconnect(URI uri) throws IOException;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Returns a counter which gets incremented as data is read from the transport.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * It should only be used to determine if there is progress being made in reading the next command from the transport. &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * The value may wrap into the negative numbers. 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return a counter which gets incremented as data is read from the transport.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int getReceiveCounter(); &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -137,4 +137,8 @@
&lt;br&gt;&amp;nbsp;	public void reconnect(URI uri) throws IOException {
&lt;br&gt;&amp;nbsp;		next.reconnect(uri);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.getReceiveCounter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -868,4 +868,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void reconnect(URI uri) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	add(new URI[] {uri});
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Transport transport = connectedTransport.get();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( transport == null ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return transport.getReceiveCounter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -586,4 +586,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isConnected() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return connected;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int rc = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (reconnectMutex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (FanoutTransportHandler th : transports) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (th.transport != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rc += th.transport.getReceiveCounter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return rc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -151,4 +151,8 @@
&lt;br&gt;&amp;nbsp;	public void reconnect(URI uri) throws IOException {
&lt;br&gt;&amp;nbsp;		getNext().reconnect(uri);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return getNext().getReceiveCounter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -202,11 +202,4 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.version = version;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public boolean inReceive() {
&lt;br&gt;-		//TODO implement the inactivity monitor
&lt;br&gt;-		return false;
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpBufferedInputStream.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpBufferedInputStream.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpBufferedInputStream.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpBufferedInputStream.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpBufferedInputStream.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -43,7 +43,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;internalBuffer = new byte[size];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private void fill() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected void fill() throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;byte[] buffer = internalBuffer;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position = 0;
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -118,6 +118,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Boolean keepAlive;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Boolean tcpNoDelay;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Thread runnerThread;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private volatile int receiveCounter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Connect to a remote Node - e.g. a Broker
&lt;br&gt;@@ -504,7 +505,28 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected void initializeStreams() throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TcpBufferedInputStream buffIn = new TcpBufferedInputStream(socket.getInputStream(), ioBufferSize);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TcpBufferedInputStream buffIn = new TcpBufferedInputStream(socket.getInputStream(), ioBufferSize) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public int read() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return super.read();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public int read(byte[] b, int off, int len) throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return super.read(b, off, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public long skip(long n) throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return super.skip(n);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected void fill() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super.fill();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.dataIn = new DataInputStream(buffIn);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffOut = new TcpBufferedOutputStream(socket.getOutputStream(), ioBufferSize);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.dataOut = new DataOutputStream(buffOut);
&lt;br&gt;@@ -551,4 +573,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return receiveCounter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandChannel.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandChannel.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandChannel.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandChannel.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandChannel.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -50,4 +50,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void setReplayAddress(SocketAddress address);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void setReplayBuffer(ReplayBuffer replayBuffer);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramChannel.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramChannel.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramChannel.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramChannel.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramChannel.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -54,6 +54,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// writing
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Object writeLock = new Object();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int defaultMarshalBufferSize = 64 * 1024;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private volatile int receiveCounter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public CommandDatagramChannel(UdpTransport transport, OpenWireFormat wireFormat, int datagramSize, SocketAddress targetAddress, DatagramHeaderMarshaller headerMarshaller,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DatagramChannel channel, ByteBufferPool bufferPool) {
&lt;br&gt;@@ -85,6 +86,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (readBuffer.limit() == 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from = headerMarshaller.createEndpoint(readBuffer, address);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int remaining = readBuffer.remaining();
&lt;br&gt;@@ -252,4 +255,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return receiveCounter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramSocket.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramSocket.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramSocket.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramSocket.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/CommandDatagramSocket.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -48,6 +48,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Object readLock = new Object();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Object writeLock = new Object();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private volatile int receiveCounter;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public CommandDatagramSocket(UdpTransport transport, OpenWireFormat wireFormat, int datagramSize, SocketAddress targetAddress, DatagramHeaderMarshaller headerMarshaller,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DatagramSocket channel) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(transport, wireFormat, datagramSize, targetAddress, headerMarshaller);
&lt;br&gt;@@ -70,8 +72,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// TODO could use a DataInput implementation that talks direct
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// to the byte[] to avoid object allocation
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DataInputStream dataIn = new DataInputStream(new ByteArrayInputStream(datagram.getData()));
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DataInputStream dataIn = new DataInputStream(new ByteArrayInputStream(datagram.getData(), 0, datagram.getLength()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from = headerMarshaller.createEndpoint(datagram, dataIn);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;answer = (Command)wireFormat.unmarshal(dataIn);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;@@ -232,4 +235,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected ByteArrayOutputStream createByteArrayOutputStream() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ByteArrayOutputStream(datagramSize);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return receiveCounter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -462,4 +462,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (commandChannel == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return commandChannel.getReceiveCounter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -60,6 +60,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final Object lazyInitMutext = new Object();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final Valve enqueueValve = new Valve(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final AtomicBoolean stopping = new AtomicBoolean();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private volatile int receiveCounter;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public VMTransport(URI location) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.location = location;
&lt;br&gt;@@ -110,6 +111,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( command == DISCONNECT ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;transportListener.onException(new TransportDisposedIOException(&amp;quot;Peer (&amp;quot; + peer.toString() + &amp;quot;) disposed.&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;peer.receiveCounter++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;transportListener.onCommand(command);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -124,6 +126,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (messageQueue != null &amp;&amp; !async) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object command;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while ((command = messageQueue.poll()) != null &amp;&amp; !stopping.get() ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;transportListener.onCommand(command);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -341,4 +344,8 @@
&lt;br&gt;&amp;nbsp;	public void reconnect(URI uri) throws IOException {
&lt;br&gt;&amp;nbsp;		throw new IOException(&amp;quot;Not supported&amp;quot;);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return receiveCounter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/ObjectStreamWireFormat.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/ObjectStreamWireFormat.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/ObjectStreamWireFormat.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/ObjectStreamWireFormat.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/ObjectStreamWireFormat.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -75,11 +75,4 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public boolean inReceive() {
&lt;br&gt;-		// TODO implement the inactivity monitor
&lt;br&gt;-		return false;
&lt;br&gt;-	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/WireFormat.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/WireFormat.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/WireFormat.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/WireFormat.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/wireformat/WireFormat.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -61,9 +61,4 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int getVersion();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @return true if message is being received
&lt;br&gt;- &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;boolean inReceive();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/StubTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/StubTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/StubTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/StubTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/StubTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -29,6 +29,7 @@
&lt;br&gt;&amp;nbsp;public class StubTransport extends TransportSupport {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Queue&amp;lt;Object&amp;gt; queue = new ConcurrentLinkedQueue&amp;lt;Object&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private volatile int receiveCounter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected void doStop(ServiceStopper stopper) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -37,6 +38,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void oneway(Object command) throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;queue.add(command);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -48,4 +50,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return receiveCounter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -64,5 +64,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected void doStop(ServiceStopper stopper) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -58,6 +58,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final String clientID = CLIENT_ID_GENERATOR.generateId();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean trace;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private GetMethod httpMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private volatile int receiveCounter;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public HttpClientTransport(TextWireFormat wireFormat, URI remoteUrl) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(wireFormat, remoteUrl);
&lt;br&gt;@@ -135,6 +136,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DataInputStream stream = new DataInputStream(httpMethod.getResponseBodyAsStream());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object command = (Object)getTextWireFormat().unmarshal(stream);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (command == null) {
&lt;br&gt;@@ -221,4 +223,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.trace = trace;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return receiveCounter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransport.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransport.java?rev=884267&amp;r1=884266&amp;r2=884267&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransport.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransport.java Wed Nov 25 20:56:28 2009
&lt;br&gt;@@ -47,7 +47,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private HttpURLConnection receiveConnection;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private URL url;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private String clientID;
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private volatile int receiveCounter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// private String sessionID;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public HttpTransport(TextWireFormat wireFormat, URI remoteUrl) throws MalformedURLException {
&lt;br&gt;@@ -102,6 +103,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// checkSession(connection);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Create a String for the UTF content
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;receiveCounter++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = connection.getInputStream();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ByteArrayOutputStream baos = new ByteArrayOutputStream(connection.getContentLength() &amp;gt; 0 ? connection.getContentLength() : 1024);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int c = 0;
&lt;br&gt;@@ -228,4 +230,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getReceiveCounter() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return receiveCounter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Commits-f23834.html&quot; embed=&quot;fixTarget[23834]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Commits&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r884267---in--activemq-trunk%3A-activemq-core-src-main-java-org-apache-activemq-openwire--activemq-core-src-main-java-org-apache-activemq-transport--activemq-core-src-main-java-org-apache-activemq-transport-failover--activemq-core-src-main-ja...-tp26520155p26520155.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26519840</id>
	<title>[jira] Updated: (AMQ-2512) &quot;Failed to page in more queue messages&quot;</title>
	<published>2009-11-25T12:33:52Z</published>
	<updated>2009-11-25T12:33:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Dariusz Szablinski updated AMQ-2512:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: activemq.xml
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;quot;Failed to page in more queue messages&amp;quot;
&lt;br&gt;&amp;gt; ---------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2512
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2512&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2512&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.3.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Dariusz Szablinski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.1, 5.4.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: activemq.log, activemq.xml, jconsole.jpg
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Following exception occurs quite often at the moment when cursor percent usage is over 100% and suddenly drops down below 100%:
&lt;br&gt;&amp;gt; 2009-11-25 21:16:00,287 | INFO &amp;nbsp;| Slow KahaDB access: cleanup took 547 | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Journal Checkpoint Worker
&lt;br&gt;&amp;gt; 2009-11-25 21:16:27,832 | INFO &amp;nbsp;| Slow KahaDB access: Journal append took: 0 ms, Index update took 891 ms | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Transport: tcp:///192.168.1.4:57697
&lt;br&gt;&amp;gt; 2009-11-25 21:16:30,324 | INFO &amp;nbsp;| Slow KahaDB access: Journal append took: 0 ms, Index update took 1172 ms | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Transport: tcp:///192.168.1.4:57697
&lt;br&gt;&amp;gt; 2009-11-25 21:16:31,283 | ERROR | Failed to page in more queue messages &amp;nbsp;| org.apache.activemq.broker.region.Queue | Queue:dee.q
&lt;br&gt;&amp;gt; java.lang.NullPointerException
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeIndex.loadNode(BTreeIndex.java:260)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode$BTreeIterator.findNextPage(BTreeNode.java:103)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode$BTreeIterator.hasNext(BTreeNode.java:120)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$2.execute(KahaDBStore.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$2.execute(KahaDBStore.java:190)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.page.Transaction.execute(Transaction.java:751)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.getMessageCount(KahaDBStore.java:189)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.QueueStorePrefetch.getStoreSize(QueueStorePrefetch.java:63)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.remove(AbstractStoreCursor.java:189)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.StoreQueueCursor.remove(StoreQueueCursor.java:141)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.doPageIn(Queue.java:1370)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.pageInMessages(Queue.java:1505)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.iterate(Queue.java:1176)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:98)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
&lt;br&gt;&amp;gt; Additional side effect is that broker stops dispatching messages out of the queue (see queue size and consumer count on screenshot from jconsole)
&lt;br&gt;&amp;gt; Sometimes this exception is also followed by:
&lt;br&gt;&amp;gt; 2009-11-25 20:45:00,783 | WARN &amp;nbsp;| Async error occurred: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.kahadb.journal.Location | org.apache.activemq.broker.TransportConnection.Service | ActiveMQ Transport: tcp:///192.168.1.4:57516
&lt;br&gt;&amp;gt; java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.kahadb.journal.Location
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.journal.Location.compareTo(Location.java:29)
&lt;br&gt;&amp;gt; 	at java.util.Arrays.binarySearch0(Arrays.java:2001)
&lt;br&gt;&amp;gt; 	at java.util.Arrays.binarySearch(Arrays.java:1943)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:234)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:240)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:240)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeIndex.remove(BTreeIndex.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.updateIndex(MessageDatabase.java:873)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.access$700(MessageDatabase.java:82)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase$13.execute(MessageDatabase.java:757)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.page.Transaction.execute(Transaction.java:728)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.process(MessageDatabase.java:755)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase$11.visit(MessageDatabase.java:700)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.data.KahaRemoveMessageCommand.visit(KahaRemoveMessageCommand.java:220)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.process(MessageDatabase.java:692)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.store(MessageDatabase.java:644)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.removeMessage(KahaDBStore.java:153)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.acknowledge(Queue.java:602)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.removeMessage(Queue.java:1235)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.QueueSubscription.acknowledge(QueueSubscription.java:60)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:250)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:369)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:470)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:85)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:449)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.command.MessageAck.visit(MessageAck.java:205)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:297)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:175)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:210)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
&lt;br&gt;&amp;gt; 	at java.lang.Thread.run(Thread.java:619)
&lt;br&gt;&amp;gt; I'm using latest 5.3.1-SNAPSHOT
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2512%29-%22Failed-to-page-in-more-queue-messages%22-tp26519757p26519840.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26519809</id>
	<title>[jira] Updated: (AMQ-2512) &quot;Failed to page in more queue messages&quot;</title>
	<published>2009-11-25T12:31:52Z</published>
	<updated>2009-11-25T12:31:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Dariusz Szablinski updated AMQ-2512:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: activemq.log
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;quot;Failed to page in more queue messages&amp;quot;
&lt;br&gt;&amp;gt; ---------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2512
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2512&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2512&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.3.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Dariusz Szablinski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.1, 5.4.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: activemq.log, jconsole.jpg
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Following exception occurs quite often at the moment when cursor percent usage is over 100% and suddenly drops down below 100%:
&lt;br&gt;&amp;gt; 2009-11-25 21:16:00,287 | INFO &amp;nbsp;| Slow KahaDB access: cleanup took 547 | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Journal Checkpoint Worker
&lt;br&gt;&amp;gt; 2009-11-25 21:16:27,832 | INFO &amp;nbsp;| Slow KahaDB access: Journal append took: 0 ms, Index update took 891 ms | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Transport: tcp:///192.168.1.4:57697
&lt;br&gt;&amp;gt; 2009-11-25 21:16:30,324 | INFO &amp;nbsp;| Slow KahaDB access: Journal append took: 0 ms, Index update took 1172 ms | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Transport: tcp:///192.168.1.4:57697
&lt;br&gt;&amp;gt; 2009-11-25 21:16:31,283 | ERROR | Failed to page in more queue messages &amp;nbsp;| org.apache.activemq.broker.region.Queue | Queue:dee.q
&lt;br&gt;&amp;gt; java.lang.NullPointerException
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeIndex.loadNode(BTreeIndex.java:260)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode$BTreeIterator.findNextPage(BTreeNode.java:103)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode$BTreeIterator.hasNext(BTreeNode.java:120)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$2.execute(KahaDBStore.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$2.execute(KahaDBStore.java:190)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.page.Transaction.execute(Transaction.java:751)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.getMessageCount(KahaDBStore.java:189)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.QueueStorePrefetch.getStoreSize(QueueStorePrefetch.java:63)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.remove(AbstractStoreCursor.java:189)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.StoreQueueCursor.remove(StoreQueueCursor.java:141)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.doPageIn(Queue.java:1370)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.pageInMessages(Queue.java:1505)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.iterate(Queue.java:1176)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:98)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
&lt;br&gt;&amp;gt; Additional side effect is that broker stops dispatching messages out of the queue (see queue size and consumer count on screenshot from jconsole)
&lt;br&gt;&amp;gt; Sometimes this exception is also followed by:
&lt;br&gt;&amp;gt; 2009-11-25 20:45:00,783 | WARN &amp;nbsp;| Async error occurred: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.kahadb.journal.Location | org.apache.activemq.broker.TransportConnection.Service | ActiveMQ Transport: tcp:///192.168.1.4:57516
&lt;br&gt;&amp;gt; java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.kahadb.journal.Location
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.journal.Location.compareTo(Location.java:29)
&lt;br&gt;&amp;gt; 	at java.util.Arrays.binarySearch0(Arrays.java:2001)
&lt;br&gt;&amp;gt; 	at java.util.Arrays.binarySearch(Arrays.java:1943)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:234)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:240)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:240)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeIndex.remove(BTreeIndex.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.updateIndex(MessageDatabase.java:873)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.access$700(MessageDatabase.java:82)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase$13.execute(MessageDatabase.java:757)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.page.Transaction.execute(Transaction.java:728)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.process(MessageDatabase.java:755)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase$11.visit(MessageDatabase.java:700)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.data.KahaRemoveMessageCommand.visit(KahaRemoveMessageCommand.java:220)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.process(MessageDatabase.java:692)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.store(MessageDatabase.java:644)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.removeMessage(KahaDBStore.java:153)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.acknowledge(Queue.java:602)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.removeMessage(Queue.java:1235)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.QueueSubscription.acknowledge(QueueSubscription.java:60)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:250)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:369)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:470)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:85)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:449)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.command.MessageAck.visit(MessageAck.java:205)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:297)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:175)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:210)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
&lt;br&gt;&amp;gt; 	at java.lang.Thread.run(Thread.java:619)
&lt;br&gt;&amp;gt; I'm using latest 5.3.1-SNAPSHOT
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2512%29-%22Failed-to-page-in-more-queue-messages%22-tp26519757p26519809.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26519783</id>
	<title>[jira] Updated: (AMQ-2512) &quot;Failed to page in more queue messages&quot;</title>
	<published>2009-11-25T12:29:52Z</published>
	<updated>2009-11-25T12:29:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Dariusz Szablinski updated AMQ-2512:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: jconsole.jpg
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;quot;Failed to page in more queue messages&amp;quot;
&lt;br&gt;&amp;gt; ---------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2512
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2512&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2512&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.3.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Dariusz Szablinski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.1, 5.4.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: jconsole.jpg
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Following exception occurs quite often at the moment when cursor percent usage is over 100% and suddenly drops down below 100%:
&lt;br&gt;&amp;gt; 2009-11-25 21:16:00,287 | INFO &amp;nbsp;| Slow KahaDB access: cleanup took 547 | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Journal Checkpoint Worker
&lt;br&gt;&amp;gt; 2009-11-25 21:16:27,832 | INFO &amp;nbsp;| Slow KahaDB access: Journal append took: 0 ms, Index update took 891 ms | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Transport: tcp:///192.168.1.4:57697
&lt;br&gt;&amp;gt; 2009-11-25 21:16:30,324 | INFO &amp;nbsp;| Slow KahaDB access: Journal append took: 0 ms, Index update took 1172 ms | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Transport: tcp:///192.168.1.4:57697
&lt;br&gt;&amp;gt; 2009-11-25 21:16:31,283 | ERROR | Failed to page in more queue messages &amp;nbsp;| org.apache.activemq.broker.region.Queue | Queue:dee.q
&lt;br&gt;&amp;gt; java.lang.NullPointerException
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeIndex.loadNode(BTreeIndex.java:260)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode$BTreeIterator.findNextPage(BTreeNode.java:103)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode$BTreeIterator.hasNext(BTreeNode.java:120)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$2.execute(KahaDBStore.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$2.execute(KahaDBStore.java:190)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.page.Transaction.execute(Transaction.java:751)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.getMessageCount(KahaDBStore.java:189)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.QueueStorePrefetch.getStoreSize(QueueStorePrefetch.java:63)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.remove(AbstractStoreCursor.java:189)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.cursors.StoreQueueCursor.remove(StoreQueueCursor.java:141)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.doPageIn(Queue.java:1370)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.pageInMessages(Queue.java:1505)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.iterate(Queue.java:1176)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:98)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
&lt;br&gt;&amp;gt; Additional side effect is that broker stops dispatching messages out of the queue (see queue size and consumer count on screenshot from jconsole)
&lt;br&gt;&amp;gt; Sometimes this exception is also followed by:
&lt;br&gt;&amp;gt; 2009-11-25 20:45:00,783 | WARN &amp;nbsp;| Async error occurred: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.kahadb.journal.Location | org.apache.activemq.broker.TransportConnection.Service | ActiveMQ Transport: tcp:///192.168.1.4:57516
&lt;br&gt;&amp;gt; java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.kahadb.journal.Location
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.journal.Location.compareTo(Location.java:29)
&lt;br&gt;&amp;gt; 	at java.util.Arrays.binarySearch0(Arrays.java:2001)
&lt;br&gt;&amp;gt; 	at java.util.Arrays.binarySearch(Arrays.java:1943)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:234)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:240)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:240)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.index.BTreeIndex.remove(BTreeIndex.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.updateIndex(MessageDatabase.java:873)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.access$700(MessageDatabase.java:82)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase$13.execute(MessageDatabase.java:757)
&lt;br&gt;&amp;gt; 	at org.apache.kahadb.page.Transaction.execute(Transaction.java:728)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.process(MessageDatabase.java:755)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase$11.visit(MessageDatabase.java:700)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.data.KahaRemoveMessageCommand.visit(KahaRemoveMessageCommand.java:220)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.process(MessageDatabase.java:692)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.MessageDatabase.store(MessageDatabase.java:644)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.removeMessage(KahaDBStore.java:153)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.acknowledge(Queue.java:602)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.Queue.removeMessage(Queue.java:1235)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.QueueSubscription.acknowledge(QueueSubscription.java:60)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:250)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:369)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:470)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:194)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:85)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:449)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.command.MessageAck.visit(MessageAck.java:205)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:297)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:175)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:210)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203)
&lt;br&gt;&amp;gt; 	at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
&lt;br&gt;&amp;gt; 	at java.lang.Thread.run(Thread.java:619)
&lt;br&gt;&amp;gt; I'm using latest 5.3.1-SNAPSHOT
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2512%29-%22Failed-to-page-in-more-queue-messages%22-tp26519757p26519783.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26519757</id>
	<title>[jira] Created: (AMQ-2512) &quot;Failed to page in more queue messages&quot;</title>
	<published>2009-11-25T12:27:52Z</published>
	<updated>2009-11-25T12:27:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&amp;quot;Failed to page in more queue messages&amp;quot;
&lt;br&gt;---------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: AMQ-2512
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2512&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2512&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: ActiveMQ
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; Affects Versions: 5.3.1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Dariusz Szablinski
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Fix For: 5.3.1, 5.4.0
&lt;br&gt;&lt;br&gt;&lt;br&gt;Following exception occurs quite often at the moment when cursor percent usage is over 100% and suddenly drops down below 100%:
&lt;br&gt;&lt;br&gt;2009-11-25 21:16:00,287 | INFO &amp;nbsp;| Slow KahaDB access: cleanup took 547 | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Journal Checkpoint Worker
&lt;br&gt;2009-11-25 21:16:27,832 | INFO &amp;nbsp;| Slow KahaDB access: Journal append took: 0 ms, Index update took 891 ms | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Transport: tcp:///192.168.1.4:57697
&lt;br&gt;2009-11-25 21:16:30,324 | INFO &amp;nbsp;| Slow KahaDB access: Journal append took: 0 ms, Index update took 1172 ms | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Transport: tcp:///192.168.1.4:57697
&lt;br&gt;2009-11-25 21:16:31,283 | ERROR | Failed to page in more queue messages &amp;nbsp;| org.apache.activemq.broker.region.Queue | Queue:dee.q
&lt;br&gt;java.lang.NullPointerException
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.index.BTreeIndex.loadNode(BTreeIndex.java:260)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.index.BTreeNode$BTreeIterator.findNextPage(BTreeNode.java:103)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.index.BTreeNode$BTreeIterator.hasNext(BTreeNode.java:120)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$2.execute(KahaDBStore.java:194)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$2.execute(KahaDBStore.java:190)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.page.Transaction.execute(Transaction.java:751)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.getMessageCount(KahaDBStore.java:189)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.cursors.QueueStorePrefetch.getStoreSize(QueueStorePrefetch.java:63)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.remove(AbstractStoreCursor.java:189)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.cursors.StoreQueueCursor.remove(StoreQueueCursor.java:141)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.Queue.doPageIn(Queue.java:1370)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.Queue.pageInMessages(Queue.java:1505)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.Queue.iterate(Queue.java:1176)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:98)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
&lt;br&gt;&lt;br&gt;&lt;br&gt;Additional side effect is that broker stops dispatching messages out of the queue (see queue size and consumer count on screenshot from jconsole)
&lt;br&gt;&lt;br&gt;&lt;br&gt;Sometimes this exception is also followed by:
&lt;br&gt;&lt;br&gt;2009-11-25 20:45:00,783 | WARN &amp;nbsp;| Async error occurred: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.kahadb.journal.Location | org.apache.activemq.broker.TransportConnection.Service | ActiveMQ Transport: tcp:///192.168.1.4:57516
&lt;br&gt;java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.kahadb.journal.Location
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.journal.Location.compareTo(Location.java:29)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.util.Arrays.binarySearch0(Arrays.java:2001)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.util.Arrays.binarySearch(Arrays.java:1943)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:234)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:240)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.index.BTreeNode.remove(BTreeNode.java:240)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.index.BTreeIndex.remove(BTreeIndex.java:194)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.MessageDatabase.updateIndex(MessageDatabase.java:873)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.MessageDatabase.access$700(MessageDatabase.java:82)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.MessageDatabase$13.execute(MessageDatabase.java:757)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.kahadb.page.Transaction.execute(Transaction.java:728)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.MessageDatabase.process(MessageDatabase.java:755)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.MessageDatabase$11.visit(MessageDatabase.java:700)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.data.KahaRemoveMessageCommand.visit(KahaRemoveMessageCommand.java:220)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.MessageDatabase.process(MessageDatabase.java:692)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.MessageDatabase.store(MessageDatabase.java:644)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.removeMessage(KahaDBStore.java:153)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.Queue.acknowledge(Queue.java:602)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.Queue.removeMessage(Queue.java:1235)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.QueueSubscription.acknowledge(QueueSubscription.java:60)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:250)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:369)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:470)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:194)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:85)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:449)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.command.MessageAck.visit(MessageAck.java:205)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:297)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:175)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:210)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.lang.Thread.run(Thread.java:619)
&lt;br&gt;&lt;br&gt;I'm using latest 5.3.1-SNAPSHOT
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2512%29-%22Failed-to-page-in-more-queue-messages%22-tp26519757p26519757.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26519716</id>
	<title>Re: Best implementation for reply-request</title>
	<published>2009-11-25T12:24:09Z</published>
	<updated>2009-11-25T12:24:09Z</updated>
	<author>
		<name>rajdavies</name>
	</author>
	<content type="html">there could well be an improvement using nio. Also - it it possible to &amp;nbsp;
&lt;br&gt;move to version 5.3 - which is generally a lot more stable.
&lt;br&gt;Btw - you didn't mention if you were having performance problems ?
&lt;br&gt;&lt;br&gt;cheers,
&lt;br&gt;&lt;br&gt;Rob
&lt;br&gt;On 25 Nov 2009, at 19:55, Andres Rangel wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Bruce thanks for your reply.
&lt;br&gt;&amp;gt; The consumers create the temporary queue only once, and they are &amp;nbsp;
&lt;br&gt;&amp;gt; cached in a pool for subsequent usage.
&lt;br&gt;&amp;gt; We are using tcp connection. If we move to nio connection, will &amp;nbsp;
&lt;br&gt;&amp;gt; there be any noticeable improvement?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -----Original Message-----
&lt;br&gt;&amp;gt; From: Bruce Snyder [mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26519716&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bruce.snyder@...&lt;/a&gt;]
&lt;br&gt;&amp;gt; Sent: Wednesday, November 25, 2009 1:45 PM
&lt;br&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26519716&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Subject: Re: Best implementation for reply-request
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Wed, Nov 25, 2009 at 10:34 AM, Andres Rangel
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26519716&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andresr@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; We have currently running apache activemq 5.2 in a network of brokers
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; It has close to 1500 producers and 1200 consumers.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; This producers have &amp;nbsp;each one a temporary queue so that will be 1500
&lt;br&gt;&amp;gt;&amp;gt; temp queues in the system.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The reply-request is implemented using temporary queues.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I would like to know if there's a performance hit by using temporary
&lt;br&gt;&amp;gt;&amp;gt; queues instead of using another option.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; What do you guys think?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; There's more overhead involved with such constant creation/destruction
&lt;br&gt;&amp;gt; of temp queues, but that's it. As long as the broker has been tuned to
&lt;br&gt;&amp;gt; scale for handling such a large number of destinations, then you
&lt;br&gt;&amp;gt; should be OK:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://activemq.apache.org/scaling-queues.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/scaling-queues.html&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Bruce
&lt;br&gt;&amp;gt; -- 
&lt;br&gt;&amp;gt; perl -e 'print unpack(&amp;quot;u30&amp;quot;,&amp;quot;D0G)U8V4\@4VYY9&amp;5R\&amp;quot;F)R=6-E+G-N&amp;gt;61E&amp;lt;D\! 
&lt;br&gt;&amp;gt; G;6%I;\&amp;quot;YC;VT*&amp;quot;
&lt;br&gt;&amp;gt; );'
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ActiveMQ in Action: &lt;a href=&quot;http://bit.ly/2je6cQ&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bit.ly/2je6cQ&lt;/a&gt;&lt;br&gt;&amp;gt; Blog: &lt;a href=&quot;http://bruceblog.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bruceblog.org/&lt;/a&gt;&lt;br&gt;&amp;gt; Twitter: &lt;a href=&quot;http://twitter.com/brucesnyder&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/brucesnyder&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Rob Davies
&lt;br&gt;&lt;a href=&quot;http://twitter.com/rajdavies&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/rajdavies&lt;/a&gt;&lt;br&gt;I work here: &lt;a href=&quot;http://fusesource.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://fusesource.com&lt;/a&gt;&lt;br&gt;My Blog: &lt;a href=&quot;http://rajdavies.blogspot.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://rajdavies.blogspot.com/&lt;/a&gt;&lt;br&gt;I'm writing this: &lt;a href=&quot;http://www.manning.com/snyder/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.manning.com/snyder/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Best-implementation-for-reply-request-tp26517070p26519716.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26519260</id>
	<title>RE: Best implementation for reply-request</title>
	<published>2009-11-25T11:55:03Z</published>
	<updated>2009-11-25T11:55:03Z</updated>
	<author>
		<name>Andres Rangel-2</name>
	</author>
	<content type="html">Bruce thanks for your reply.
&lt;br&gt;The consumers create the temporary queue only once, and they are cached in a pool for subsequent usage.
&lt;br&gt;We are using tcp connection. If we move to nio connection, will there be any noticeable improvement?
&lt;br&gt;&lt;br&gt;-----Original Message-----
&lt;br&gt;From: Bruce Snyder [mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26519260&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bruce.snyder@...&lt;/a&gt;] 
&lt;br&gt;Sent: Wednesday, November 25, 2009 1:45 PM
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26519260&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users@...&lt;/a&gt;
&lt;br&gt;Subject: Re: Best implementation for reply-request
&lt;br&gt;&lt;br&gt;On Wed, Nov 25, 2009 at 10:34 AM, Andres Rangel
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26519260&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andresr@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; We have currently running apache activemq 5.2 in a network of brokers
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It has close to 1500 producers and 1200 consumers.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This producers have  each one a temporary queue so that will be 1500
&lt;br&gt;&amp;gt; temp queues in the system.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The reply-request is implemented using temporary queues.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I would like to know if there's a performance hit by using temporary
&lt;br&gt;&amp;gt; queues instead of using another option.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; What do you guys think?
&lt;/div&gt;&lt;br&gt;There's more overhead involved with such constant creation/destruction
&lt;br&gt;of temp queues, but that's it. As long as the broker has been tuned to
&lt;br&gt;scale for handling such a large number of destinations, then you
&lt;br&gt;should be OK:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://activemq.apache.org/scaling-queues.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/scaling-queues.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;Bruce
&lt;br&gt;-- 
&lt;br&gt;perl -e 'print unpack(&amp;quot;u30&amp;quot;,&amp;quot;D0G)U8V4\@4VYY9&amp;5R\&amp;quot;F)R=6-E+G-N&amp;gt;61E&amp;lt;D\!G;6%I;\&amp;quot;YC;VT*&amp;quot;
&lt;br&gt;);'
&lt;br&gt;&lt;br&gt;ActiveMQ in Action: &lt;a href=&quot;http://bit.ly/2je6cQ&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bit.ly/2je6cQ&lt;/a&gt;&lt;br&gt;Blog: &lt;a href=&quot;http://bruceblog.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bruceblog.org/&lt;/a&gt;&lt;br&gt;Twitter: &lt;a href=&quot;http://twitter.com/brucesnyder&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/brucesnyder&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Best-implementation-for-reply-request-tp26517070p26519260.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26518949</id>
	<title>svn commit: r884234 [1/2] - in /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker: jmx/ region/ region/policy/</title>
	<published>2009-11-25T11:35:10Z</published>
	<updated>2009-11-25T11:35:10Z</updated>
	<author>
		<name>cmacnaug</name>
	</author>
	<content type="html">Author: cmacnaug
&lt;br&gt;Date: Wed Nov 25 19:35:09 2009
&lt;br&gt;New Revision: 884234
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=884234&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=884234&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;Adding a blockedProducerWarningInterval attribute to destinations to control the rate at which warnings about blocked producers are generated (otherwise the warnings can flood the log). 
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Destination.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DestinationFilter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java Wed Nov 25 19:35:09 2009
&lt;br&gt;@@ -82,11 +82,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public long getDispatchCount() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.getDestinationStatistics().getDispatched().getCount();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public long getInFlightCount() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.getDestinationStatistics().getInflight().getCount();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public long getExpiredCount() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.getDestinationStatistics().getExpired().getCount();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -220,7 +220,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OpenTypeFactory factory = OpenTypeSupport.getFactory(ActiveMQMessage.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Message[] messages = destination.browse();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CompositeType ct = factory.getCompositeType();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TabularType tt = new TabularType(&amp;quot;MessageList&amp;quot;, &amp;quot;MessageList&amp;quot;, ct, new String[] {&amp;quot;JMSMessageID&amp;quot;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TabularType tt = new TabularType(&amp;quot;MessageList&amp;quot;, &amp;quot;MessageList&amp;quot;, ct, new String[] { &amp;quot;JMSMessageID&amp;quot; });
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TabularDataSupport rc = new TabularDataSupport(tt);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageEvaluationContext ctx = new MessageEvaluationContext();
&lt;br&gt;@@ -248,16 +248,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public String sendTextMessage(String body) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return sendTextMessage(Collections.EMPTY_MAP, body);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public String sendTextMessage(Map headers, String body) throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return sendTextMessage(headers,body,null,null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return sendTextMessage(headers, body, null, null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public String sendTextMessage(String body, String user, String password) throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return sendTextMessage(Collections.EMPTY_MAP,body,user,password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return sendTextMessage(Collections.EMPTY_MAP, body, user, password);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public String sendTextMessage(Map headers, String body,String userName,String password) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String sendTextMessage(Map headers, String body, String userName, String password) throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String brokerUrl = &amp;quot;vm://&amp;quot; + broker.getBrokerName();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActiveMQDestination dest = destination.getActiveMQDestination();
&lt;br&gt;@@ -266,14 +266,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Connection connection = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connection = cf.createConnection(userName,password);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connection = cf.createConnection(userName, password);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageProducer producer = session.createProducer(dest);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActiveMQTextMessage msg = (ActiveMQTextMessage)session.createTextMessage(body);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActiveMQTextMessage msg = (ActiveMQTextMessage) session.createTextMessage(body);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (Iterator iter = headers.entrySet().iterator(); iter.hasNext();) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map.Entry entry = (Map.Entry)iter.next();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msg.setObjectProperty((String)entry.getKey(), entry.getValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map.Entry entry = (Map.Entry) iter.next();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msg.setObjectProperty((String) entry.getKey(), entry.getValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;producer.setDeliveryMode(msg.getJMSDeliveryMode());
&lt;br&gt;@@ -292,30 +292,28 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxAuditDepth() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.getMaxAuditDepth();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getMaxProducersToAudit() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.getMaxProducersToAudit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isEnableAudit() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.isEnableAudit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setEnableAudit(boolean enableAudit) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setEnableAudit(enableAudit);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setMaxAuditDepth(int maxAuditDepth) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setMaxAuditDepth(maxAuditDepth);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public int getMaxProducersToAudit() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return destination.getMaxProducersToAudit();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; }
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public boolean isEnableAudit() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return destination.isEnableAudit();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; }
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public void setEnableAudit(boolean enableAudit) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; destination.setEnableAudit(enableAudit);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; }
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public void setMaxAuditDepth(int maxAuditDepth) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; destination.setMaxAuditDepth(maxAuditDepth);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; }
&lt;br&gt;- 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public void setMaxProducersToAudit(int maxProducersToAudit) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; destination.setMaxProducersToAudit(maxProducersToAudit);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setMaxProducersToAudit(int maxProducersToAudit) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setMaxProducersToAudit(maxProducersToAudit);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public float getMemoryUsagePortion() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.getMemoryUsage().getUsagePortion();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -325,31 +323,52 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isProducerFlowControl() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; return destination.isProducerFlowControl();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.isProducerFlowControl();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMemoryUsagePortion(float value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.getMemoryUsage().setUsagePortion(value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setProducerFlowControl(boolean producerFlowControl) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setProducerFlowControl(producerFlowControl); &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setProducerFlowControl(producerFlowControl);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set's the interval at which warnings about producers being blocked by
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * resource usage will be triggered. Values of 0 or less will disable
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * warnings
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param blockedProducerWarningInterval the interval at which warning about
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;blocked producers will be triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBlockedProducerWarningInterval(long blockedProducerWarningInterval) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setBlockedProducerWarningInterval(blockedProducerWarningInterval);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return the interval at which warning about blocked producers will be
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public long getBlockedProducerWarningInterval() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.getBlockedProducerWarningInterval();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxPageSize() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.getMaxPageSize();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxPageSize(int pageSize) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setMaxPageSize(pageSize);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isUseCache() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination.isUseCache();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setUseCache(boolean value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setUseCache(value); &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setUseCache(value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public ObjectName[] getSubscriptions() throws IOException, MalformedObjectNameException {
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java Wed Nov 25 19:35:09 2009
&lt;br&gt;@@ -248,12 +248,31 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@MBeanInfo(&amp;quot;Producers are flow controlled&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;boolean isProducerFlowControl();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param producerFlowControl the producerFlowControl to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setProducerFlowControl(@MBeanInfo(&amp;quot;producerFlowControl&amp;quot;) boolean producerFlowControl);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set's the interval at which warnings about producers being blocked by
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * resource usage will be triggered. Values of 0 or less will disable
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * warnings
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param blockedProducerWarningInterval the interval at which warning about
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;blocked producers will be triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBlockedProducerWarningInterval(@MBeanInfo(&amp;quot;blockedProducerWarningInterval&amp;quot;) &amp;nbsp;long blockedProducerWarningInterval);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return the interval at which warning about blocked producers will be
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@MBeanInfo(&amp;quot;Blocked Producer Warning Interval&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public long getBlockedProducerWarningInterval();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return the maxProducersToAudit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@MBeanInfo(&amp;quot;Maximum number of producers to audit&amp;quot;) 
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java Wed Nov 25 19:35:09 2009
&lt;br&gt;@@ -40,18 +40,21 @@
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;public abstract class BaseDestination implements Destination {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * The maximum number of messages to page in to the destination from persistent storage
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * The maximum number of messages to page in to the destination from
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * persistent storage
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public static final int MAX_PAGE_SIZE = 200;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public static final int MAX_BROWSE_PAGE_SIZE = MAX_PAGE_SIZE * 2;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public static final long EXPIRE_MESSAGE_PERIOD = 30*1000;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static final long EXPIRE_MESSAGE_PERIOD = 30 * 1000;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected final ActiveMQDestination destination;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected final Broker broker;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected final MessageStore store;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected SystemUsage systemUsage;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected MemoryUsage memoryUsage;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean producerFlowControl = true;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected boolean warnOnProducerFlowControl = true; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected boolean warnOnProducerFlowControl = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected long blockedProducerWarningInterval = DEFAULT_BLOCKED_PRODUCER_WARNING_INTERVAL;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int maxProducersToAudit = 1024;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int maxAuditDepth = 2048;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean enableAudit = true;
&lt;br&gt;@@ -82,8 +85,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param parentStats
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public BaseDestination(BrokerService brokerService, MessageStore store, ActiveMQDestination destination,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DestinationStatistics parentStats) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public BaseDestination(BrokerService brokerService, MessageStore store, ActiveMQDestination destination, DestinationStatistics parentStats) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.brokerService = brokerService;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.broker = brokerService.getBroker();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.store = store;
&lt;br&gt;@@ -118,14 +120,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param producerFlowControl
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the producerFlowControl to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param producerFlowControl the producerFlowControl to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setProducerFlowControl(boolean producerFlowControl) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.producerFlowControl = producerFlowControl;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set's the interval at which warnings about producers being blocked by
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * resource usage will be triggered. Values of 0 or less will disable
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * warnings
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param blockedProducerWarningInterval the interval at which warning about
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;blocked producers will be triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBlockedProducerWarningInterval(long blockedProducerWarningInterval) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.blockedProducerWarningInterval = blockedProducerWarningInterval;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return the interval at which warning about blocked producers will be
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public long getBlockedProducerWarningInterval() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return blockedProducerWarningInterval;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return the maxProducersToAudit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxProducersToAudit() {
&lt;br&gt;@@ -133,8 +155,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param maxProducersToAudit
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the maxProducersToAudit to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param maxProducersToAudit the maxProducersToAudit to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxProducersToAudit(int maxProducersToAudit) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.maxProducersToAudit = maxProducersToAudit;
&lt;br&gt;@@ -148,8 +169,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param maxAuditDepth
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the maxAuditDepth to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param maxAuditDepth the maxAuditDepth to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxAuditDepth(int maxAuditDepth) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.maxAuditDepth = maxAuditDepth;
&lt;br&gt;@@ -163,8 +183,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param enableAudit
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the enableAudit to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param enableAudit the enableAudit to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setEnableAudit(boolean enableAudit) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.enableAudit = enableAudit;
&lt;br&gt;@@ -199,8 +218,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final boolean isActive() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destinationStatistics.getConsumers().getCount() != 0
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|| destinationStatistics.getProducers().getCount() != 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destinationStatistics.getConsumers().getCount() != 0 || destinationStatistics.getProducers().getCount() != 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxPageSize() {
&lt;br&gt;@@ -218,13 +236,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxBrowsePageSize(int maxPageSize) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.maxBrowsePageSize = maxPageSize;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxExpirePageSize() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.maxExpirePageSize;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxExpirePageSize(int maxPageSize) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.maxExpirePageSize &amp;nbsp;= maxPageSize;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.maxExpirePageSize = maxPageSize;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setExpireMessagesPeriod(long expireMessagesPeriod) {
&lt;br&gt;@@ -234,7 +252,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public long getExpireMessagesPeriod() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return expireMessagesPeriod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isUseCache() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return useCache;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -271,8 +289,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param advisoryForSlowConsumers
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the advisoryForSlowConsumers to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param advisoryForSlowConsumers the advisoryForSlowConsumers to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setAdvisoryForSlowConsumers(boolean advisoryForSlowConsumers) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.advisoryForSlowConsumers = advisoryForSlowConsumers;
&lt;br&gt;@@ -286,8 +303,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param advisoryForDiscardingMessages
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the advisoryForDiscardingMessages to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param advisoryForDiscardingMessages the advisoryForDiscardingMessages to
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setAdvisoryForDiscardingMessages(boolean advisoryForDiscardingMessages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.advisoryForDiscardingMessages = advisoryForDiscardingMessages;
&lt;br&gt;@@ -301,8 +318,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param advisoryWhenFull
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the advisoryWhenFull to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param advisoryWhenFull the advisoryWhenFull to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setAdvisoryWhenFull(boolean advisoryWhenFull) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.advisoryWhenFull = advisoryWhenFull;
&lt;br&gt;@@ -316,8 +332,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param advisoryForDelivery
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the advisoryForDelivery to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param advisoryForDelivery the advisoryForDelivery to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setAdvisoryForDelivery(boolean advisoryForDelivery) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.advisoryForDelivery = advisoryForDelivery;
&lt;br&gt;@@ -331,8 +346,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param advisoryForConsumed
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the advisoryForConsumed to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param advisoryForConsumed the advisoryForConsumed to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setAdvisoryForConsumed(boolean advisoryForConsumed) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.advisoryForConsumed = advisoryForConsumed;
&lt;br&gt;@@ -346,13 +360,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param advisdoryForFastProducers
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the advisdoryForFastProducers to set
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param advisdoryForFastProducers the advisdoryForFastProducers to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setAdvisdoryForFastProducers(boolean advisdoryForFastProducers) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.advisdoryForFastProducers = advisdoryForFastProducers;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isSendAdvisoryIfNoConsumers() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return sendAdvisoryIfNoConsumers;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -376,14 +389,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setDeadLetterStrategy(DeadLetterStrategy deadLetterStrategy) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.deadLetterStrategy = deadLetterStrategy;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getCursorMemoryHighWaterMark() {
&lt;br&gt;-		return this.cursorMemoryHighWaterMark;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.cursorMemoryHighWaterMark;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public void setCursorMemoryHighWaterMark(int cursorMemoryHighWaterMark) {
&lt;br&gt;-		this.cursorMemoryHighWaterMark = cursorMemoryHighWaterMark;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setCursorMemoryHighWaterMark(int cursorMemoryHighWaterMark) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.cursorMemoryHighWaterMark = cursorMemoryHighWaterMark;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * called when message is consumed
&lt;br&gt;@@ -410,8 +423,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Called when a message is discarded - e.g. running low on memory This will happen only if the policy is enabled -
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * e.g. non durable topics
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Called when a message is discarded - e.g. running low on memory This will
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * happen only if the policy is enabled - e.g. non durable topics
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param messageReference
&lt;br&gt;@@ -460,19 +473,19 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void dispose(ConnectionContext context) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this.store != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	this.store.removeAllMessages(context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.store.removeAllMessages(context);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.store.dispose(context);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.destinationStatistics.setParent(null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.memoryUsage.stop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Provides a hook to allow messages with no consumer to be processed in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * some way - such as to send to a dead letter queue or something..
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected void onMessageWithNoConsumers(ConnectionContext context, Message msg) throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;	if (!msg.isPersistent()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!msg.isPersistent()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isSendAdvisoryIfNoConsumers()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// allow messages with no consumers to be dispatched to a dead
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// letter queue
&lt;br&gt;@@ -489,12 +502,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message.getOriginalTransactionId() != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message.setOriginalTransactionId(message.getTransactionId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActiveMQTopic advisoryTopic;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (destination.isQueue()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	advisoryTopic = AdvisorySupport.getNoQueueConsumersAdvisoryTopic(destination);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;advisoryTopic = AdvisorySupport.getNoQueueConsumersAdvisoryTopic(destination);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	advisoryTopic = AdvisorySupport.getNoTopicConsumersAdvisoryTopic(destination);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;advisoryTopic = AdvisorySupport.getNoTopicConsumersAdvisoryTopic(destination);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message.setDestination(advisoryTopic);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message.setTransactionId(null);
&lt;br&gt;@@ -517,8 +530,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void processDispatchNotification(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageDispatchNotification messageDispatchNotification) throws Exception {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void processDispatchNotification(MessageDispatchNotification messageDispatchNotification) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Destination.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Destination.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Destination.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Destination.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Destination.java Wed Nov 25 19:35:09 2009
&lt;br&gt;@@ -41,10 +41,12 @@
&lt;br&gt;&amp;nbsp;public interface Destination extends Service, Task {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public static final DeadLetterStrategy DEFAULT_DEAD_LETTER_STRATEGY = new SharedDeadLetterStrategy();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static final long DEFAULT_BLOCKED_PRODUCER_WARNING_INTERVAL = 30000;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void addSubscription(ConnectionContext context, Subscription sub) throws Exception;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void removeSubscription(ConnectionContext context, Subscription sub, long lastDeliveredSequenceId) throws Exception;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void addProducer(ConnectionContext context, ProducerInfo info) throws Exception;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void removeProducer(ConnectionContext context, ProducerInfo info) throws Exception;
&lt;br&gt;@@ -70,122 +72,146 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;String getName();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;MessageStore getMessageStore();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;boolean isProducerFlowControl();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void setProducerFlowControl(boolean value);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set's the interval at which warnings about producers being blocked by
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * resource usage will be triggered. Values of 0 or less will disable
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * warnings
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param blockedProducerWarningInterval the interval at which warning about
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;blocked producers will be triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBlockedProducerWarningInterval(long blockedProducerWarningInterval);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return the interval at which warning about blocked producers will be
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public long getBlockedProducerWarningInterval();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int getMaxProducersToAudit();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void setMaxProducersToAudit(int maxProducersToAudit);
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int getMaxAuditDepth();
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void setMaxAuditDepth(int maxAuditDepth);
&lt;br&gt;- &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;boolean isEnableAudit();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void setEnableAudit(boolean enableAudit);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;boolean isActive(); &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;boolean isActive();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int getMaxPageSize();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxPageSize(int maxPageSize);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxBrowsePageSize();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxBrowsePageSize(int maxPageSize);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isUseCache();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setUseCache(boolean useCache);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMinimumMessageSize();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMinimumMessageSize(int minimumMessageSize);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getCursorMemoryHighWaterMark();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public void setCursorMemoryHighWaterMark(int cursorMemoryHighWaterMark);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setCursorMemoryHighWaterMark(int cursorMemoryHighWaterMark);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * optionally called by a Subscriber - to inform the Destination its
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * ready for more messages
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * optionally called by a Subscriber - to inform the Destination its ready
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * for more messages
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void wakeup();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return true if lazyDispatch is enabled
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isLazyDispatch();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * set the lazy dispatch - default is false
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param value
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setLazyDispatch(boolean value);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Inform the Destination a message has expired
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param subs 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param subs
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param node
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;void messageExpired(ConnectionContext context, Subscription subs,MessageReference node);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void messageExpired(ConnectionContext context, Subscription subs, MessageReference node);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * called when message is consumed
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param messageReference
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; void messageConsumed(ConnectionContext context, MessageReference messageReference);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void messageConsumed(ConnectionContext context, MessageReference messageReference);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Called when message is delivered to the broker
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param messageReference
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; void messageDelivered(ConnectionContext context, MessageReference messageReference);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void messageDelivered(ConnectionContext context, MessageReference messageReference);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Called when a message is discarded - e.g. running low on memory
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * This will happen only if the policy is enabled - e.g. non durable topics
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Called when a message is discarded - e.g. running low on memory This will
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * happen only if the policy is enabled - e.g. non durable topics
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param messageReference
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; void messageDiscarded(ConnectionContext context, MessageReference messageReference);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void messageDiscarded(ConnectionContext context, MessageReference messageReference);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Called when there is a slow consumer
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param subs
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; void slowConsumer(ConnectionContext context, Subscription subs);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void slowConsumer(ConnectionContext context, Subscription subs);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Called to notify a producer is too fast
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param producerInfo
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; void fastProducer(ConnectionContext context,ProducerInfo producerInfo);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void fastProducer(ConnectionContext context, ProducerInfo producerInfo);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Called when a Usage reaches a limit
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param usage
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; void isFull(ConnectionContext context,Usage usage);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void isFull(ConnectionContext context, Usage usage);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Subscription&amp;gt; getConsumers();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * called on Queues in slave mode to allow dispatch to follow subscription choice of master
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * called on Queues in slave mode to allow dispatch to follow subscription
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * choice of master
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param messageDispatchNotification
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;void processDispatchNotification(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageDispatchNotification messageDispatchNotification) throws Exception;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void processDispatchNotification(MessageDispatchNotification messageDispatchNotification) throws Exception;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DestinationFilter.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DestinationFilter.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DestinationFilter.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DestinationFilter.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/DestinationFilter.java Wed Nov 25 19:35:09 2009
&lt;br&gt;@@ -45,8 +45,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.next = next;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void acknowledge(ConnectionContext context, Subscription sub, MessageAck ack, MessageReference node)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void acknowledge(ConnectionContext context, Subscription sub, MessageAck ack, MessageReference node) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.acknowledge(context, sub, ack, node);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -108,13 +107,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Sends a message to the given destination which may be a wildcard
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context broker context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param message message to send
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param destination possibly wildcard destination to send the message to
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception on error
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected void send(ProducerBrokerExchange context, Message message, ActiveMQDestination destination)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected void send(ProducerBrokerExchange context, Message message, ActiveMQDestination destination) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Broker broker = context.getConnectionContext().getBroker();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Set&amp;lt;Destination&amp;gt; destinations = broker.getDestinations(destination);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -130,24 +129,30 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isProducerFlowControl() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.isProducerFlowControl();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void setProducerFlowControl(boolean value){
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setProducerFlowControl(boolean value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setProducerFlowControl(value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void addProducer(ConnectionContext context, ProducerInfo info)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBlockedProducerWarningInterval(long blockedProducerWarningInterval) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setBlockedProducerWarningInterval(blockedProducerWarningInterval);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public long getBlockedProducerWarningInterval() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.getBlockedProducerWarningInterval();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void addProducer(ConnectionContext context, ProducerInfo info) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.addProducer(context, info);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void removeProducer(ConnectionContext context, ProducerInfo info)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; next.removeProducer(context, info);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void removeProducer(ConnectionContext context, ProducerInfo info) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.removeProducer(context, info);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxAuditDepth() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; return next.getMaxAuditDepth();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.getMaxAuditDepth();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxProducersToAudit() {
&lt;br&gt;@@ -157,20 +162,19 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isEnableAudit() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.isEnableAudit();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setEnableAudit(boolean enableAudit) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setEnableAudit(enableAudit);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxAuditDepth(int maxAuditDepth) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; next.setMaxAuditDepth(maxAuditDepth);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setMaxAuditDepth(maxAuditDepth);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxProducersToAudit(int maxProducersToAudit) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; next.setMaxProducersToAudit(maxProducersToAudit);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setMaxProducersToAudit(maxProducersToAudit);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isActive() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.isActive();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -189,88 +193,81 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setUseCache(boolean useCache) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setUseCache(useCache);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMinimumMessageSize() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.getMinimumMessageSize();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMinimumMessageSize(int minimumMessageSize) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setMinimumMessageSize(minimumMessageSize);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void wakeup() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.wakeup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isLazyDispatch() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; return next.isLazyDispatch();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.isLazyDispatch();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setLazyDispatch(boolean value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setLazyDispatch(value); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setLazyDispatch(value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context, PrefetchSubscription prefetchSubscription, MessageReference node) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.messageExpired(context, prefetchSubscription, node); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.messageExpired(context, prefetchSubscription, node);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public boolean iterate() {
&lt;br&gt;-		return next.iterate();
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean iterate() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.iterate();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void fastProducer(ConnectionContext context,ProducerInfo producerInfo) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; next.fastProducer(context, producerInfo); &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void fastProducer(ConnectionContext context, ProducerInfo producerInfo) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.fastProducer(context, producerInfo);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void isFull(ConnectionContext context, Usage usage) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; next.isFull(context, usage);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.isFull(context, usage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void messageConsumed(ConnectionContext context,MessageReference messageReference) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void messageConsumed(ConnectionContext context, MessageReference messageReference) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.messageConsumed(context, messageReference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void messageDelivered(ConnectionContext context,MessageReference messageReference) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void messageDelivered(ConnectionContext context, MessageReference messageReference) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.messageDelivered(context, messageReference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void messageDiscarded(ConnectionContext context,MessageReference messageReference) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void messageDiscarded(ConnectionContext context, MessageReference messageReference) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.messageDiscarded(context, messageReference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void slowConsumer(ConnectionContext context, Subscription subs) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; next.slowConsumer(context, subs);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.slowConsumer(context, subs);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context, Subscription subs,MessageReference node) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; next.messageExpired(context,subs, node); &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context, Subscription subs, MessageReference node) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.messageExpired(context, subs, node);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxBrowsePageSize() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; return next.getMaxBrowsePageSize();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.getMaxBrowsePageSize();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMaxBrowsePageSize(int maxPageSize) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setMaxBrowsePageSize(maxPageSize);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void processDispatchNotification(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageDispatchNotification messageDispatchNotification) throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.processDispatchNotification(messageDispatchNotification); &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void processDispatchNotification(MessageDispatchNotification messageDispatchNotification) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.processDispatchNotification(messageDispatchNotification);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public int getCursorMemoryHighWaterMark() {
&lt;br&gt;-		return next.getCursorMemoryHighWaterMark();
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void setCursorMemoryHighWaterMark(int cursorMemoryHighWaterMark) {
&lt;br&gt;-		next.setCursorMemoryHighWaterMark(cursorMemoryHighWaterMark);
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getCursorMemoryHighWaterMark() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return next.getCursorMemoryHighWaterMark();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setCursorMemoryHighWaterMark(int cursorMemoryHighWaterMark) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next.setCursorMemoryHighWaterMark(cursorMemoryHighWaterMark);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Commits-f23834.html&quot; embed=&quot;fixTarget[23834]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Commits&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r884234--1-2----in--activemq-trunk-activemq-core-src-main-java-org-apache-activemq-broker%3A-jmx--region--region-policy--tp26518949p26518949.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26518950</id>
	<title>svn commit: r884234 [2/2] - in /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker: jmx/ region/ region/policy/</title>
	<published>2009-11-25T11:35:10Z</published>
	<updated>2009-11-25T11:35:10Z</updated>
	<author>
		<name>cmacnaug</name>
	</author>
	<content type="html">Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java Wed Nov 25 19:35:09 2009
&lt;br&gt;@@ -75,7 +75,6 @@
&lt;br&gt;&amp;nbsp;import org.apache.commons.logging.Log;
&lt;br&gt;&amp;nbsp;import org.apache.commons.logging.LogFactory;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * The Queue is a List of MessageEntry objects that are dispatched to matching
&lt;br&gt;&amp;nbsp; * subscriptions.
&lt;br&gt;@@ -85,10 +84,10 @@
&lt;br&gt;&amp;nbsp;public class Queue extends BaseDestination implements Task, UsageListener {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected static final Log LOG = LogFactory.getLog(Queue.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected final TaskRunnerFactory taskFactory;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected TaskRunner taskRunner; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected TaskRunner taskRunner;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected final List&amp;lt;Subscription&amp;gt; consumers = new ArrayList&amp;lt;Subscription&amp;gt;(50);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected PendingMessageCursor messages;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private final LinkedHashMap&amp;lt;MessageId,QueueMessageReference&amp;gt; pagedInMessages = new LinkedHashMap&amp;lt;MessageId,QueueMessageReference&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final LinkedHashMap&amp;lt;MessageId, QueueMessageReference&amp;gt; pagedInMessages = new LinkedHashMap&amp;lt;MessageId, QueueMessageReference&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Messages that are paged in but have not yet been targeted at a subscription
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private List&amp;lt;QueueMessageReference&amp;gt; pagedInPendingDispatch = new ArrayList&amp;lt;QueueMessageReference&amp;gt;(100);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private MessageGroupMap messageGroupOwners;
&lt;br&gt;@@ -98,16 +97,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private ExecutorService executor;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected final LinkedList&amp;lt;Runnable&amp;gt; messagesWaitingForSpace = new LinkedList&amp;lt;Runnable&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final Object dispatchMutex = new Object();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private boolean useConsumerPriority=true;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private boolean strictOrderDispatch=false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private boolean useConsumerPriority = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private boolean strictOrderDispatch = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private QueueDispatchSelector dispatchSelector;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private boolean optimizedDispatch=false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private boolean optimizedDispatch = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean firstConsumer = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int timeBeforeDispatchStarts = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int consumersBeforeDispatchStarts = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private CountDownLatch consumersBeforeStartsLatch;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private AtomicLong pendingWakeups = new AtomicLong();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final Runnable sendMessagesWaitingForSpaceTask = new Runnable() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void run() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asyncWakeup();
&lt;br&gt;@@ -115,25 +114,24 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final Runnable expireMessagesTask = new Runnable() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void run() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expireMessages(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expireMessages();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final Object iteratingMutex = new Object() {};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private static final Scheduler scheduler = Scheduler.getInstance();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private static final Comparator&amp;lt;Subscription&amp;gt;orderedCompare = new Comparator&amp;lt;Subscription&amp;gt;() {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private static final Comparator&amp;lt;Subscription&amp;gt; orderedCompare = new Comparator&amp;lt;Subscription&amp;gt;() {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public int compare(Subscription s1, Subscription s2) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//We want the list sorted in descending order
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return s2.getConsumerInfo().getPriority() - s1.getConsumerInfo().getPriority();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Queue(BrokerService brokerService, final ActiveMQDestination destination, MessageStore store,DestinationStatistics parentStats,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TaskRunnerFactory taskFactory) throws Exception {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Queue(BrokerService brokerService, final ActiveMQDestination destination, MessageStore store, DestinationStatistics parentStats, TaskRunnerFactory taskFactory) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(brokerService, store, destination, parentStats);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.taskFactory=taskFactory; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.dispatchSelector=new QueueDispatchSelector(destination);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.taskFactory = taskFactory;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.dispatchSelector = new QueueDispatchSelector(destination);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public List&amp;lt;Subscription&amp;gt; getConsumers() {
&lt;br&gt;@@ -145,13 +143,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// make the queue easily visible in the debugger from its task runner threads
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;final class QueueThread extends Thread {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final Queue queue;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public QueueThread(Runnable runnable, String name,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Queue queue) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public QueueThread(Runnable runnable, String name, Queue queue) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(runnable, name);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.queue = queue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void initialize() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this.messages == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (destination.isTemporary() || broker == null || store == null) {
&lt;br&gt;@@ -168,10 +166,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.systemUsage = brokerService.getSystemUsage();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memoryUsage.setParent(systemUsage.getMemoryUsage());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.taskRunner =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;taskFactory.createTaskRunner(this, &amp;quot;Queue:&amp;quot; + destination.getPhysicalName());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.taskRunner = taskFactory.createTaskRunner(this, &amp;quot;Queue:&amp;quot; + destination.getPhysicalName());
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super.initialize();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (store != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Restore the persistent messages.
&lt;br&gt;@@ -217,12 +214,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean hasSpace() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isDuplicate(MessageId id) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int messageCount = store.getMessageCount();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getMessages().setCount(messageCount);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -230,22 +227,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Holder for subscription and pagedInMessages as a browser
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * needs access to existing messages in the queue that have
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * already been dispatched
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Holder for subscription and pagedInMessages as a browser needs access to
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * existing messages in the queue that have already been dispatched
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;class BrowserDispatch {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ArrayList&amp;lt;QueueMessageReference&amp;gt; messages;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueBrowserSubscription browser;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public BrowserDispatch(QueueBrowserSubscription browserSubscription,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Collection&amp;lt;QueueMessageReference&amp;gt; values) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages = &amp;nbsp;new ArrayList&amp;lt;QueueMessageReference&amp;gt;(values);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public BrowserDispatch(QueueBrowserSubscription browserSubscription, Collection&amp;lt;QueueMessageReference&amp;gt; values) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages = new ArrayList&amp;lt;QueueMessageReference&amp;gt;(values);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;browser = browserSubscription;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;browser.incrementQueueRef();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;void done() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;browser.decrementQueueRef();
&lt;br&gt;@@ -258,57 +253,57 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return browser;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;LinkedList&amp;lt;BrowserDispatch&amp;gt; browserDispatches = new LinkedList&amp;lt;BrowserDispatch&amp;gt;();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void addSubscription(ConnectionContext context, Subscription sub) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// synchronize with dispatch method so that no new messages are sent
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// while setting up a subscription. avoid out of order messages,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// duplicates, etc.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(dispatchMutex) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (dispatchMutex) {
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sub.add(context, this);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getConsumers().increment();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// needs to be synchronized - so no contention with dispatching
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (consumers) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	// set a flag if this is a first consumer
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	if (consumers.size() == 0) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		firstConsumer = true;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		if (consumersBeforeDispatchStarts != 0) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			consumersBeforeStartsLatch = new CountDownLatch(consumersBeforeDispatchStarts - 1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	if (consumersBeforeStartsLatch != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		consumersBeforeStartsLatch.countDown();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// set a flag if this is a first consumer
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (consumers.size() == 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;firstConsumer = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (consumersBeforeDispatchStarts != 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumersBeforeStartsLatch = new CountDownLatch(consumersBeforeDispatchStarts - 1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (consumersBeforeStartsLatch != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumersBeforeStartsLatch.countDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addToConsumerList(sub);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sub.getConsumerInfo().isExclusive()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subscription exclusiveConsumer = dispatchSelector.getExclusiveConsumer();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(exclusiveConsumer==null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;exclusiveConsumer=sub;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}else if (sub.getConsumerInfo().getPriority() &amp;gt; exclusiveConsumer.getConsumerInfo().getPriority()){
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;exclusiveConsumer=sub;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (exclusiveConsumer == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;exclusiveConsumer = sub;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (sub.getConsumerInfo().getPriority() &amp;gt; exclusiveConsumer.getConsumerInfo().getPriority()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;exclusiveConsumer = sub;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatchSelector.setExclusiveConsumer(exclusiveConsumer);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sub instanceof QueueBrowserSubscription ) { 
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sub instanceof QueueBrowserSubscription) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueBrowserSubscription browserSubscription = (QueueBrowserSubscription) sub;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// do again in iterate to ensure new messages are dispatched
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMessages(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	synchronized (pagedInMessages) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	 &amp;nbsp; &amp;nbsp;if (!pagedInMessages.isEmpty()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BrowserDispatch browserDispatch = new BrowserDispatch(browserSubscription, pagedInMessages.values());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;browserDispatches.addLast(browserDispatch);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInMessages) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!pagedInMessages.isEmpty()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BrowserDispatch browserDispatch = new BrowserDispatch(browserSubscription, pagedInMessages.values());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;browserDispatches.addLast(browserDispatch);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!(this.optimizedDispatch || isSlave())) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wakeup();
&lt;br&gt;@@ -321,30 +316,23 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void removeSubscription(ConnectionContext context, Subscription sub, long lastDeiveredSequenceId)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void removeSubscription(ConnectionContext context, Subscription sub, long lastDeiveredSequenceId) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getConsumers().decrement();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// synchronize with dispatch method so that no new messages are sent
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// while removing up a subscription.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(dispatchMutex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (dispatchMutex) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(&amp;quot;remove sub: &amp;quot; + sub + &amp;quot;, lastDeliveredSeqId: &amp;quot; + lastDeiveredSequenceId
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;, dequeues: &amp;quot; + getDestinationStatistics().getDequeues().getCount()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;, dispatched: &amp;quot; + getDestinationStatistics().getDispatched().getCount()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;, inflight: &amp;quot; + getDestinationStatistics().getInflight().getCount());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(&amp;quot;remove sub: &amp;quot; + sub + &amp;quot;, lastDeliveredSeqId: &amp;quot; + lastDeiveredSequenceId + &amp;quot;, dequeues: &amp;quot; + getDestinationStatistics().getDequeues().getCount() + &amp;quot;, dispatched: &amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ getDestinationStatistics().getDispatched().getCount() + &amp;quot;, inflight: &amp;quot; + getDestinationStatistics().getInflight().getCount());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (consumers) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeFromConsumerList(sub);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sub.getConsumerInfo().isExclusive()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subscription exclusiveConsumer = dispatchSelector
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getExclusiveConsumer();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subscription exclusiveConsumer = dispatchSelector.getExclusiveConsumer();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (exclusiveConsumer == sub) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;exclusiveConsumer = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (Subscription s : consumers) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (s.getConsumerInfo().isExclusive()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; (exclusiveConsumer == null
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|| s.getConsumerInfo().getPriority() &amp;gt; exclusiveConsumer
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getConsumerInfo().getPriority())) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (s.getConsumerInfo().isExclusive() &amp;&amp; (exclusiveConsumer == null || s.getConsumerInfo().getPriority() &amp;gt; exclusiveConsumer.getConsumerInfo().getPriority())) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;exclusiveConsumer = s;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -354,12 +342,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ConsumerId consumerId = sub.getConsumerInfo().getConsumerId();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getMessageGroupOwners().removeConsumer(consumerId);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// redeliver inflight messages
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;QueueMessageReference&amp;gt; list = new ArrayList&amp;lt;QueueMessageReference&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (MessageReference ref : sub.remove(context, this)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueMessageReference qmr = (QueueMessageReference)ref;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( qmr.getLockOwner()==sub ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueMessageReference qmr = (QueueMessageReference) ref;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (qmr.getLockOwner() == sub) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;qmr.unlock();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// only increment redelivery if it was delivered or we have no delivery information
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lastDeiveredSequenceId == 0 || qmr.getMessageId().getBrokerSequenceId() &amp;lt;= lastDeiveredSequenceId) {
&lt;br&gt;@@ -368,7 +356,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.add(qmr);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!list.isEmpty()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doDispatch(list);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -400,32 +388,33 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(memoryUsage.isFull()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (memoryUsage.isFull()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;isFull(context, memoryUsage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fastProducer(context, producerInfo);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isProducerFlowControl() &amp;&amp; context.isProducerFlowControl()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(warnOnProducerFlowControl) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (warnOnProducerFlowControl) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;warnOnProducerFlowControl = false;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(&amp;quot;Usage Manager memory limit reached on &amp;quot; +getActiveMQDestination().getQualifiedName() + &amp;quot;. Producers will be throttled to the rate at which messages are removed from this destination to prevent flooding it.&amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(&amp;quot;Usage Manager Memory Limit reached on &amp;quot; + getActiveMQDestination().getQualifiedName()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;. Producers will be throttled to the rate at which messages are removed from this destination to prevent flooding it.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (systemUsage.isSendFailIfNoSpace()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new javax.jms.ResourceAllocationException(&amp;quot;Usage Manager memory limit reached. Stopping producer (&amp;quot; + message.getProducerId() + &amp;quot;) to prevent flooding &amp;quot; +getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new javax.jms.ResourceAllocationException(&amp;quot;Usage Manager Memory Limit reached. Stopping producer (&amp;quot; + message.getProducerId() + &amp;quot;) to prevent flooding &amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; + &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// We can avoid blocking due to low usage if the producer is sending
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// a sync message or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// if it is using a producer window
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (producerInfo.getWindowSize() &amp;gt; 0 || message.isResponseRequired()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// copy the exchange state since the context will be modified while we are waiting
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// for space.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final ProducerBrokerExchange producerExchangeCopy = producerExchange.copy(); 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final ProducerBrokerExchange producerExchangeCopy = producerExchange.copy();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messagesWaitingForSpace) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messagesWaitingForSpace.add(new Runnable() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void run() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// While waiting for space to free up... the
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// message may have expired.
&lt;br&gt;@@ -436,7 +425,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doMessageSend(producerExchangeCopy, message);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sendProducerAck) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ProducerAck ack = new ProducerAck(producerInfo.getProducerId(), message.getSize());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.getConnection().dispatchAsync(ack);
&lt;br&gt;@@ -445,7 +434,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;response.setCorrelationId(message.getCommandId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.getConnection().dispatchAsync(response);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!sendProducerAck &amp;&amp; !context.isInRecoveryMode()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExceptionResponse response = new ExceptionResponse(e);
&lt;br&gt;@@ -455,7 +444,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// If the user manager is not full, then the task will not
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// get called..
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!memoryUsage.notifyCallbackWhenNotFull(sendMessagesWaitingForSpaceTask)) {
&lt;br&gt;@@ -465,18 +454,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.setDontSendReponse(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Producer flow control cannot be used, so we have do the flow
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// control at the broker
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// by blocking this thread until there is space available.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!memoryUsage.waitForSpace(1000)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context.getStopping().get()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IOException(&amp;quot;Connection closed, send aborted.&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (memoryUsage.isFull()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;waitForSpace(context, memoryUsage, &amp;quot;Usage Manager Memory Limit is full. Producer (&amp;quot; + message.getProducerId() + &amp;quot;) stopped to prevent flooding &amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; + &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// The usage manager could have delayed us by the time
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// we unblock the message could have expired..
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message.isExpired()) {
&lt;br&gt;@@ -501,19 +486,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (sendLock) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (store != null &amp;&amp; message.isPersistent()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (systemUsage.getStoreUsage().isFull()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final String logMessage = &amp;quot;Usage Manager Store is Full. Stopping producer (&amp;quot; + message.getProducerId() + &amp;quot;) to prevent flooding &amp;quot; + getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(logMessage);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String logMessage = &amp;quot;Usage Manager Store is Full. Producer (&amp;quot; + message.getProducerId() + &amp;quot;) stopped to prevent flooding &amp;quot; + getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (systemUsage.isSendFailIfNoSpace()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new javax.jms.ResourceAllocationException(logMessage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!systemUsage.getStoreUsage().waitForSpace(1000)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context.getStopping().get()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IOException(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;Connection closed, send aborted.&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(this &amp;nbsp;+ &amp;quot;, waiting for store space... msg: &amp;quot; + message);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;waitForSpace(context, systemUsage.getStoreUsage(), logMessage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message.getMessageId().setBrokerSequenceId(getDestinationSequenceId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;store.addMessage(context, message);
&lt;br&gt;@@ -552,12 +533,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sendMessage(context, message);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private void expireMessages() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(&amp;quot;Expiring messages ..&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// just track the insertion count
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Message&amp;gt; browsedMessages = new AbstractList&amp;lt;Message&amp;gt;() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int size = 0;
&lt;br&gt;@@ -581,9 +562,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asyncWakeup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void gc(){
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void gc() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void acknowledge(ConnectionContext context, Subscription sub, MessageAck ack, MessageReference node) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messageConsumed(context, node);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (store != null &amp;&amp; node.isPersistent()) {
&lt;br&gt;@@ -616,8 +597,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;size = messages.size();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;Queue: destination=&amp;quot; + destination.getPhysicalName() + &amp;quot;, subscriptions=&amp;quot; + consumers.size() + &amp;quot;, memory=&amp;quot; + memoryUsage.getPercentUsage() + &amp;quot;%, size=&amp;quot; + size
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + &amp;quot;, in flight groups=&amp;quot; + messageGroupOwners;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;Queue: destination=&amp;quot; + destination.getPhysicalName() + &amp;quot;, subscriptions=&amp;quot; + consumers.size() + &amp;quot;, memory=&amp;quot; + memoryUsage.getPercentUsage() + &amp;quot;%, size=&amp;quot; + size + &amp;quot;, in flight groups=&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ messageGroupOwners;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void start() throws Exception {
&lt;br&gt;@@ -632,25 +613,25 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doPageIn(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void stop() throws Exception{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void stop() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (taskRunner != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;taskRunner.shutdown();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this.executor != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.executor.shutdownNow();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;scheduler.cancel(expireMessagesTask);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (messages != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.stop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;systemUsage.getMemoryUsage().removeUsageListener(this);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (memoryUsage != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memoryUsage.stop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (store!=null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (store != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;store.stop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -661,7 +642,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return destination;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public MessageGroupMap getMessageGroupOwners() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (messageGroupOwners == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messageGroupOwners = getMessageGroupMapFactory().createMessageGroupMap();
&lt;br&gt;@@ -692,7 +672,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setMessages(PendingMessageCursor messages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.messages = messages;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isUseConsumerPriority() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return useConsumerPriority;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -708,7 +688,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setStrictOrderDispatch(boolean strictOrderDispatch) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.strictOrderDispatch = strictOrderDispatch;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isOptimizedDispatch() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return optimizedDispatch;
&lt;br&gt;@@ -717,21 +696,22 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setOptimizedDispatch(boolean optimizedDispatch) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.optimizedDispatch = optimizedDispatch;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	public int getTimeBeforeDispatchStarts() {
&lt;br&gt;-		return timeBeforeDispatchStarts;
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void setTimeBeforeDispatchStarts(int timeBeforeDispatchStarts) {
&lt;br&gt;-		this.timeBeforeDispatchStarts = timeBeforeDispatchStarts;
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public int getConsumersBeforeDispatchStarts() {
&lt;br&gt;-		return consumersBeforeDispatchStarts;
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void setConsumersBeforeDispatchStarts(int consumersBeforeDispatchStarts) {
&lt;br&gt;-		this.consumersBeforeDispatchStarts = consumersBeforeDispatchStarts;
&lt;br&gt;-	}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getTimeBeforeDispatchStarts() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return timeBeforeDispatchStarts;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setTimeBeforeDispatchStarts(int timeBeforeDispatchStarts) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.timeBeforeDispatchStarts = timeBeforeDispatchStarts;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getConsumersBeforeDispatchStarts() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return consumersBeforeDispatchStarts;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setConsumersBeforeDispatchStarts(int consumersBeforeDispatchStarts) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.consumersBeforeDispatchStarts = consumersBeforeDispatchStarts;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Implementation methods
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// -------------------------------------------------------------------------
&lt;br&gt;@@ -740,19 +720,18 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Message[] browse() { &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Message[] browse() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Message&amp;gt; l = new ArrayList&amp;lt;Message&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doBrowse(l, getMaxBrowsePageSize());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return l.toArray(new Message[l.size()]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void doBrowse(List&amp;lt;Message&amp;gt; l, int max) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final ConnectionContext connectionContext = createConnectionContext();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMessages(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;MessageReference&amp;gt; toExpire = new ArrayList&amp;lt;MessageReference&amp;gt;();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(dispatchMutex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (dispatchMutex) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInPendingDispatch) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addAll(pagedInPendingDispatch, l, max, toExpire);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (MessageReference ref : toExpire) {
&lt;br&gt;@@ -775,17 +754,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (l.size() &amp;lt; getMaxBrowsePageSize()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.reset();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (messages.hasNext() &amp;&amp; l.size() &amp;lt; max) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageReference node = messages.next(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageReference node = messages.next();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (node.isExpired()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (broker.isExpired(node)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messageExpired(connectionContext,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;createMessageReference(node.getMessage()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messageExpired(connectionContext, createMessageReference(node.getMessage()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.remove();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;@@ -800,16 +778,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Problem retrieving message for browse&amp;quot;, e);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private void addAll(Collection&amp;lt;QueueMessageReference&amp;gt; refs,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Message&amp;gt; l, int maxBrowsePageSize, List&amp;lt;MessageReference&amp;gt; toExpire) throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (Iterator&amp;lt;QueueMessageReference&amp;gt; i = refs.iterator(); i.hasNext()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; l.size() &amp;lt; getMaxBrowsePageSize();) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void addAll(Collection&amp;lt;QueueMessageReference&amp;gt; refs, List&amp;lt;Message&amp;gt; l, int maxBrowsePageSize, List&amp;lt;MessageReference&amp;gt; toExpire) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (Iterator&amp;lt;QueueMessageReference&amp;gt; i = refs.iterator(); i.hasNext() &amp;&amp; l.size() &amp;lt; getMaxBrowsePageSize();) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueMessageReference ref = i.next();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ref.isExpired()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toExpire.add(ref);
&lt;br&gt;@@ -843,8 +819,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (IOException e) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;got an exception retrieving message &amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ id);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;got an exception retrieving message &amp;quot; + id);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} finally {
&lt;br&gt;@@ -857,10 +832,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void purge() throws Exception { &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void purge() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ConnectionContext c = createConnectionContext();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;MessageReference&amp;gt; list = null;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doPageIn(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInMessages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list = new ArrayList&amp;lt;MessageReference&amp;gt;(pagedInMessages.values());
&lt;br&gt;@@ -869,11 +844,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (MessageReference ref : list) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueMessageReference r = (QueueMessageReference) ref;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeMessage(c,(IndirectMessageReference) r);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeMessage(c, (IndirectMessageReference) r);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (IOException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} while (!pagedInMessages.isEmpty() || this.destinationStatistics.getMessages().getCount() &amp;gt; 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gc();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.destinationStatistics.getMessages().setCount(0);
&lt;br&gt;@@ -921,15 +896,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInMessages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set.addAll(pagedInMessages.values());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List &amp;lt;MessageReference&amp;gt;list = new ArrayList&amp;lt;MessageReference&amp;gt;(set);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;MessageReference&amp;gt; list = new ArrayList&amp;lt;MessageReference&amp;gt;(set);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (MessageReference ref : list) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndirectMessageReference r = (IndirectMessageReference) ref;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (filter.evaluate(context, r)) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeMessage(context, r);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set.remove(r);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++movedCounter &amp;gt;= maximumMessages
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; maximumMessages &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++movedCounter &amp;gt;= maximumMessages &amp;&amp; maximumMessages &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return movedCounter;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -975,24 +949,23 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int count = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Set&amp;lt;MessageReference&amp;gt; set = new CopyOnWriteArraySet&amp;lt;MessageReference&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int oldMaxSize=getMaxPageSize();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int oldMaxSize = getMaxPageSize();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setMaxPageSize((int) this.destinationStatistics.getMessages().getCount());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doPageIn(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setMaxPageSize(oldMaxSize);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInMessages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set.addAll(pagedInMessages.values());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List &amp;lt;MessageReference&amp;gt;list = new ArrayList&amp;lt;MessageReference&amp;gt;(set);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;MessageReference&amp;gt; list = new ArrayList&amp;lt;MessageReference&amp;gt;(set);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (MessageReference ref : list) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndirectMessageReference r = (IndirectMessageReference) ref;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (filter.evaluate(context, r)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r.incrementReferenceCount(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r.incrementReferenceCount();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Message m = r.getMessage();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BrokerSupport.resend(context, m, dest);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++movedCounter &amp;gt;= maximumMessages
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; maximumMessages &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++movedCounter &amp;gt;= maximumMessages &amp;&amp; maximumMessages &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return movedCounter;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} finally {
&lt;br&gt;@@ -1004,15 +977,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} while (count &amp;lt; this.destinationStatistics.getMessages().getCount());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return movedCounter;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Move a message
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param context connection context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param m message
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param dest ActiveMQDestination
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public boolean moveMessageTo(ConnectionContext context,Message m,ActiveMQDestination dest) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean moveMessageTo(ConnectionContext context, Message m, ActiveMQDestination dest) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueMessageReference r = createMessageReference(m);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BrokerSupport.resend(context, m, dest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeMessage(context, r);
&lt;br&gt;@@ -1035,7 +1009,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return the number of messages removed
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int moveMatchingMessagesTo(ConnectionContext context, String selector, ActiveMQDestination dest) throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return moveMatchingMessagesTo(context, selector, dest,Integer.MAX_VALUE);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return moveMatchingMessagesTo(context, selector, dest, Integer.MAX_VALUE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -1050,9 +1024,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Moves the messages matching the given filter up to the maximum number of
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * matched messages
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public int moveMatchingMessagesTo(ConnectionContext context,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageReferenceFilter filter, ActiveMQDestination dest,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int maximumMessages) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int moveMatchingMessagesTo(ConnectionContext context, MessageReferenceFilter filter, ActiveMQDestination dest, int maximumMessages) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int movedCounter = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Set&amp;lt;MessageReference&amp;gt; set = new CopyOnWriteArraySet&amp;lt;MessageReference&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;@@ -1067,20 +1039,18 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// We should only move messages that can be locked.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;moveMessageTo(context, ref.getMessage(), dest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set.remove(r);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++movedCounter &amp;gt;= maximumMessages
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; maximumMessages &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++movedCounter &amp;gt;= maximumMessages &amp;&amp; maximumMessages &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return movedCounter;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} while (set.size() &amp;lt; this.destinationStatistics.getMessages().getCount()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; set.size() &amp;lt; maximumMessages);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} while (set.size() &amp;lt; this.destinationStatistics.getMessages().getCount() &amp;&amp; set.size() &amp;lt; maximumMessages);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return movedCounter;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BrowserDispatch getNextBrowserDispatch() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInMessages) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( browserDispatches.isEmpty() ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (browserDispatches.isEmpty()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return browserDispatches.removeFirst();
&lt;br&gt;@@ -1093,93 +1063,93 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @see org.apache.activemq.thread.Task#iterate()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean iterate() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean pageInMoreMessages = false; &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(iteratingMutex) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean pageInMoreMessages = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (iteratingMutex) {
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// do early to allow dispatch of these waiting messages
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(messagesWaitingForSpace) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messagesWaitingForSpace) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!messagesWaitingForSpace.isEmpty() &amp;&amp; !memoryUsage.isFull()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Runnable op = messagesWaitingForSpace.removeFirst();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;op.run();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BrowserDispatch rd;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while ((rd = getNextBrowserDispatch()) != null) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMoreMessages = true;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageEvaluationContext msgContext = new NonCachedMessageEvaluationContext();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msgContext.setDestination(destination);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueBrowserSubscription browser = rd.getBrowser();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (QueueMessageReference node : rd.messages) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!node.isAcked()) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msgContext.setMessageReference(node);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (browser.matches(node, msgContext)) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;browser.add(node);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while ((rd = getNextBrowserDispatch()) != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMoreMessages = true;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageEvaluationContext msgContext = new NonCachedMessageEvaluationContext();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msgContext.setDestination(destination);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueBrowserSubscription browser = rd.getBrowser();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (QueueMessageReference node : rd.messages) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!node.isAcked()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msgContext.setMessageReference(node);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (browser.matches(node, msgContext)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;browser.add(node);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rd.done();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.warn(&amp;quot;exception on dispatch to browser: &amp;quot; + rd.getBrowser(), e);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (firstConsumer) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	firstConsumer = false;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	try {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		if (consumersBeforeDispatchStarts &amp;gt; 0) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			int timeout = 1000; // wait one second by default if consumer count isn't reached &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			if (timeBeforeDispatchStarts &amp;gt; 0) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;				timeout = timeBeforeDispatchStarts;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			if (consumersBeforeStartsLatch.await(timeout, TimeUnit.MILLISECONDS)) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;				if (LOG.isDebugEnabled()) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;					LOG.debug(consumers.size() + &amp;quot; consumers subscribed. Starting dispatch.&amp;quot;);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;				}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			} else {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;				if (LOG.isDebugEnabled()) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;					LOG.debug(timeout + &amp;quot; ms elapsed and &amp;quot; + &amp;nbsp;consumers.size() + &amp;quot; consumers subscribed. Starting dispatch.&amp;quot;);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;				}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		}	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		if (timeBeforeDispatchStarts &amp;gt; 0 &amp;&amp; consumersBeforeDispatchStarts &amp;lt;= 0) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			iteratingMutex.wait(timeBeforeDispatchStarts);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			if (LOG.isDebugEnabled()) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;				LOG.debug(timeBeforeDispatchStarts + &amp;quot; ms elapsed. Starting dispatch.&amp;quot;);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;			}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	} catch (Exception e) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		LOG.error(e);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messages) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMoreMessages |= !messages.isEmpty();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Kinda ugly.. but I think dispatchLock is the only mutex protecting the 
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// pagedInPendingDispatch variable. 	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(dispatchMutex) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMoreMessages |= !pagedInPendingDispatch.isEmpty();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} 
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Perhaps we should page always into the pagedInPendingDispatch list if 
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// !messages.isEmpty(), and then if !pagedInPendingDispatch.isEmpty()
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// then we do a dispatch.
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (pageInMoreMessages) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pageInMessages(false);
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Throwable e) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Failed to page in more queue messages &amp;quot;, e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.warn(&amp;quot;exception on dispatch to browser: &amp;quot; + rd.getBrowser(), e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (firstConsumer) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;firstConsumer = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (consumersBeforeDispatchStarts &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int timeout = 1000; // wait one second by default if consumer count isn't reached &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (timeBeforeDispatchStarts &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;timeout = timeBeforeDispatchStarts;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (consumersBeforeStartsLatch.await(timeout, TimeUnit.MILLISECONDS)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(consumers.size() + &amp;quot; consumers subscribed. Starting dispatch.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(timeout + &amp;quot; ms elapsed and &amp;quot; + consumers.size() + &amp;quot; consumers subscribed. Starting dispatch.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (timeBeforeDispatchStarts &amp;gt; 0 &amp;&amp; consumersBeforeDispatchStarts &amp;lt;= 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iteratingMutex.wait(timeBeforeDispatchStarts);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(timeBeforeDispatchStarts + &amp;quot; ms elapsed. Starting dispatch.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messages) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMoreMessages |= !messages.isEmpty();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Kinda ugly.. but I think dispatchLock is the only mutex protecting the 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// pagedInPendingDispatch variable. 	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (dispatchMutex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMoreMessages |= !pagedInPendingDispatch.isEmpty();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Perhaps we should page always into the pagedInPendingDispatch list if 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// !messages.isEmpty(), and then if !pagedInPendingDispatch.isEmpty()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// then we do a dispatch.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (pageInMoreMessages) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pageInMessages(false);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Throwable e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Failed to page in more queue messages &amp;quot;, e);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return pendingWakeups.decrementAndGet() &amp;gt; 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return pendingWakeups.decrementAndGet() &amp;gt; 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1188,8 +1158,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean evaluate(ConnectionContext context, MessageReference r) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return messageId.equals(r.getMessageId().toString());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public String toString() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;MessageIdFilter: &amp;quot;+messageId;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;MessageIdFilter: &amp;quot; + messageId;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -1213,22 +1184,22 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected void removeMessage(ConnectionContext c, QueueMessageReference r) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeMessage(c, null, r);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(dispatchMutex) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (dispatchMutex) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInPendingDispatch) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pagedInPendingDispatch.remove(r);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected void removeMessage(ConnectionContext c, Subscription subs,QueueMessageReference r) throws IOException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected void removeMessage(ConnectionContext c, Subscription subs, QueueMessageReference r) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageAck ack = new MessageAck();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ack.setAckType(MessageAck.STANDARD_ACK_TYPE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ack.setDestination(destination);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ack.setMessageID(r.getMessageId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeMessage(c, subs, r, ack);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected void removeMessage(ConnectionContext context,Subscription sub,final QueueMessageReference reference,MessageAck ack) throws IOException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected void removeMessage(ConnectionContext context, Subscription sub, final QueueMessageReference reference, MessageAck ack) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reference.setAcked(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// This sends the ack the the journal..
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!ack.isInTransaction()) {
&lt;br&gt;@@ -1240,13 +1211,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;acknowledge(context, sub, ack, reference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} finally {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.getTransaction().addSynchronization(new Synchronization() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void afterCommit() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getDestinationStatistics().getDequeues().increment();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dropMessage(reference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wakeup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void afterRollback() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reference.setAcked(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -1255,38 +1226,38 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ack.isPoisonAck()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// message gone to DLQ, is ok to allow redelivery
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(messages) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.rollback(reference.getMessageId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private void dropMessage(QueueMessageReference reference) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reference.drop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getMessages().decrement();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(pagedInMessages) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInMessages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pagedInMessages.remove(reference.getMessageId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context,MessageReference reference) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messageExpired(context,null,reference);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context, MessageReference reference) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messageExpired(context, null, reference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context,Subscription subs, MessageReference reference) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context, Subscription subs, MessageReference reference) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(&amp;quot;message expired: &amp;quot; + reference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;broker.messageExpired(context, reference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getExpired().increment();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeMessage(context,subs,(QueueMessageReference)reference);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeMessage(context, subs, (QueueMessageReference) reference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (IOException e) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Failed to remove expired Message from the store &amp;quot;,e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Failed to remove expired Message from the store &amp;quot;, e);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected ConnectionContext createConnectionContext() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ConnectionContext answer = new ConnectionContext(new NonCachedMessageEvaluationContext());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;answer.setBroker(this.broker);
&lt;br&gt;@@ -1296,17 +1267,18 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;final void sendMessage(final ConnectionContext context, Message msg) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!msg.isPersistent() &amp;&amp; messages.getSystemUsage() != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	if (systemUsage.getTempUsage().isFull()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final String logMessage = &amp;quot;Usage Manager Temp Store is Full. Stopping producer (&amp;quot; + msg.getProducerId() + &amp;quot;) to prevent flooding &amp;quot; + getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(logMessage);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (systemUsage.getTempUsage().isFull()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final String logMessage = &amp;quot;Usage Manager Temp Store is Full. Stopping producer (&amp;quot; + msg.getProducerId() + &amp;quot;) to prevent flooding &amp;quot; + getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (systemUsage.isSendFailIfNoSpace()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new javax.jms.ResourceAllocationException(logMessage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;waitForSpace(context, messages.getSystemUsage().getTempUsage(), logMessage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.getSystemUsage().getTempUsage().waitForSpace();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(messages) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.addMessageLast(msg);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getEnqueues().increment();
&lt;br&gt;@@ -1319,7 +1291,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wakeup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void wakeup() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (optimizedDispatch || isSlave()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iterate();
&lt;br&gt;@@ -1332,12 +1304,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private void asyncWakeup() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pendingWakeups.incrementAndGet();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.taskRunner.wakeup(); &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.taskRunner.wakeup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (InterruptedException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.warn(&amp;quot;Async task tunner failed to wakeup &amp;quot;, e);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean isSlave() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return broker.getBrokerService().isSlave();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -1345,14 +1317,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private List&amp;lt;QueueMessageReference&amp;gt; doPageIn(boolean force) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;QueueMessageReference&amp;gt; result = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;QueueMessageReference&amp;gt; resultList = null;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(dispatchMutex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (dispatchMutex) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int toPageIn = Math.min(getMaxPageSize(), messages.size());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(destination.getPhysicalName() + &amp;quot; toPageIn: &amp;quot; &amp;nbsp;+ toPageIn + &amp;quot;, Inflight: &amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ destinationStatistics.getInflight().getCount()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;, pagedInMessages.size &amp;quot; + pagedInMessages.size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(destination.getPhysicalName() + &amp;quot; toPageIn: &amp;quot; + toPageIn + &amp;quot;, Inflight: &amp;quot; + destinationStatistics.getInflight().getCount() + &amp;quot;, pagedInMessages.size &amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ pagedInMessages.size());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isLazyDispatch() &amp;&amp; !force) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Only page in the minimum number of messages which can be dispatched immediately.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toPageIn = Math.min(getConsumerMessageCountBeforeFull(), toPageIn);
&lt;br&gt;@@ -1376,7 +1347,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result.add(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count++;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} finally {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.release();
&lt;br&gt;@@ -1385,7 +1356,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Only add new messages, not already pagedIn to avoid multiple dispatch attempts
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInMessages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resultList = new ArrayList&amp;lt;QueueMessageReference&amp;gt;(result.size());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(QueueMessageReference ref : result) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (QueueMessageReference ref : result) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!pagedInMessages.containsKey(ref.getMessageId())) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pagedInMessages.put(ref.getMessageId(), ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resultList.add(ref);
&lt;br&gt;@@ -1402,8 +1373,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private void doDispatch(List&amp;lt;QueueMessageReference&amp;gt; list) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean doWakeUp = false;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(dispatchMutex) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (dispatchMutex) {
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInPendingDispatch) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!pagedInPendingDispatch.isEmpty()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Try to first dispatch anything that had not been
&lt;br&gt;@@ -1425,20 +1396,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (doWakeUp) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// avoid lock order contention
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asyncWakeup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return list of messages that could get dispatched to consumers if they
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; were not full.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private List&amp;lt;QueueMessageReference&amp;gt; doActualDispatch(List&amp;lt;QueueMessageReference&amp;gt; list) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Subscription&amp;gt; consumers;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (this.consumers) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this.consumers.isEmpty() || isSlave()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// slave dispatch happens in processDispatchNotification
&lt;br&gt;@@ -1449,15 +1420,15 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;QueueMessageReference&amp;gt; rc = new ArrayList&amp;lt;QueueMessageReference&amp;gt;(list.size());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Set&amp;lt;Subscription&amp;gt; fullConsumers = new HashSet&amp;lt;Subscription&amp;gt;(this.consumers.size());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (MessageReference node : list) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subscription target = null;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int interestCount=0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int interestCount = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (Subscription s : consumers) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	if (s instanceof QueueBrowserSubscription) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		interestCount++;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		continue;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (s instanceof QueueBrowserSubscription) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;interestCount++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (dispatchSelector.canSelect(s, node)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!fullConsumers.contains(s)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!s.isFull()) {
&lt;br&gt;@@ -1472,23 +1443,22 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;interestCount++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	// makes sure it gets dispatched again
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	if (!node.isDropped() &amp;&amp; !((QueueMessageReference)node).isAcked() &amp;&amp; (!node.isDropped() || s.getConsumerInfo().isBrowser())) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		interestCount++;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// makes sure it gets dispatched again
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!node.isDropped() &amp;&amp; !((QueueMessageReference) node).isAcked() &amp;&amp; (!node.isDropped() || s.getConsumerInfo().isBrowser())) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;interestCount++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((target == null &amp;&amp; interestCount&amp;gt;0) || consumers.size() == 0) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((target == null &amp;&amp; interestCount &amp;gt; 0) || consumers.size() == 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// This means all subs were full or that there are no consumers...
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rc.add((QueueMessageReference)node);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rc.add((QueueMessageReference) node);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// If it got dispatched, rotate the consumer list to get round robin distribution. 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; !strictOrderDispatch &amp;&amp; consumers.size() &amp;gt; 1 &amp;&amp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;!dispatchSelector.isExclusiveConsumer(target)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; !strictOrderDispatch &amp;&amp; consumers.size() &amp;gt; 1 &amp;&amp; !dispatchSelector.isExclusiveConsumer(target)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (this.consumers) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( removeFromConsumerList(target) ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (removeFromConsumerList(target)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addToConsumerList(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumers = new ArrayList&amp;lt;Subscription&amp;gt;(this.consumers);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -1496,15 +1466,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return rc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected void pageInMessages(boolean force) throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doDispatch(doPageIn(force));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doDispatch(doPageIn(force));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private void addToConsumerList(Subscription sub) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (useConsumerPriority) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumers.add(sub);
&lt;br&gt;@@ -1513,42 +1481,43 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumers.add(sub);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean removeFromConsumerList(Subscription sub) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return consumers.remove(sub);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int getConsumerMessageCountBeforeFull() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int total = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean zeroPrefetch = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (consumers) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (Subscription s : consumers) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	zeroPrefetch |= s.getPrefetchSize() == 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	int countBeforeFull = s.countBeforeFull();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;zeroPrefetch |= s.getPrefetchSize() == 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int countBeforeFull = s.countBeforeFull();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;total += countBeforeFull;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (total==0 &amp;&amp; zeroPrefetch){
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	total=1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (total == 0 &amp;&amp; zeroPrefetch) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;total = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return total;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/* 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * In slave mode, dispatch is ignored till we get this notification as the dispatch
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * process is non deterministic between master and slave.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * On a notification, the actual dispatch to the subscription (as chosen by the master) 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * is completed. 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * (non-Javadoc)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @see org.apache.activemq.broker.region.BaseDestination#processDispatchNotification(org.apache.activemq.command.MessageDispatchNotification)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * In slave mode, dispatch is ignored till we get this notification as the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * dispatch process is non deterministic between master and slave. On a
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * notification, the actual dispatch to the subscription (as chosen by the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * master) is completed. (non-Javadoc)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @see
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * org.apache.activemq.broker.region.BaseDestination#processDispatchNotification
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * (org.apache.activemq.command.MessageDispatchNotification)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void processDispatchNotification(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageDispatchNotification messageDispatchNotification) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void processDispatchNotification(MessageDispatchNotification messageDispatchNotification) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// do dispatch
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subscription sub = getMatchingSubscription(messageDispatchNotification);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sub != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageReference message = getMatchingMessage(messageDispatchNotification);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sub.add(message); &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sub.add(message);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sub.processMessageDispatchNotification(messageDispatchNotification);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -1556,25 +1525,25 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private QueueMessageReference getMatchingMessage(MessageDispatchNotification messageDispatchNotification) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QueueMessageReference message = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageId messageId = messageDispatchNotification.getMessageId();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; synchronized(dispatchMutex) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (dispatchMutex) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInPendingDispatch) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(QueueMessageReference ref : pagedInPendingDispatch) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (messageId.equals(ref.getMessageId())) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; message = ref;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pagedInPendingDispatch.remove(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (QueueMessageReference ref : pagedInPendingDispatch) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (messageId.equals(ref.getMessageId())) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message = ref;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pagedInPendingDispatch.remove(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (pagedInMessages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message = pagedInMessages.get(messageId);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message == null) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messages) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.setMaxBatchSize(getMaxPageSize());
&lt;br&gt;@@ -1593,28 +1562,25 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Message msg = loadMessage(messageId);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (msg != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message = this.createMessageReference(msg);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message == null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new JMSException(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;Slave broker out of sync with master - Message: &amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ messageDispatchNotification.getMessageId()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot; on &amp;quot; + messageDispatchNotification.getDestination()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot; does not exist among pending(&amp;quot; + pagedInPendingDispatch.size() + &amp;quot;) for subscription: &amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ messageDispatchNotification.getConsumerId());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new JMSException(&amp;quot;Slave broker out of sync with master - Message: &amp;quot; + messageDispatchNotification.getMessageId() + &amp;quot; on &amp;quot; + messageDispatchNotification.getDestination()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot; does not exist among pending(&amp;quot; + pagedInPendingDispatch.size() + &amp;quot;) for subscription: &amp;quot; + messageDispatchNotification.getConsumerId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return message;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Find a consumer that matches the id in the message dispatch notification
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param messageDispatchNotification
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return sub or null if the subscription has been removed before dispatch
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws JMSException
&lt;br&gt;@@ -1637,4 +1603,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asyncWakeup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final void waitForSpace(ConnectionContext context, Usage&amp;lt;?&amp;gt; usage, String warning) throws IOException, InterruptedException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long start = System.currentTimeMillis();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long nextWarn = start + blockedProducerWarningInterval;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!usage.waitForSpace(1000)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context.getStopping().get()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IOException(&amp;quot;Connection closed, send aborted.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long now = System.currentTimeMillis();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (now &amp;gt;= nextWarn) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(warning + &amp;quot; (blocking for: &amp;quot; + (now - start) / 1000 + &amp;quot;s)&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nextWarn = now + blockedProducerWarningInterval;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java Wed Nov 25 19:35:09 2009
&lt;br&gt;@@ -41,6 +41,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.activemq.thread.TaskRunnerFactory;
&lt;br&gt;&amp;nbsp;import org.apache.activemq.thread.Valve;
&lt;br&gt;&amp;nbsp;import org.apache.activemq.transaction.Synchronization;
&lt;br&gt;+import org.apache.activemq.usage.Usage;
&lt;br&gt;&amp;nbsp;import org.apache.activemq.util.SubscriptionKey;
&lt;br&gt;&amp;nbsp;import org.apache.commons.logging.Log;
&lt;br&gt;&amp;nbsp;import org.apache.commons.logging.LogFactory;
&lt;br&gt;@@ -59,11 +60,11 @@
&lt;br&gt;&amp;nbsp; * 
&lt;br&gt;&amp;nbsp; * @version $Revision: 1.21 $
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-public class Topic &amp;nbsp;extends BaseDestination &amp;nbsp;implements Task{
&lt;br&gt;+public class Topic extends BaseDestination implements Task {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected static final Log LOG = LogFactory.getLog(Topic.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final TopicMessageStore topicStore;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected final CopyOnWriteArrayList&amp;lt;Subscription&amp;gt; consumers = new CopyOnWriteArrayList&amp;lt;Subscription&amp;gt;();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected final Valve dispatchValve = new Valve(true); &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected final Valve dispatchValve = new Valve(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private DispatchPolicy dispatchPolicy = new SimpleDispatchPolicy();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SubscriptionRecoveryPolicy subscriptionRecoveryPolicy;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final ConcurrentHashMap&amp;lt;SubscriptionKey, DurableTopicSubscription&amp;gt; durableSubcribers = new ConcurrentHashMap&amp;lt;SubscriptionKey, DurableTopicSubscription&amp;gt;();
&lt;br&gt;@@ -71,24 +72,22 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final LinkedList&amp;lt;Runnable&amp;gt; messagesWaitingForSpace = new LinkedList&amp;lt;Runnable&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final Runnable sendMessagesWaitingForSpaceTask = new Runnable() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void run() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Topic.this.taskRunner.wakeup();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (InterruptedException e) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Topic.this.taskRunner.wakeup();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (InterruptedException e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Topic(BrokerService brokerService, ActiveMQDestination destination, TopicMessageStore store, DestinationStatistics parentStats,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TaskRunnerFactory taskFactory) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Topic(BrokerService brokerService, ActiveMQDestination destination, TopicMessageStore store, DestinationStatistics parentStats, TaskRunnerFactory taskFactory) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(brokerService, store, destination, parentStats);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.topicStore=store;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.topicStore = store;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//set default subscription recovery policy
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;subscriptionRecoveryPolicy= new NoSubscriptionRecoveryPolicy();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;subscriptionRecoveryPolicy = new NoSubscriptionRecoveryPolicy();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.taskRunner = taskFactory.createTaskRunner(this, &amp;quot;Topic &amp;nbsp;&amp;quot; + destination.getPhysicalName());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void initialize() throws Exception{
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void initialize() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super.initialize();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (store != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int messageCount = store.getMessageCount();
&lt;br&gt;@@ -140,7 +139,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sub.add(context, this);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DurableTopicSubscription dsub = (DurableTopicSubscription)sub;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DurableTopicSubscription dsub = (DurableTopicSubscription) sub;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;durableSubcribers.put(dsub.getSubscriptionKey(), dsub);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -171,7 +170,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// we are recovering a subscription to avoid out of order messages.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatchValve.turnOff();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (topicStore == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -195,21 +194,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Do we need to create the subscription?
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(info==null){
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info=new SubscriptionInfo();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (info == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info = new SubscriptionInfo();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.setClientId(clientId);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.setSelector(selector);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.setSubscriptionName(subscriptionName);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.setDestination(getActiveMQDestination()); 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.setDestination(getActiveMQDestination());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// This destination is an actual destination id.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.setSubscribedDestination(subscription.getConsumerInfo().getDestination()); 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.setSubscribedDestination(subscription.getConsumerInfo().getDestination());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// This destination might be a pattern
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (consumers) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumers.add(subscription);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;topicStore.addSubsciption(info,subscription.getConsumerInfo().isRetroactive());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;topicStore.addSubsciption(info, subscription.getConsumerInfo().isRetroactive());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final MessageEvaluationContext msgContext = new NonCachedMessageEvaluationContext();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msgContext.setDestination(destination);
&lt;br&gt;@@ -223,7 +221,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;subscription.add(message);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (IOException e) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LOG.error(&amp;quot;Failed to recover this message &amp;quot; + message);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Failed to recover this message &amp;quot; + message);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -235,7 +233,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean hasSpace() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isDuplicate(MessageId id) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -277,23 +275,24 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(memoryUsage.isFull()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (memoryUsage.isFull()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;isFull(context, memoryUsage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fastProducer(context, producerInfo);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isProducerFlowControl() &amp;&amp; context.isProducerFlowControl()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(warnOnProducerFlowControl) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (warnOnProducerFlowControl) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;warnOnProducerFlowControl = false;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(&amp;quot;Usage Manager memory limit reached for &amp;quot; +getActiveMQDestination().getQualifiedName() + &amp;quot;. Producers will be throttled to the rate at which messages are removed from this destination to prevent flooding it.&amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(&amp;quot;Usage Manager memory limit reached for &amp;quot; + getActiveMQDestination().getQualifiedName()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;. Producers will be throttled to the rate at which messages are removed from this destination to prevent flooding it.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (systemUsage.isSendFailIfNoSpace()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new javax.jms.ResourceAllocationException(&amp;quot;Usage Manager memory limit reached. Stopping producer (&amp;quot; + message.getProducerId() + &amp;quot;) to prevent flooding &amp;quot; +getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new javax.jms.ResourceAllocationException(&amp;quot;Usage Manager memory limit reached. Stopping producer (&amp;quot; + message.getProducerId() + &amp;quot;) to prevent flooding &amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; + &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// We can avoid blocking due to low usage if the producer is sending
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// a sync message or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// if it is using a producer window
&lt;br&gt;@@ -301,9 +300,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messagesWaitingForSpace) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messagesWaitingForSpace.add(new Runnable() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void run() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// While waiting for space to free up... the
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// message may have expired.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message.isExpired()) {
&lt;br&gt;@@ -312,7 +311,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doMessageSend(producerExchange, message);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sendProducerAck) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ProducerAck ack = new ProducerAck(producerInfo.getProducerId(), message.getSize());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.getConnection().dispatchAsync(ack);
&lt;br&gt;@@ -321,7 +320,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;response.setCorrelationId(message.getCommandId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.getConnection().dispatchAsync(response);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!sendProducerAck &amp;&amp; !context.isInRecoveryMode()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExceptionResponse response = new ExceptionResponse(e);
&lt;br&gt;@@ -329,10 +328,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.getConnection().dispatchAsync(response);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// If the user manager is not full, then the task will not
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// get called..
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!memoryUsage.notifyCallbackWhenNotFull(sendMessagesWaitingForSpaceTask)) {
&lt;br&gt;@@ -342,24 +341,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.setDontSendReponse(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Producer flow control cannot be used, so we have do the flow
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// control at the broker
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// by blocking this thread until there is space available.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int count = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!memoryUsage.waitForSpace(1000)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context.getStopping().get()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IOException(&amp;quot;Connection closed, send aborted.&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (count &amp;gt; 2 &amp;&amp; context.isInTransaction()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count =0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int size = context.getTransaction().size();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.warn(&amp;quot;Waiting for space to send &amp;nbsp;transacted message - transaction elements = &amp;quot; + size + &amp;quot; need more space to commit. Message = &amp;quot; + message);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (memoryUsage.isFull()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context.isInTransaction()) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int count = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!memoryUsage.waitForSpace(1000)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context.getStopping().get()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IOException(&amp;quot;Connection closed, send aborted.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (count &amp;gt; 2 &amp;&amp; context.isInTransaction()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int size = context.getTransaction().size();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.warn(&amp;quot;Waiting for space to send &amp;nbsp;transacted message - transaction elements = &amp;quot; + size + &amp;quot; need more space to commit. Message = &amp;quot; + message);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;waitForSpace(context, memoryUsage, &amp;quot;Usage Manager memory limit reached. Stopping producer (&amp;quot; + message.getProducerId() + &amp;quot;) to prevent flooding &amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; + &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// The usage manager could have delayed us by the time
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// we unblock the message could have expired..
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (message.isExpired()) {
&lt;br&gt;@@ -382,35 +389,28 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * do send the message - this needs to be synchronized to ensure messages are stored AND dispatched in 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * the right order
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * do send the message - this needs to be synchronized to ensure messages
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * are stored AND dispatched in the right order
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param producerExchange
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param message
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws IOException
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;synchronized void doMessageSend(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final ProducerBrokerExchange producerExchange, final Message message)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IOException, Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final ConnectionContext context = producerExchange
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getConnectionContext();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;synchronized void doMessageSend(final ProducerBrokerExchange producerExchange, final Message message) throws IOException, Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final ConnectionContext context = producerExchange.getConnectionContext();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message.setRegionDestination(this);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message.getMessageId().setBrokerSequenceId(getDestinationSequenceId());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (topicStore != null &amp;&amp; message.isPersistent()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; !canOptimizeOutPersistence()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (topicStore != null &amp;&amp; message.isPersistent() &amp;&amp; !canOptimizeOutPersistence()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (systemUsage.getStoreUsage().isFull()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final String logMessage = &amp;quot;Usage Manager Store is Full. Stopping producer (&amp;quot; + message.getProducerId() + &amp;quot;) to prevent flooding &amp;quot; + getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(logMessage);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final String logMessage = &amp;quot;Usage Manager Store is Full. Stopping producer (&amp;quot; + message.getProducerId() + &amp;quot;) to prevent flooding &amp;quot; + getActiveMQDestination().getQualifiedName() + &amp;quot;.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot; See &lt;a href=&quot;http://activemq.apache.org/producer-flow-control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&amp;nbsp;for more info&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (systemUsage.isSendFailIfNoSpace()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	 &amp;nbsp; &amp;nbsp;throw new javax.jms.ResourceAllocationException(logMessage);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!systemUsage.getStoreUsage().waitForSpace(1000)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context.getStopping().get()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IOException(&amp;quot;Connection closed, send aborted.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new javax.jms.ResourceAllocationException(logMessage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;waitForSpace(context, systemUsage.getStoreUsage(), logMessage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;topicStore.addMessage(context, message);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -457,14 +457,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void acknowledge(ConnectionContext context, Subscription sub, final MessageAck ack, final MessageReference node) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (topicStore != null &amp;&amp; node.isPersistent()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DurableTopicSubscription dsub = (DurableTopicSubscription)sub;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DurableTopicSubscription dsub = (DurableTopicSubscription) sub;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SubscriptionKey key = dsub.getSubscriptionKey();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;topicStore.acknowledge(context, key.getClientId(), key.getSubscriptionName(), node.getMessageId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;messageConsumed(context, node);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void gc() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -488,7 +487,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (memoryUsage != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memoryUsage.stop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(this.topicStore != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this.topicStore != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.topicStore.stop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -510,7 +509,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean hasSpace() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean isDuplicate(MessageId id) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -527,9 +526,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result.toArray(new Message[result.size()]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean iterate() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(messagesWaitingForSpace) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (messagesWaitingForSpace) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!memoryUsage.isFull() &amp;&amp; !messagesWaitingForSpace.isEmpty()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Runnable op = messagesWaitingForSpace.removeFirst();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;op.run();
&lt;br&gt;@@ -538,12 +537,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// -------------------------------------------------------------------------
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public DispatchPolicy getDispatchPolicy() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return dispatchPolicy;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -560,17 +556,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.subscriptionRecoveryPolicy = subscriptionRecoveryPolicy;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Implementation methods
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// -------------------------------------------------------------------------
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final void wakeup() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected void dispatch(final ConnectionContext context, Message message) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getMessages().increment();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getEnqueues().increment();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatchValve.increment(); &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatchValve.increment();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MessageEvaluationContext msgContext = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!subscriptionRecoveryPolicy.add(context, message)) {
&lt;br&gt;@@ -587,17 +582,17 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msgContext.setMessageReference(message);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!dispatchPolicy.dispatch(message, msgContext, consumers)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;onMessageWithNoConsumers(context, message);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} finally {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatchValve.decrement();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(msgContext != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (msgContext != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msgContext.clear();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context,Subscription subs, MessageReference reference) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void messageExpired(ConnectionContext context, Subscription subs, MessageReference reference) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;broker.messageExpired(context, reference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getMessages().decrement();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destinationStatistics.getEnqueues().decrement();
&lt;br&gt;@@ -609,9 +604,24 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;acknowledge(context, subs, ack, reference);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (IOException e) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Failed to remove expired Message from the store &amp;quot;,e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Failed to remove expired Message from the store &amp;quot;, e);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final void waitForSpace(ConnectionContext context, Usage&amp;lt;?&amp;gt; usage, String warning) throws IOException, InterruptedException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long start = System.currentTimeMillis();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long nextWarn = start + blockedProducerWarningInterval;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!usage.waitForSpace(1000)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context.getStopping().get()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IOException(&amp;quot;Connection closed, send aborted.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long now = System.currentTimeMillis();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (now &amp;gt;= nextWarn) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.info(warning + &amp;quot; (blocking for: &amp;quot; + (now - start) / 1000 + &amp;quot;s)&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nextWarn = now + blockedProducerWarningInterval;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java?rev=884234&amp;r1=884233&amp;r2=884234&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java (original)
&lt;br&gt;+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java Wed Nov 25 19:35:09 2009
&lt;br&gt;@@ -60,6 +60,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int maxQueueAuditDepth=2048;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean enableAudit=true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean producerFlowControl = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private long blockedProducerWarningInterval = Destination.DEFAULT_BLOCKED_PRODUCER_WARNING_INTERVAL;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean optimizedDispatch=false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int maxPageSize=BaseDestination.MAX_PAGE_SIZE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int maxBrowsePageSize=BaseDestination.MAX_BROWSE_PAGE_SIZE;
&lt;br&gt;@@ -125,6 +126,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void baseConfiguration(BaseDestination destination) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setProducerFlowControl(isProducerFlowControl());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setBlockedProducerWarningInterval(getBlockedProducerWarningInterval());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setEnableAudit(isEnableAudit());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setMaxAuditDepth(getMaxQueueAuditDepth());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination.setMaxProducersToAudit(getMaxProducersToAudit());
&lt;br&gt;@@ -373,6 +375,27 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set's the interval at which warnings about producers being blocked by
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * resource usage will be triggered. Values of 0 or less will disable
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * warnings
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param blockedProducerWarningInterval the interval at which warning about
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;blocked producers will be triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBlockedProducerWarningInterval(long blockedProducerWarningInterval) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.blockedProducerWarningInterval = blockedProducerWarningInterval;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return the interval at which warning about blocked producers will be
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; triggered.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public long getBlockedProducerWarningInterval() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return blockedProducerWarningInterval;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return the maxProducersToAudit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getMaxProducersToAudit() {
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Commits-f23834.html&quot; embed=&quot;fixTarget[23834]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Commits&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r884234--2-2----in--activemq-trunk-activemq-core-src-main-java-org-apache-activemq-broker%3A-jmx--region--region-policy--tp26518950p26518950.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26518771</id>
	<title>[jira] Closed: (AMQNET-195) public class AcdOrder : KeyedCollection&lt;uint, object&gt; when serialzable under mono cause deserialization error under windows</title>
	<published>2009-11-25T11:23:52Z</published>
	<updated>2009-11-25T11:23:52Z</updated>
	<author>
		<name>JIRA jira+amqnet@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-195?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-195?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Timothy Bish closed AMQNET-195.
&lt;br&gt;-------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Resolution: Incomplete
&lt;br&gt;&lt;br&gt;No info provided to allow us to reproduce an error,
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; public class AcdOrder : KeyedCollection&amp;lt;uint, object&amp;gt; when serialzable under mono cause deserialization error under windows
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQNET-195
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-195&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-195&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ .Net
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Environment: Mono 2.4, .NET 2.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Piotr Czabanski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Jim Gomes
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sending serialized object type &amp;nbsp;KeyedCollection under Mono 2.4 on Linux cause deserialization error . 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQNET-195%29-public-class-AcdOrder-%3A-KeyedCollection%3Cuint%2C-object%3E-when-serialzable-under-mono-cause-deserialization-error-under-windows-tp25802120p26518771.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26518735</id>
	<title>Re: Creating message from byte[]</title>
	<published>2009-11-25T11:20:41Z</published>
	<updated>2009-11-25T11:20:41Z</updated>
	<author>
		<name>Timothy Bish</name>
	</author>
	<content type="html">On Wed, 2009-11-25 at 09:12 -0800, jhakim wrote:
&lt;br&gt;&amp;gt; Thanks Tim. We are using ICSharpCode
&lt;br&gt;&amp;gt; (&lt;a href=&quot;http://www.icsharpcode.net/OpenSource/SharpZipLib/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.icsharpcode.net/OpenSource/SharpZipLib/&lt;/a&gt;) for end-to-end
&lt;br&gt;&amp;gt; compression between C#/Java clients using TIBCO EMS. 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; In any case, does the native ActiveMQ compression provide end-to-end
&lt;br&gt;&amp;gt; compression between C#/Java clients? If not, how do we get C#/Java clients
&lt;br&gt;&amp;gt; to exchange compressed messages?
&lt;br&gt;&lt;br&gt;The Java client can send and receive messages with compressed message
&lt;br&gt;bodies. &amp;nbsp;The body is compressed using the Java Deflate classes which
&lt;br&gt;work with ZLib compression. &amp;nbsp;In order to send and receive compressed
&lt;br&gt;messages from Java to .NET clients the .NET client needs to be able to
&lt;br&gt;handle Zlib compression as well. &amp;nbsp;We didn't want to tie the user to a
&lt;br&gt;particular compression library with NMS.ActiveMQ so we provide an
&lt;br&gt;interface class that the user can implement to give us access to a
&lt;br&gt;Stream class that can compress or decompress the message body.
&lt;br&gt;&lt;br&gt;If you grab the latest code from SVN you will find an interface called
&lt;br&gt;ICompressionPolicy in the NMS.ActiveMQ project. &amp;nbsp;The default
&lt;br&gt;implementation uses the .NET gzip Stream classes so those aren't going
&lt;br&gt;to work if you want to send to a Java client, you'd need to provide a
&lt;br&gt;new policy class. &amp;nbsp;If you take a look at the MessageCompressionTest.cs
&lt;br&gt;file in the NMS.ActiveMQ test/csharp/Commands folder you will see how
&lt;br&gt;this is done. &amp;nbsp;
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Tim.
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Timothy Bish wrote:
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; On Tue, 2009-11-24 at 07:55 -0800, jhakim wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; I would like to create a large (40+ MB) MapMessage, get its byte[],
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; compress
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; the bytes, and send it across the wire as a BytesMessage. On the
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; receiving
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; side, I would like to read the byte[], uncompress, and create the
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; original
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; MapMessage from the byte[].
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; We have been using this strategy with great success using TIBCO EMS. We
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; have
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; a mix of clients - Java and C#.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; As we look at ActiveMQ as an alternative to TIBCO EMS, I am wondering if
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; there is an API that would let us implement the same strategy.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Specifically,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; is there an API to get the byte[] from a MapMessage and to create a
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; MapMessage from a byte[]?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Thanks in advance.
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; There's not a direct way of doing this via the NMS API but there are
&lt;br&gt;&amp;gt; &amp;gt; some tricks that can allow you to get the byte[] from a MapMessage if
&lt;br&gt;&amp;gt; &amp;gt; you really wanted to. &amp;nbsp;There is another option that might be better that
&lt;br&gt;&amp;gt; &amp;gt; will be available in the NMS.AcitveMQ 1.2.0 release. &amp;nbsp;You can now set a
&lt;br&gt;&amp;gt; &amp;gt; property on the Connection instance to enable compression and provide a
&lt;br&gt;&amp;gt; &amp;gt; CompressionPolicy instance that defines the compression method used to
&lt;br&gt;&amp;gt; &amp;gt; compress and decompress the body of a Message. &amp;nbsp;By default NMS.ActiveMQ
&lt;br&gt;&amp;gt; &amp;gt; just uses the GZipStream built into .NET but if you want to actually
&lt;br&gt;&amp;gt; &amp;gt; trade messages between Java and .NET then you'd need to use something
&lt;br&gt;&amp;gt; &amp;gt; like the DotNetZip library which provides a ZlibStream class that can
&lt;br&gt;&amp;gt; &amp;gt; compress and decompress in a format that's compatible with the Java
&lt;br&gt;&amp;gt; &amp;gt; client's own compression format.
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Regards
&lt;br&gt;&amp;gt; &amp;gt; Tim.
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; -- 
&lt;br&gt;&amp;gt; &amp;gt; Tim Bish
&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://fusesource.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://fusesource.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://timbish.blogspot.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://timbish.blogspot.com/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;/div&gt;-- 
&lt;br&gt;Tim Bish
&lt;br&gt;&lt;a href=&quot;http://fusesource.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://fusesource.com&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://timbish.blogspot.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://timbish.blogspot.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Creating-message-from-byte---tp26498420p26518735.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26518158</id>
	<title>Re: Best implementation for reply-request</title>
	<published>2009-11-25T10:44:34Z</published>
	<updated>2009-11-25T10:44:34Z</updated>
	<author>
		<name>bsnyder</name>
	</author>
	<content type="html">On Wed, Nov 25, 2009 at 10:34 AM, Andres Rangel
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26518158&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andresr@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; We have currently running apache activemq 5.2 in a network of brokers
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It has close to 1500 producers and 1200 consumers.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This producers have  each one a temporary queue so that will be 1500
&lt;br&gt;&amp;gt; temp queues in the system.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The reply-request is implemented using temporary queues.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I would like to know if there's a performance hit by using temporary
&lt;br&gt;&amp;gt; queues instead of using another option.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; What do you guys think?
&lt;/div&gt;&lt;br&gt;There's more overhead involved with such constant creation/destruction
&lt;br&gt;of temp queues, but that's it. As long as the broker has been tuned to
&lt;br&gt;scale for handling such a large number of destinations, then you
&lt;br&gt;should be OK:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://activemq.apache.org/scaling-queues.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/scaling-queues.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;Bruce
&lt;br&gt;-- 
&lt;br&gt;perl -e 'print unpack(&amp;quot;u30&amp;quot;,&amp;quot;D0G)U8V4\@4VYY9&amp;5R\&amp;quot;F)R=6-E+G-N&amp;gt;61E&amp;lt;D\!G;6%I;\&amp;quot;YC;VT*&amp;quot;
&lt;br&gt;);'
&lt;br&gt;&lt;br&gt;ActiveMQ in Action: &lt;a href=&quot;http://bit.ly/2je6cQ&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bit.ly/2je6cQ&lt;/a&gt;&lt;br&gt;Blog: &lt;a href=&quot;http://bruceblog.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bruceblog.org/&lt;/a&gt;&lt;br&gt;Twitter: &lt;a href=&quot;http://twitter.com/brucesnyder&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/brucesnyder&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Best-implementation-for-reply-request-tp26517070p26518158.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26517545</id>
	<title>[jira] Commented: (AMQCPP-253) Problems with compiler aCC on HPUX</title>
	<published>2009-11-25T10:01:52Z</published>
	<updated>2009-11-25T10:01:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQCPP-253?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56113#action_56113&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQCPP-253?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56113#action_56113&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Brian McFarland commented on AMQCPP-253:
&lt;br&gt;----------------------------------------
&lt;br&gt;&lt;br&gt;I get another round of compile issues after updating from SVN.
&lt;br&gt;&lt;br&gt;Subversion properties:
&lt;br&gt;Revision/Author: &amp;nbsp;883794 &amp;nbsp; tabish
&lt;br&gt;Last commit revision: &amp;nbsp;883703, &amp;nbsp;9:31:31 AM, &amp;nbsp;24 Nov 2009.
&lt;br&gt;&lt;br&gt;Error messages:
&lt;br&gt;&lt;br&gt;Error 19: &amp;quot;advisories/TempDestinationAdvisoryConsumer.cpp&amp;quot;, line 77 # Unexpected '&amp;gt;'.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; amqMessage-&amp;gt;getDataStructure().dynamicCast&amp;lt;DestinationInfo&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^
&lt;br&gt;Error 902: &amp;quot;advisories/TempDestinationAdvisoryConsumer.cpp&amp;quot;, line 77 # Template deduction
&lt;br&gt;&amp;nbsp; &amp;nbsp; with signature 'void (void (),activemq::commands::DestinationInfo)'.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; amqMessage-&amp;gt;getDataStructure().dynamicCast&amp;lt;DestinationInfo&amp;gt;();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
&lt;br&gt;Error 226: &amp;quot;advisories/TempDestinationAdvisoryConsumer.cpp&amp;quot;, line 76 # No appropriate func
&lt;br&gt;&amp;nbsp; &amp;nbsp; viable candidate was &amp;quot;decaf::lang::Pointer&amp;lt;activemq::commands::DestinationInfo,decaf::
&lt;br&gt;&amp;nbsp; &amp;nbsp; decaf::lang::Pointer&amp;lt;activemq::commands::DestinationInfo,decaf::lang::AtomicRefCounter
&lt;br&gt;&amp;nbsp; &amp;nbsp; Argument of type 'int' could not be converted to 'const
&lt;br&gt;&amp;nbsp; &amp;nbsp; decaf::lang::Pointer&amp;lt;activemq::commands::DestinationInfo,decaf::lang::AtomicRefCounter
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Pointer&amp;lt;DestinationInfo&amp;gt; info =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;^^^^
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Problems with compiler aCC on HPUX
&lt;br&gt;&amp;gt; ----------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQCPP-253
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQCPP-253&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQCPP-253&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ C++ Client
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 3.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Environment: HP-UX gemma1 B.11.23 U 9000/800
&lt;br&gt;&amp;gt; aCC: HP ANSI C++ B3910B A.03.77
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Wolfgang.Klein
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Timothy Bish
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Minor
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 3.1
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: amq_cpp_30.tar, aq_cpp_make, TcpSocket.cpp
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; compile errors with native HP compiler
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQCPP-253%29-Problems-with-compiler-aCC-on-HPUX-tp24217786p26517545.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26517070</id>
	<title>Best implementation for reply-request</title>
	<published>2009-11-25T09:34:08Z</published>
	<updated>2009-11-25T09:34:08Z</updated>
	<author>
		<name>Andres Rangel-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;We have currently running apache activemq 5.2 in a network of brokers
&lt;br&gt;&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;It has close to 1500 producers and 1200 consumers.
&lt;br&gt;&lt;br&gt;This producers have &amp;nbsp;each one a temporary queue so that will be 1500
&lt;br&gt;temp queues in the system.
&lt;br&gt;&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;The reply-request is implemented using temporary queues.
&lt;br&gt;&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;I would like to know if there's a performance hit by using temporary
&lt;br&gt;queues instead of using another option.
&lt;br&gt;&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;What do you guys think?
&lt;br&gt;&lt;br&gt;--
&lt;br&gt;&lt;br&gt;Andres Rangel
&lt;br&gt;&lt;br&gt;Sw Engineer
&lt;br&gt;&lt;br&gt;Moniker.com
&lt;br&gt;&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Best-implementation-for-reply-request-tp26517070p26517070.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26517002</id>
	<title>[jira] Resolved: (AMQ-2088) Change the InactivityMonitor to clear its flag as soon as a few bytes are received on a connection rather than only after an entire message has been assembled.</title>
	<published>2009-11-25T09:29:52Z</published>
	<updated>2009-11-25T09:29:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2088?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2088?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Hiram Chirino resolved AMQ-2088.
&lt;br&gt;--------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Resolution: Fixed
&lt;br&gt;&lt;br&gt;opened &amp;nbsp; 	
&lt;br&gt;AMQ-2511 to track
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Change the InactivityMonitor to clear its flag as soon as a few bytes are received on a connection rather than only after an entire message has been assembled.
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------------------------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2088
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2088&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2088&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Transport
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Torsten Mielke
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Dejan Bosanac
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Critical
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On slow connections with larger messages to be exchanged, the inactivity monitor might kick in, drop the network connection and re-establish it again. This prevents two brokers from exchanging larger messages on a slow connection as the transmission always gets interrupted.
&lt;br&gt;&amp;gt; See the discussion of this on &lt;a href=&quot;http://activemq.apache.org/slow-networks-drop-large-messages.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/slow-networks-drop-large-messages.html&lt;/a&gt;. 
&lt;br&gt;&amp;gt; The problem is that the InactivityMonitor always waits for a complete message to be assembled on an active connection before clearing its internal flag.
&lt;br&gt;&amp;gt; I propose to change the behavior of the InactivityMonitor so that it clears its flag already when a few bytes were received on a network connection rather than waiting for the entire message to be sent. This should work around the problem of connections being dropped and re-established periodically when receiving large messages.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2088%29-Change-the-InactivityMonitor-to-clear-its-flag-as-soon-as-a-few-bytes-are-received-on-a-connection-rather-than-only-after-an-entire-message-has-been-assembled.-tp21707750p26517002.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516822</id>
	<title>[jira] Created: (AMQ-2511) Regression: Inactivity monitor does not time out stale connections.</title>
	<published>2009-11-25T09:23:52Z</published>
	<updated>2009-11-25T09:23:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">Regression: Inactivity monitor does not time out stale connections.
&lt;br&gt;-------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: AMQ-2511
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2511&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2511&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: ActiveMQ
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Components: Broker
&lt;br&gt;&amp;nbsp; &amp;nbsp; Affects Versions: 5.3.0
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Hiram Chirino
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Assignee: Hiram Chirino
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Fix For: 5.4.0
&lt;br&gt;&lt;br&gt;&lt;br&gt;The fix @ AMQ-2088 cause a the Inactivity Monitor to regress.
&lt;br&gt;&lt;br&gt;Now when a socket is waiting to read the next message, or is in the middle of receiving the next message it sets a flag that disable the inactivity monitor from timing out the connection. The problem is that if the connection gets hung, then it won't time out since the flag is set.
&lt;br&gt;&lt;br&gt;I think a better approach would be for the wireformat to expose a counter which is incremented as data is read.
&lt;br&gt;&lt;br&gt;That way between inactivity check intervals the inactivity monitor can check to see if that value has changed since it's last check.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2511%29-Regression%3A-Inactivity-monitor-does-not-time-out-stale-connections.-tp26516822p26516822.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516750</id>
	<title>[jira] Commented: (AMQ-2088) Change the InactivityMonitor to clear its flag as soon as a few bytes are received on a connection rather than only after an entire message has been assembled.</title>
	<published>2009-11-25T09:19:52Z</published>
	<updated>2009-11-25T09:19:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2088?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56111#action_56111&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2088?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56111#action_56111&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Hiram Chirino commented on AMQ-2088:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;I think a better approach would be for the wireformat to expose a counter which is incremented as data is read.
&lt;br&gt;&lt;br&gt;That way between inactivity check intervals the inactivity monitor can check to see if that value has changed since it's last check.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Change the InactivityMonitor to clear its flag as soon as a few bytes are received on a connection rather than only after an entire message has been assembled.
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------------------------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2088
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2088&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2088&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Transport
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Torsten Mielke
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Dejan Bosanac
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Critical
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On slow connections with larger messages to be exchanged, the inactivity monitor might kick in, drop the network connection and re-establish it again. This prevents two brokers from exchanging larger messages on a slow connection as the transmission always gets interrupted.
&lt;br&gt;&amp;gt; See the discussion of this on &lt;a href=&quot;http://activemq.apache.org/slow-networks-drop-large-messages.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/slow-networks-drop-large-messages.html&lt;/a&gt;. 
&lt;br&gt;&amp;gt; The problem is that the InactivityMonitor always waits for a complete message to be assembled on an active connection before clearing its internal flag.
&lt;br&gt;&amp;gt; I propose to change the behavior of the InactivityMonitor so that it clears its flag already when a few bytes were received on a network connection rather than waiting for the entire message to be sent. This should work around the problem of connections being dropped and re-established periodically when receiving large messages.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2088%29-Change-the-InactivityMonitor-to-clear-its-flag-as-soon-as-a-few-bytes-are-received-on-a-connection-rather-than-only-after-an-entire-message-has-been-assembled.-tp21707750p26516750.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516734</id>
	<title>Re: xa jta activemq jboss</title>
	<published>2009-11-25T09:19:05Z</published>
	<updated>2009-11-25T09:19:05Z</updated>
	<author>
		<name>Gary Tully</name>
	</author>
	<content type="html">is the problem that the
&lt;br&gt;ActiveMQInitialContextFactory returns a regular connection factory rather
&lt;br&gt;than an XA capable one. You may want to extend the
&lt;br&gt;ActiveMQInitialContextFactory to override the createConnectionFactory()
&lt;br&gt;method to return an XA variant or see if you can explicitly provide the
&lt;br&gt;connection factory reference.
&lt;br&gt;Either through configuration of by default the createConnectionFactory
&lt;br&gt;should be capable of returning an XA connection factory. I think by defaut
&lt;br&gt;it would make sense. Can you raise a JIRA for this an if you find that this
&lt;br&gt;is the root cause of your problem.
&lt;br&gt;&lt;br&gt;&lt;br&gt;2009/11/25 miten &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26516734&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Miten.Mehta@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am able to get things to work without global transaction. &amp;nbsp;With JBOSS I
&lt;br&gt;&amp;gt; am
&lt;br&gt;&amp;gt; getting &amp;quot;javax.jms.JMSException: Session's XAResource has not been enlisted
&lt;br&gt;&amp;gt; in a distributed transaction.&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; using the spring config as below:
&lt;br&gt;&amp;gt; =========================
&lt;br&gt;&amp;gt; &amp;lt;bean id=&amp;quot;myMessageListener&amp;quot; class=&amp;quot;jmsexample.ExampleListener&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;bean id=&amp;quot;jndiTemplate&amp;quot; class=&amp;quot;org.springframework.jndi.JndiTemplate&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;environment&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;props&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;prop key=&amp;quot;java.naming.factory.initial&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;org.apache.activemq.jndi.ActiveMQInitialContextFactory
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/prop&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;prop key=&amp;quot;queue.TEST.Q1&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TEST.Q1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/prop&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/props&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;/property&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;/bean&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;bean id=&amp;quot;appJmsDestination&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.springframework.jndi.JndiObjectFactoryBean&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;jndiTemplate&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;ref bean=&amp;quot;jndiTemplate&amp;quot;/&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;/property&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;jndiName&amp;quot; value=&amp;quot;TEST.Q1&amp;quot;/&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;/bean&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;bean id=&amp;quot;connectionFactory&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.activemq.ActiveMQXAConnectionFactory&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;brokerURL&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;tcp://localhost:61616&amp;lt;/value&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/property&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;/bean&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;bean id=&amp;quot;jmsContainer&amp;quot;
&lt;br&gt;&amp;gt; class=&amp;quot;org.springframework.jms.listener.DefaultMessageListenerContainer&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;connectionFactory&amp;quot; ref=&amp;quot;connectionFactory&amp;quot;/&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;destination&amp;quot; ref=&amp;quot;appJmsDestination&amp;quot;/&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;messageListener&amp;quot; ref=&amp;quot;myMessageListener&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;transactionManager&amp;quot; ref=&amp;quot;transactionManager&amp;quot;/&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;/bean&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;bean id=&amp;quot;jbossTransactionManager&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; class=&amp;quot;com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;/bean&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;bean id=&amp;quot;jbossUserTransaction&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; class=&amp;quot;com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple&amp;quot;/&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;bean id=&amp;quot;transactionManager&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.springframework.transaction.jta.JtaTransactionManager&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;transactionManager&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;ref bean=&amp;quot;jbossTransactionManager&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;/property&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;property name=&amp;quot;userTransaction&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;ref bean=&amp;quot;jbossUserTransaction&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;/property&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;/bean&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Miten.
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; View this message in context:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/xa-jta-activemq-jboss-tp26515685p26515685.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/xa-jta-activemq-jboss-tp26515685p26515685.html&lt;/a&gt;&lt;br&gt;&amp;gt; Sent from the ActiveMQ - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&lt;a href=&quot;http://blog.garytully.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.garytully.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;Open Source Integration
&lt;br&gt;&lt;a href=&quot;http://fusesource.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://fusesource.com&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/xa-jta-activemq-jboss-tp26515685p26516734.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516713</id>
	<title>[jira] Commented: (AMQNET-214) Individual Acknowledge only working on last message in queue</title>
	<published>2009-11-25T09:17:52Z</published>
	<updated>2009-11-25T09:17:52Z</updated>
	<author>
		<name>JIRA jira+amqnet@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-214?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56109#action_56109&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-214?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56109#action_56109&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Palm Kevin commented on AMQNET-214:
&lt;br&gt;-----------------------------------
&lt;br&gt;&lt;br&gt;Ok ... finally my patch is useless since you provide your own unit-test ...
&lt;br&gt;I confirm that this issue is fixed now
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Individual Acknowledge only working on last message in queue
&lt;br&gt;&amp;gt; ------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQNET-214
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-214&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-214&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ .Net
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.2.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Palm Kevin
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Timothy Bish
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Critical
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: IndividualAckTest_FirstConsumed.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The new acknowldege-mode _IndividualAcknowledge_ seems not working correctly.
&lt;br&gt;&amp;gt; The _message.Acknowledge()_ does only work if called on last message of the queue!
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQNET-214%29-Individual-Acknowledge-only-working-on-last-message-in-queue-tp26509526p26516713.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516714</id>
	<title>[jira] Reopened: (AMQ-2088) Change the InactivityMonitor to clear its flag as soon as a few bytes are received on a connection rather than only after an entire message has been assembled.</title>
	<published>2009-11-25T09:17:52Z</published>
	<updated>2009-11-25T09:17:52Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2088?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2088?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Hiram Chirino reopened AMQ-2088:
&lt;br&gt;--------------------------------
&lt;br&gt;&lt;br&gt;&lt;br&gt;This fix caused a regression on in the inactivity monitor.
&lt;br&gt;&lt;br&gt;Now when a socket is waiting to read the next message, or is in the middle of receiving the next message it sets a flag that disable the inactivity monitor from timing out the connection. &amp;nbsp;The problem is that if the connection gets hung, then it won't time out since the flag is set.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Change the InactivityMonitor to clear its flag as soon as a few bytes are received on a connection rather than only after an entire message has been assembled.
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------------------------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQ-2088
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQ-2088&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQ-2088&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Transport
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Torsten Mielke
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Dejan Bosanac
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Critical
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.3.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On slow connections with larger messages to be exchanged, the inactivity monitor might kick in, drop the network connection and re-establish it again. This prevents two brokers from exchanging larger messages on a slow connection as the transmission always gets interrupted.
&lt;br&gt;&amp;gt; See the discussion of this on &lt;a href=&quot;http://activemq.apache.org/slow-networks-drop-large-messages.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/slow-networks-drop-large-messages.html&lt;/a&gt;. 
&lt;br&gt;&amp;gt; The problem is that the InactivityMonitor always waits for a complete message to be assembled on an active connection before clearing its internal flag.
&lt;br&gt;&amp;gt; I propose to change the behavior of the InactivityMonitor so that it clears its flag already when a few bytes were received on a network connection rather than waiting for the entire message to be sent. This should work around the problem of connections being dropped and re-established periodically when receiving large messages.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQ-2088%29-Change-the-InactivityMonitor-to-clear-its-flag-as-soon-as-a-few-bytes-are-received-on-a-connection-rather-than-only-after-an-entire-message-has-been-assembled.-tp21707750p26516714.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516611</id>
	<title>Re: Creating message from byte[]</title>
	<published>2009-11-25T09:12:58Z</published>
	<updated>2009-11-25T09:12:58Z</updated>
	<author>
		<name>jhakim</name>
	</author>
	<content type="html">Thanks Tim. We are using ICSharpCode (&lt;a href=&quot;http://www.icsharpcode.net/OpenSource/SharpZipLib/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.icsharpcode.net/OpenSource/SharpZipLib/&lt;/a&gt;) for end-to-end compression between C#/Java clients using TIBCO EMS. 
&lt;br&gt;&lt;br&gt;In any case, does the native ActiveMQ compression provide end-to-end compression between C#/Java clients? If not, how do we get C#/Java clients to exchange compressed messages?
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Timothy Bish wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;On Tue, 2009-11-24 at 07:55 -0800, jhakim wrote:
&lt;br&gt;&amp;gt; I would like to create a large (40+ MB) MapMessage, get its byte[], compress
&lt;br&gt;&amp;gt; the bytes, and send it across the wire as a BytesMessage. On the receiving
&lt;br&gt;&amp;gt; side, I would like to read the byte[], uncompress, and create the original
&lt;br&gt;&amp;gt; MapMessage from the byte[].
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; We have been using this strategy with great success using TIBCO EMS. We have
&lt;br&gt;&amp;gt; a mix of clients - Java and C#.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; As we look at ActiveMQ as an alternative to TIBCO EMS, I am wondering if
&lt;br&gt;&amp;gt; there is an API that would let us implement the same strategy. Specifically,
&lt;br&gt;&amp;gt; is there an API to get the byte[] from a MapMessage and to create a
&lt;br&gt;&amp;gt; MapMessage from a byte[]?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thanks in advance.
&lt;br&gt;&lt;br&gt;There's not a direct way of doing this via the NMS API but there are
&lt;br&gt;some tricks that can allow you to get the byte[] from a MapMessage if
&lt;br&gt;you really wanted to. &amp;nbsp;There is another option that might be better that
&lt;br&gt;will be available in the NMS.AcitveMQ 1.2.0 release. &amp;nbsp;You can now set a
&lt;br&gt;property on the Connection instance to enable compression and provide a
&lt;br&gt;CompressionPolicy instance that defines the compression method used to
&lt;br&gt;compress and decompress the body of a Message. &amp;nbsp;By default NMS.ActiveMQ
&lt;br&gt;just uses the GZipStream built into .NET but if you want to actually
&lt;br&gt;trade messages between Java and .NET then you'd need to use something
&lt;br&gt;like the DotNetZip library which provides a ZlibStream class that can
&lt;br&gt;compress and decompress in a format that's compatible with the Java
&lt;br&gt;client's own compression format.
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Tim.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Tim Bish
&lt;br&gt;&lt;a href=&quot;http://fusesource.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://fusesource.com&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://timbish.blogspot.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://timbish.blogspot.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Creating-message-from-byte---tp26498420p26516611.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516335</id>
	<title>[jira] Updated: (AMQNET-214) Individual Acknowledge only working on last message in queue</title>
	<published>2009-11-25T08:57:52Z</published>
	<updated>2009-11-25T08:57:52Z</updated>
	<author>
		<name>JIRA jira+amqnet@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-214?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-214?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Palm Kevin updated AMQNET-214:
&lt;br&gt;------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: IndividualAckTest_FirstConsumed.patch
&lt;br&gt;&lt;br&gt;In order to simplify your life, I attached a patch that contains the broken UnitTest
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Individual Acknowledge only working on last message in queue
&lt;br&gt;&amp;gt; ------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQNET-214
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-214&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-214&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ .Net
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.2.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Palm Kevin
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Timothy Bish
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Critical
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: IndividualAckTest_FirstConsumed.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The new acknowldege-mode _IndividualAcknowledge_ seems not working correctly.
&lt;br&gt;&amp;gt; The _message.Acknowledge()_ does only work if called on last message of the queue!
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQNET-214%29-Individual-Acknowledge-only-working-on-last-message-in-queue-tp26509526p26516335.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516336</id>
	<title>[jira] Resolved: (AMQNET-214) Individual Acknowledge only working on last message in queue</title>
	<published>2009-11-25T08:57:52Z</published>
	<updated>2009-11-25T08:57:52Z</updated>
	<author>
		<name>JIRA jira+amqnet@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-214?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-214?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Timothy Bish resolved AMQNET-214.
&lt;br&gt;---------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Resolution: Fixed
&lt;br&gt;&lt;br&gt;Resolved in trunk and the 1.2.x branch
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Individual Acknowledge only working on last message in queue
&lt;br&gt;&amp;gt; ------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQNET-214
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-214&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-214&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ .Net
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.2.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Palm Kevin
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Timothy Bish
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Critical
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: IndividualAckTest_FirstConsumed.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The new acknowldege-mode _IndividualAcknowledge_ seems not working correctly.
&lt;br&gt;&amp;gt; The _message.Acknowledge()_ does only work if called on last message of the queue!
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQNET-214%29-Individual-Acknowledge-only-working-on-last-message-in-queue-tp26509526p26516336.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516280</id>
	<title>svn commit: r884195 - in /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src: main/csharp/MessageConsumer.cs test/csharp/IndividualAckTest.cs</title>
	<published>2009-11-25T08:54:33Z</published>
	<updated>2009-11-25T08:54:33Z</updated>
	<author>
		<name>tabish</name>
	</author>
	<content type="html">Author: tabish
&lt;br&gt;Date: Wed Nov 25 16:54:33 2009
&lt;br&gt;New Revision: 884195
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=884195&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=884195&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;&lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-214&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-214&lt;/a&gt;&lt;br&gt;&lt;br&gt;Fix the individual ack callback so that it searches the entire list of dispatched messages for the one to ack. &amp;nbsp;Adds the users test case to the Individual Ack tests.
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs
&lt;br&gt;&lt;br&gt;Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs?rev=884195&amp;r1=884194&amp;r2=884195&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs?rev=884195&amp;r1=884194&amp;r2=884195&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs (original)
&lt;br&gt;+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs Wed Nov 25 16:54:33 2009
&lt;br&gt;@@ -341,10 +341,14 @@
&lt;br&gt;&amp;nbsp;						this.dispatchedMessages.Remove(originalDispatch);
&lt;br&gt;&amp;nbsp;						break;
&lt;br&gt;&amp;nbsp;					}
&lt;br&gt;-
&lt;br&gt;-					return;
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;+			
&lt;br&gt;+			if(dispatch == null) 
&lt;br&gt;+			{
&lt;br&gt;+				Tracer.DebugFormat(&amp;quot;Attempt to Ack MessageId[{0}] failed because the original dispatch is not in the Dispatch List&amp;quot;, message.MessageId);
&lt;br&gt;+				return;
&lt;br&gt;+			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			MessageAck ack = new MessageAck();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -354,6 +358,7 @@
&lt;br&gt;&amp;nbsp;			ack.LastMessageId = dispatch.Message.MessageId;
&lt;br&gt;&amp;nbsp;			ack.MessageCount = 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+			Tracer.Debug(&amp;quot;Sending Individual Ack for MessageId: &amp;quot; + ack.LastMessageId.ToString());
&lt;br&gt;&amp;nbsp;			this.session.Connection.Oneway(ack);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs?rev=884195&amp;r1=884194&amp;r2=884195&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs?rev=884195&amp;r1=884194&amp;r2=884195&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs (original)
&lt;br&gt;+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs Wed Nov 25 16:54:33 2009
&lt;br&gt;@@ -139,5 +139,49 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.Close();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[Test]
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;public void TestIndividualAcknowledgeMultiMessages_AcknowledgeFirstTest()
&lt;br&gt;+		{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ISession session = connection.CreateSession(AcknowledgementMode.IndividualAcknowledge);
&lt;br&gt;+	
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Push 2 messages to queue
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITemporaryQueue queue = session.CreateTemporaryQueue();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IMessageProducer producer = session.CreateProducer(queue);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITextMessage msg = session.CreateTextMessage(&amp;quot;test 1&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;producer.Send(msg, MsgDeliveryMode.Persistent, MsgPriority.Normal, TimeSpan.MinValue); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+			msg = session.CreateTextMessage(&amp;quot;test 2&amp;quot;);		
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;producer.Send(msg, MsgDeliveryMode.Persistent, MsgPriority.Normal, TimeSpan.MinValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;producer.Close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IMessageConsumer consumer = session.CreateConsumer(queue);
&lt;br&gt;+			
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Read the first message
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITextMessage fetchedMessage1 = (ITextMessage) consumer.Receive(TimeSpan.FromMilliseconds(2000));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.IsNotNull(fetchedMessage1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.AreEqual(&amp;quot;test 1&amp;quot;, fetchedMessage1.Text);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+			// Read the second message
&lt;br&gt;+			ITextMessage fetchedMessage2 = (ITextMessage) consumer.Receive(TimeSpan.FromMilliseconds(2000));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.IsNotNull(fetchedMessage2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.AreEqual(&amp;quot;test 2&amp;quot;, fetchedMessage2.Text);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Acknowledge first message
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fetchedMessage1.Acknowledge();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumer.Close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Read first message a second time
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumer = session.CreateConsumer(queue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fetchedMessage1 = (ITextMessage) consumer.Receive(TimeSpan.FromMilliseconds(2000));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.IsNotNull(fetchedMessage1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.AreEqual(&amp;quot;test 2&amp;quot;, fetchedMessage1.Text);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Try to read second message a second time
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fetchedMessage2 = (ITextMessage) consumer.Receive(TimeSpan.FromMilliseconds(2000));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.IsNull(fetchedMessage2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumer.Close();
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+		
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Commits-f23834.html&quot; embed=&quot;fixTarget[23834]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Commits&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r884195---in--activemq-activemq-dotnet-Apache.NMS.ActiveMQ-branches-1.2.x-src%3A-main-csharp-MessageConsumer.cs-test-csharp-IndividualAckTest.cs-tp26516280p26516280.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516215</id>
	<title>svn commit: r884193 - in /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src: main/csharp/MessageConsumer.cs test/csharp/IndividualAckTest.cs</title>
	<published>2009-11-25T08:50:05Z</published>
	<updated>2009-11-25T08:50:05Z</updated>
	<author>
		<name>tabish</name>
	</author>
	<content type="html">Author: tabish
&lt;br&gt;Date: Wed Nov 25 16:50:05 2009
&lt;br&gt;New Revision: 884193
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=884193&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=884193&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;&lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-214&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-214&lt;/a&gt;&lt;br&gt;&lt;br&gt;Fix the individual ack callback so that it searches the entire list of dispatched messages for the one to ack. &amp;nbsp;Adds the users test case to the Individual Ack tests.
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageConsumer.cs
&lt;br&gt;&amp;nbsp; &amp;nbsp; activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/IndividualAckTest.cs
&lt;br&gt;&lt;br&gt;Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageConsumer.cs
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageConsumer.cs?rev=884193&amp;r1=884192&amp;r2=884193&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageConsumer.cs?rev=884193&amp;r1=884192&amp;r2=884193&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageConsumer.cs (original)
&lt;br&gt;+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageConsumer.cs Wed Nov 25 16:50:05 2009
&lt;br&gt;@@ -341,10 +341,14 @@
&lt;br&gt;&amp;nbsp;						this.dispatchedMessages.Remove(originalDispatch);
&lt;br&gt;&amp;nbsp;						break;
&lt;br&gt;&amp;nbsp;					}
&lt;br&gt;-
&lt;br&gt;-					return;
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;+			
&lt;br&gt;+			if(dispatch == null) 
&lt;br&gt;+			{
&lt;br&gt;+				Tracer.DebugFormat(&amp;quot;Attempt to Ack MessageId[{0}] failed because the original dispatch is not in the Dispatch List&amp;quot;, message.MessageId);
&lt;br&gt;+				return;
&lt;br&gt;+			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			MessageAck ack = new MessageAck();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -354,6 +358,7 @@
&lt;br&gt;&amp;nbsp;			ack.LastMessageId = dispatch.Message.MessageId;
&lt;br&gt;&amp;nbsp;			ack.MessageCount = 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+			Tracer.Debug(&amp;quot;Sending Individual Ack for MessageId: &amp;quot; + ack.LastMessageId.ToString());
&lt;br&gt;&amp;nbsp;			this.session.Connection.Oneway(ack);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/IndividualAckTest.cs
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/IndividualAckTest.cs?rev=884193&amp;r1=884192&amp;r2=884193&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/IndividualAckTest.cs?rev=884193&amp;r1=884192&amp;r2=884193&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/IndividualAckTest.cs (original)
&lt;br&gt;+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/IndividualAckTest.cs Wed Nov 25 16:50:05 2009
&lt;br&gt;@@ -139,5 +139,49 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.Close();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[Test]
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;public void TestIndividualAcknowledgeMultiMessages_AcknowledgeFirstTest()
&lt;br&gt;+		{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ISession session = connection.CreateSession(AcknowledgementMode.IndividualAcknowledge);
&lt;br&gt;+	
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Push 2 messages to queue
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITemporaryQueue queue = session.CreateTemporaryQueue();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IMessageProducer producer = session.CreateProducer(queue);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITextMessage msg = session.CreateTextMessage(&amp;quot;test 1&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;producer.Send(msg, MsgDeliveryMode.Persistent, MsgPriority.Normal, TimeSpan.MinValue); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+			msg = session.CreateTextMessage(&amp;quot;test 2&amp;quot;);		
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;producer.Send(msg, MsgDeliveryMode.Persistent, MsgPriority.Normal, TimeSpan.MinValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;producer.Close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IMessageConsumer consumer = session.CreateConsumer(queue);
&lt;br&gt;+			
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Read the first message
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITextMessage fetchedMessage1 = (ITextMessage) consumer.Receive(TimeSpan.FromMilliseconds(2000));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.IsNotNull(fetchedMessage1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.AreEqual(&amp;quot;test 1&amp;quot;, fetchedMessage1.Text);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+			// Read the second message
&lt;br&gt;+			ITextMessage fetchedMessage2 = (ITextMessage) consumer.Receive(TimeSpan.FromMilliseconds(2000));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.IsNotNull(fetchedMessage2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.AreEqual(&amp;quot;test 2&amp;quot;, fetchedMessage2.Text);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Acknowledge first message
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fetchedMessage1.Acknowledge();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumer.Close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Read first message a second time
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumer = session.CreateConsumer(queue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fetchedMessage1 = (ITextMessage) consumer.Receive(TimeSpan.FromMilliseconds(2000));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.IsNotNull(fetchedMessage1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.AreEqual(&amp;quot;test 2&amp;quot;, fetchedMessage1.Text);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Try to read second message a second time
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fetchedMessage2 = (ITextMessage) consumer.Receive(TimeSpan.FromMilliseconds(2000));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.IsNull(fetchedMessage2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;consumer.Close();
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+		
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Commits-f23834.html&quot; embed=&quot;fixTarget[23834]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Commits&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r884193---in--activemq-activemq-dotnet-Apache.NMS.ActiveMQ-trunk-src%3A-main-csharp-MessageConsumer.cs-test-csharp-IndividualAckTest.cs-tp26516215p26516215.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26515685</id>
	<title>xa jta activemq jboss</title>
	<published>2009-11-25T08:21:46Z</published>
	<updated>2009-11-25T08:21:46Z</updated>
	<author>
		<name>miten</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I am able to get things to work without global transaction. &amp;nbsp;With JBOSS I am getting &amp;quot;javax.jms.JMSException: Session's XAResource has not been enlisted in a distributed transaction.&amp;quot;
&lt;br&gt;&lt;br&gt;using the spring config as below:
&lt;br&gt;=========================
&lt;br&gt;&amp;lt;bean id=&amp;quot;myMessageListener&amp;quot; class=&amp;quot;jmsexample.ExampleListener&amp;quot; /&amp;gt;
&lt;br&gt;&amp;lt;bean id=&amp;quot;jndiTemplate&amp;quot; class=&amp;quot;org.springframework.jndi.JndiTemplate&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;environment&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;props&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;prop key=&amp;quot;java.naming.factory.initial&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; org.apache.activemq.jndi.ActiveMQInitialContextFactory
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/prop&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;prop key=&amp;quot;queue.TEST.Q1&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TEST.Q1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/prop&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/props&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;bean id=&amp;quot;appJmsDestination&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; class=&amp;quot;org.springframework.jndi.JndiObjectFactoryBean&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;jndiTemplate&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;ref bean=&amp;quot;jndiTemplate&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;jndiName&amp;quot; value=&amp;quot;TEST.Q1&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;
&lt;br&gt;&amp;lt;bean id=&amp;quot;connectionFactory&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; class=&amp;quot;org.apache.activemq.ActiveMQXAConnectionFactory&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;brokerURL&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;value&amp;gt;tcp://localhost:61616&amp;lt;/value&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/bean&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;bean id=&amp;quot;jmsContainer&amp;quot; class=&amp;quot;org.springframework.jms.listener.DefaultMessageListenerContainer&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;connectionFactory&amp;quot; ref=&amp;quot;connectionFactory&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;destination&amp;quot; ref=&amp;quot;appJmsDestination&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;messageListener&amp;quot; ref=&amp;quot;myMessageListener&amp;quot; /&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;transactionManager&amp;quot; ref=&amp;quot;transactionManager&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;lt;/bean&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;bean id=&amp;quot;jbossTransactionManager&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; class=&amp;quot;com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;bean id=&amp;quot;jbossUserTransaction&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; class=&amp;quot;com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple&amp;quot;/&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;lt;bean id=&amp;quot;transactionManager&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; class=&amp;quot;org.springframework.transaction.jta.JtaTransactionManager&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;transactionManager&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;ref bean=&amp;quot;jbossTransactionManager&amp;quot; /&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property name=&amp;quot;userTransaction&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;ref bean=&amp;quot;jbossUserTransaction&amp;quot; /&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;&lt;br&gt;Miten.&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/xa-jta-activemq-jboss-tp26515685p26515685.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26515357</id>
	<title>Re: Active Consumers on TCP x HTTP</title>
	<published>2009-11-25T08:02:43Z</published>
	<updated>2009-11-25T08:02:43Z</updated>
	<author>
		<name>Uday Subbarayan-3</name>
	</author>
	<content type="html">I am also in a similar situation...I need a HTTP producer but can't get it work yet!
&lt;br&gt;&lt;br&gt;Uday.
&lt;br&gt;&lt;br&gt;-------------------------
&lt;br&gt;&lt;br&gt;I do not blog but e-write:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://uds-web.blogspot.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://uds-web.blogspot.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;--- On Wed, 11/25/09, jfaerman &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515357&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jfaerman@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;From: jfaerman &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515357&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jfaerman@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: Active Consumers on TCP x HTTP
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515357&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users@...&lt;/a&gt;
&lt;br&gt;Date: Wednesday, November 25, 2009, 2:15 PM
&lt;br&gt;&lt;br&gt;&lt;br&gt;Hello,
&lt;br&gt;&lt;br&gt;I need a queue with HTTP consumers.
&lt;br&gt;My problem is that when the JVM dies, the consumer remains active (i can see
&lt;br&gt;them active in the web console), thus preventing the new consumer from
&lt;br&gt;receiving messages.
&lt;br&gt;If i use TCP instead of HTTP, the dead consumers are inactivated correctly
&lt;br&gt;and everything works.
&lt;br&gt;&lt;br&gt;Anyone been thru something like this or can suggest me a workaround?
&lt;br&gt;&lt;br&gt;Tnx,
&lt;br&gt;Julio
&lt;br&gt;-- 
&lt;br&gt;View this message in context: &lt;a href=&quot;http://old.nabble.com/Active-Consumers-on-TCP-x-HTTP-tp26513355p26513355.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Active-Consumers-on-TCP-x-HTTP-tp26513355p26513355.html&lt;/a&gt;&lt;br&gt;Sent from the ActiveMQ - User mailing list archive at Nabble.com.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Active-Consumers-on-TCP-x-HTTP-tp26513355p26515357.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26515339</id>
	<title>[jira] Commented: (AMQNET-213) selector not working anymore</title>
	<published>2009-11-25T08:01:52Z</published>
	<updated>2009-11-25T08:01:52Z</updated>
	<author>
		<name>JIRA jira+amqnet@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56104#action_56104&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=56104#action_56104&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Jim Gomes commented on AMQNET-213:
&lt;br&gt;----------------------------------
&lt;br&gt;&lt;br&gt;This new behavior of needing to call connection.Start() caused me some trouble, too. &amp;nbsp;I spent about a day or so tracking down what was wrong. &amp;nbsp;Code that was working, suddenly stopped working. &amp;nbsp;I think we need to clearly call out this behavior in the release notes for 1.2.0.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; selector not working anymore
&lt;br&gt;&amp;gt; ----------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: AMQNET-213
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/activemq/browse/AMQNET-213&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/activemq/browse/AMQNET-213&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: ActiveMQ .Net
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: ActiveMQ
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.2.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Palm Kevin
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Jim Gomes
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; When I try to commit a message (which connection and session already has been closed), then previously I executed this code:
&lt;br&gt;&amp;gt; {quote}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Public Sub Commit(ByVal message As IMessage)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Using connection As IConnection = Me.CreateIncomingConnection()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Using session As ISession = connection.CreateSession(AcknowledgementMode.AutoAcknowledge)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Dim consumer = session.CreateConsumer(message.NMSDestination, &amp;quot;NMSMessageID='&amp;quot; + message.NMSMessageId + &amp;quot;'&amp;quot;)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Dim fetchedMessage = consumer.Receive(TimeSpan.FromMilliseconds(100))
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; If fetchedMessage Is Nothing Then _
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Throw New Exception(&amp;quot;Unable to commit message: cannot find message with id '&amp;quot; + message.NMSMessageId + &amp;quot;'&amp;quot;)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; consumer.Close()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; End Using
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; End Using
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; End Sub
&lt;br&gt;&amp;gt; {quote}
&lt;br&gt;&amp;gt; Now, my code always throws the exception because the searched message cannot be found!
&lt;br&gt;&amp;gt; This code is *working with release 1.1.0*. but it *doens't work with Trunk*
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---Dev-f2355.html&quot; embed=&quot;fixTarget[2355]&quot; target=&quot;_top&quot; &gt;ActiveMQ - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28AMQNET-213%29-selector-not-working-anymore-tp26498828p26515339.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26515320</id>
	<title>Re: URI for Queue</title>
	<published>2009-11-25T08:01:16Z</published>
	<updated>2009-11-25T08:01:16Z</updated>
	<author>
		<name>Uday Subbarayan-3</name>
	</author>
	<content type="html">Hi Dejan,
&lt;br&gt;    This is also NOT working.(getting 404 resource not found) I am NOT using a servlet as a client. It's a POJO as a client to MQ.
&lt;br&gt;&lt;br&gt;I am still trying to find the URI for the Queue!
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;Uday.
&lt;br&gt;&lt;br&gt;-------------------------
&lt;br&gt;&lt;br&gt;I do not blog but e-write:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://uds-web.blogspot.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://uds-web.blogspot.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;--- On Wed, 11/25/09, Dejan Bosanac &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515320&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dejan@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;From: Dejan Bosanac &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515320&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dejan@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: Re: URI for Queue
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515320&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users@...&lt;/a&gt;
&lt;br&gt;Date: Wednesday, November 25, 2009, 8:12 AM
&lt;br&gt;&lt;br&gt;Hi Uday,
&lt;br&gt;&lt;br&gt;it all depends how you configure your servlet. In the demo app, distributed
&lt;br&gt;with the ActiveMQ, it is configured to listen to &amp;quot;messages/*&amp;quot; path, so the
&lt;br&gt;full path to your queue would be
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://host:port/demo/messages/myqueue&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://host:port/demo/messages/myqueue&lt;/a&gt;&lt;br&gt;&lt;br&gt;Regarding security, you can secure it like any other web app. I suggest you
&lt;br&gt;take a look at webapp/demo/WEB-INF/web.xml and appropriate articles on the
&lt;br&gt;web on how to secure Java web apps.
&lt;br&gt;&lt;br&gt;Cheers
&lt;br&gt;--
&lt;br&gt;Dejan Bosanac - &lt;a href=&quot;http://twitter.com/dejanb&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/dejanb&lt;/a&gt;&lt;br&gt;&lt;br&gt;Open Source Integration - &lt;a href=&quot;http://fusesource.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://fusesource.com/&lt;/a&gt;&lt;br&gt;ActiveMQ in Action - &lt;a href=&quot;http://www.manning.com/snyder/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.manning.com/snyder/&lt;/a&gt;&lt;br&gt;Blog - &lt;a href=&quot;http://www.nighttale.net&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.nighttale.net&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;On Tue, Nov 24, 2009 at 4:09 PM, Uday Subbarayan
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515320&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;uday.subbarayan@...&lt;/a&gt;&amp;gt;wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Thanks for the pointers. I checked them. I got the answer for my [1]. So,
&lt;br&gt;&amp;gt; if my queue name is 'myqueue', then URL is going to be &lt;a href=&quot;http://host:port/queue/myqueue&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://host:port/queue/myqueue&lt;/a&gt;,
&lt;br&gt;&amp;gt; right?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am still looking for credentials stuff...I couldn't able to find it.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I don't want to use JMS. The reason is that I like to put a std. load
&lt;br&gt;&amp;gt; balancer between client &amp; ActiveMQ. I like HTTP.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt; Uday.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I do not blog but e-write:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://uds-web.blogspot.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://uds-web.blogspot.com&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- On Tue, 11/24/09, Dejan Bosanac &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515320&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dejan@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; From: Dejan Bosanac &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515320&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dejan@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Subject: Re: URI for Queue
&lt;br&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515320&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Date: Tuesday, November 24, 2009, 8:35 AM
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; take a look at this article for more info:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://activemq.apache.org/rest.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/rest.html&lt;/a&gt;&lt;br&gt;&amp;gt; and be sure to check web demos &lt;a href=&quot;http://activemq.apache.org/web-samples.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://activemq.apache.org/web-samples.html&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; BTW. If you're using Java you'll have much better messaging experience
&lt;br&gt;&amp;gt; using
&lt;br&gt;&amp;gt; JMS API.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Cheers
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Dejan Bosanac - &lt;a href=&quot;http://twitter.com/dejanb&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/dejanb&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Open Source Integration - &lt;a href=&quot;http://fusesource.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://fusesource.com/&lt;/a&gt;&lt;br&gt;&amp;gt; ActiveMQ in Action - &lt;a href=&quot;http://www.manning.com/snyder/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.manning.com/snyder/&lt;/a&gt;&lt;br&gt;&amp;gt; Blog - &lt;a href=&quot;http://www.nighttale.net&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.nighttale.net&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Tue, Nov 24, 2009 at 5:56 AM, Uday Subbarayan
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515320&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;uday.subbarayan@...&lt;/a&gt;&amp;gt;wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Hi,
&lt;br&gt;&amp;gt; &amp;gt;    I have installed ActiveMQ 5.3 and created a test queue called
&lt;br&gt;&amp;gt; 'mytest'.
&lt;br&gt;&amp;gt; &amp;gt; I want to HTTP POST to this queue from my java application(J2SE) directly
&lt;br&gt;&amp;gt; &amp;gt; using java.net.httpurlconnection.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; My questions are,
&lt;br&gt;&amp;gt; &amp;gt; [1] What is the URL for this queue?
&lt;br&gt;&amp;gt; &amp;gt; [2] What is the credentials(if any) to POST to this queue?
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Thanks,
&lt;br&gt;&amp;gt; &amp;gt; Uday.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; -------------------------
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I do not blog but e-write:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://uds-web.blogspot.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://uds-web.blogspot.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/ActiveMQ---User-f2356.html&quot; embed=&quot;fixTarget[2356]&quot; target=&quot;_top&quot; &gt;ActiveMQ - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/URI-for-Queue-tp26490495p26515320.html" />
</entry>

</feed>
