[jboss-cvs] JBoss Messaging SVN: r2386 - in trunk: src/etc and 27 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Feb 21 13:07:45 EST 2007


Author: timfox
Date: 2007-02-21 13:07:44 -0500 (Wed, 21 Feb 2007)
New Revision: 2386

Added:
   trunk/src/etc/server/default/deploy/clustered-db2-persistence-service.xml
   trunk/src/etc/server/default/deploy/db2-persistence-service.xml
Removed:
   trunk/src/main/org/jboss/jms/client/container/AsfAspect.java
   trunk/src/main/org/jboss/jms/client/container/FactoryAspect.java
   trunk/src/main/org/jboss/jms/server/QueuedExecutorPool.java
Modified:
   trunk/.classpath
   trunk/src/etc/aop-messaging-client.xml
   trunk/src/etc/server/default/deploy/connection-factories-service.xml
   trunk/src/etc/server/default/deploy/messaging-service.xml
   trunk/src/etc/server/default/deploy/remoting-service.xml
   trunk/src/etc/xmdesc/ClusteredPostOffice-xmbean.xml
   trunk/src/etc/xmdesc/ConnectionFactory-xmbean.xml
   trunk/src/etc/xmdesc/ServerPeer-xmbean.xml
   trunk/src/main/org/jboss/jms/client/container/ProducerAspect.java
   trunk/src/main/org/jboss/jms/client/container/SessionAspect.java
   trunk/src/main/org/jboss/jms/client/container/StateCreationAspect.java
   trunk/src/main/org/jboss/jms/client/delegate/ClientSessionDelegate.java
   trunk/src/main/org/jboss/jms/client/remoting/ClientSocketWrapper.java
   trunk/src/main/org/jboss/jms/client/remoting/MessageCallbackHandler.java
   trunk/src/main/org/jboss/jms/client/state/ConsumerState.java
   trunk/src/main/org/jboss/jms/client/state/SessionState.java
   trunk/src/main/org/jboss/jms/server/ConnectionFactoryManager.java
   trunk/src/main/org/jboss/jms/server/ServerPeer.java
   trunk/src/main/org/jboss/jms/server/ServerPeerMBean.java
   trunk/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactory.java
   trunk/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java
   trunk/src/main/org/jboss/jms/server/destination/DestinationServiceSupport.java
   trunk/src/main/org/jboss/jms/server/destination/ManagedDestination.java
   trunk/src/main/org/jboss/jms/server/destination/QueueService.java
   trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
   trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionFactoryEndpoint.java
   trunk/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java
   trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
   trunk/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java
   trunk/src/main/org/jboss/messaging/core/Channel.java
   trunk/src/main/org/jboss/messaging/core/ChannelSupport.java
   trunk/src/main/org/jboss/messaging/core/PagingChannelSupport.java
   trunk/src/main/org/jboss/messaging/core/local/PagingFilteredQueue.java
   trunk/src/main/org/jboss/messaging/core/plugin/ClusteredPostOfficeService.java
   trunk/src/main/org/jboss/messaging/core/plugin/DefaultPostOfficeService.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/DefaultPostOffice.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/FailedOverQueue.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/LocalClusteredQueue.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PostOfficeInternal.java
   trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/RemoteQueueStub.java
   trunk/tests/src/org/jboss/test/messaging/core/SimpleChannel.java
   trunk/tests/src/org/jboss/test/messaging/core/SimpleReceiver.java
   trunk/tests/src/org/jboss/test/messaging/core/local/NonRecoverablePagingFilteredQueueTest.java
   trunk/tests/src/org/jboss/test/messaging/core/local/RecoverablePagingFilteredQueueTest.java
   trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_2PCTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_NTTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_TTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_2PCTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_NTTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_TTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_2PCTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_NTTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_TTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_2PCTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_NTTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_TTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java
   trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/DefaultPostOfficeTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeWithDefaultRouterTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultMessagePullPolicyTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultRouterTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RecoveryTest.java
   trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RedistributionWithDefaultMessagePullPolicyTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/AcknowledgementTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/ConnectionFactoryTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/String64KLimitTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/WireFormatTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/DistributedQueueTest.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java
Log:
Mainly optimisations plus various other fixes and changes


Modified: trunk/.classpath
===================================================================
--- trunk/.classpath	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/.classpath	2007-02-21 18:07:44 UTC (rev 2386)
@@ -46,7 +46,6 @@
 	<classpathentry kind="lib" path="thirdparty/jboss/aop/lib/common-softvaluehashmap.jar"/>
 	<classpathentry kind="lib" path="thirdparty/jboss/aop/lib/jboss-aop-jdk50.jar"/>
 	<classpathentry kind="lib" path="thirdparty/jboss/aop/lib/jboss-aop-jdk50-client.jar"/>
-	<classpathentry kind="lib" path="thirdparty/jboss/aop/lib/jboss-aspect-jdk50-client.jar"/>
 	<classpathentry kind="lib" path="thirdparty/jboss/aop/lib/jdk14-pluggable-instrumentor.jar"/>
 	<classpathentry kind="lib" path="thirdparty/jboss/aop/lib/jrockit-pluggable-instrumentor.jar"/>
 	<classpathentry kind="lib" path="thirdparty/jboss/aop/lib/pluggable-instrumentor.jar"/>

Modified: trunk/src/etc/aop-messaging-client.xml
===================================================================
--- trunk/src/etc/aop-messaging-client.xml	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/etc/aop-messaging-client.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -7,19 +7,16 @@
    <interceptor class="org.jboss.jms.client.container.ExceptionInterceptor" scope="PER_VM"/>
    <interceptor class="org.jboss.jms.client.container.ClientLogInterceptor" scope="PER_VM"/>
    <interceptor class="org.jboss.jms.client.container.ClosedInterceptor" scope="PER_INSTANCE"/>                  	
-   <interceptor class="org.jboss.jms.client.container.ConcurrencyInterceptor" scope="PER_INSTANCE"/>
    <interceptor class="org.jboss.jms.client.container.FailoverValveInterceptor" scope="PER_INSTANCE"/>
 
    <aspect class="org.jboss.jms.client.container.StateCreationAspect" scope="PER_VM"/>
    <aspect class="org.jboss.jms.client.container.ConsumerAspect" scope="PER_VM"/>
-   <aspect class="org.jboss.jms.client.container.ProducerAspect" scope="PER_INSTANCE"/>
+   <aspect class="org.jboss.jms.client.container.ProducerAspect" scope="PER_VM"/>
    <aspect class="org.jboss.jms.client.container.SessionAspect" scope="PER_VM"/>
-   <aspect class="org.jboss.jms.client.container.AsfAspect" scope="PER_INSTANCE"/>
    <aspect class="org.jboss.jms.client.container.BrowserAspect" scope="PER_INSTANCE"/>
    <aspect class="org.jboss.jms.client.container.ConnectionAspect" scope="PER_INSTANCE"/>
    <aspect class="org.jboss.jms.client.container.ClusteringAspect" scope="PER_INSTANCE"/>
-   <aspect class="org.jboss.jms.client.container.FactoryAspect" scope="PER_INSTANCE"/>
-
+ 
    <!--
        Clustered ConnectionFactory Stack
    -->
@@ -61,7 +58,7 @@
        <advice name="handleStop" aspect="org.jboss.jms.client.container.ConnectionAspect"/>
     </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientConnectionDelegate->createConnectionConsumer(..))">
-      <advice name="handleCreateConnectionConsumer" aspect="org.jboss.jms.client.container.AsfAspect"/>
+      <advice name="handleCreateConnectionConsumer" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientConnectionDelegate->getClientID())">
       <advice name="handleGetClientID" aspect="org.jboss.jms.client.container.ConnectionAspect"/>
@@ -105,34 +102,34 @@
       <interceptor-ref name="org.jboss.jms.client.container.ClosedInterceptor"/>       
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->createMessage())">
-      <advice name="handleCreateMessage" aspect="org.jboss.jms.client.container.FactoryAspect"/>
+      <advice name="handleCreateMessage" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->createBytesMessage())">
-      <advice name="handleCreateBytesMessage" aspect="org.jboss.jms.client.container.FactoryAspect"/>
+      <advice name="handleCreateBytesMessage" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->createMapMessage())">
-      <advice name="handleCreateMapMessage" aspect="org.jboss.jms.client.container.FactoryAspect"/>
+      <advice name="handleCreateMapMessage" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->createObjectMessage(..))">
-      <advice name="handleCreateObjectMessage" aspect="org.jboss.jms.client.container.FactoryAspect"/>
+      <advice name="handleCreateObjectMessage" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->createStreamMessage())">
-      <advice name="handleCreateStreamMessage" aspect="org.jboss.jms.client.container.FactoryAspect"/>
+      <advice name="handleCreateStreamMessage" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->createTextMessage(..))">
-      <advice name="handleCreateTextMessage" aspect="org.jboss.jms.client.container.FactoryAspect"/>
+      <advice name="handleCreateTextMessage" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->setMessageListener(..))">
-      <advice name="handleSetMessageListener" aspect="org.jboss.jms.client.container.AsfAspect"/>
+      <advice name="handleSetMessageListener" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->getMessageListener())">
-      <advice name="handleGetMessageListener" aspect="org.jboss.jms.client.container.AsfAspect"/>
+      <advice name="handleGetMessageListener" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->addAsfMessage(..))">
-      <advice name="handleAddAsfMessage" aspect="org.jboss.jms.client.container.AsfAspect"/>
+      <advice name="handleAddAsfMessage" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>   
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->run())">
-      <advice name="handleRun" aspect="org.jboss.jms.client.container.AsfAspect"/>
+      <advice name="handleRun" aspect="org.jboss.jms.client.container.SessionAspect"/>
    </bind>      
    <bind pointcut="execution(* org.jboss.jms.client.delegate.ClientSessionDelegate->getAcknowledgeMode())">
       <advice name="handleGetAcknowledgeMode" aspect="org.jboss.jms.client.container.SessionAspect"/>

Added: trunk/src/etc/server/default/deploy/clustered-db2-persistence-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/clustered-db2-persistence-service.xml	                        (rev 0)
+++ trunk/src/etc/server/default/deploy/clustered-db2-persistence-service.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+     DB2 clustered persistence deployment descriptor.
+
+     UNTESTED
+
+     $Id$
+ -->
+
+<server>
+
+   <mbean code="org.jboss.messaging.core.plugin.JDBCPersistenceManagerService"
+      name="jboss.messaging:service=PersistenceManager"
+      xmbean-dd="xmdesc/JDBCPersistenceManager-xmbean.xml">
+      <depends>jboss.jca:service=DataSourceBinding,name=DefaultDS</depends>
+      <depends optional-attribute-name="TransactionManager">jboss:service=TransactionManager</depends>
+      <attribute name="DataSource">java:/DefaultDS</attribute>
+      <attribute name="CreateTablesOnStartup">true</attribute>
+      <attribute name="UsingBatchUpdates">true</attribute>
+      <attribute name="SqlProperties"><![CDATA[
+   CREATE_MESSAGE_REFERENCE=CREATE TABLE JBM_MSG_REF (CHANNEL_ID BIGINT, MESSAGE_ID BIGINT, TRANSACTION_ID BIGINT, STATE CHAR(1), ORD BIGINT, PAGE_ORD BIGINT, DELIVERY_COUNT INTEGER, SCHED_DELIVERY BIGINT, PRIMARY KEY(CHANNEL_ID, MESSAGE_ID))
+   CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JBM_MSG_REF_TX ON JBM_MSG_REF (TRANSACTION_ID)
+   CREATE_IDX_MESSAGE_REF_ORD=CREATE INDEX JBM_MSG_REF_ORD ON JBM_MSG_REF (ORD)
+   CREATE_IDX_MESSAGE_REF_PAGE_ORD=CREATE INDEX JBM_MSG_REF_PAGE_ORD ON JBM_MSG_REF (PAGE_ORD)
+   CREATE_IDX_MESSAGE_REF_MESSAGE_ID=CREATE INDEX JBM_MSG_REF_MESSAGE_ID ON JBM_MSG_REF (MESSAGE_ID)
+   CREATE_IDX_MESSAGE_REF_SCHED_DELIVERY=CREATE INDEX JBM_MSG_REF_SCHED_DELIVERY ON JBM_MSG_REF (SCHED_DELIVERY)
+   CREATE_MESSAGE=CREATE TABLE JBM_MSG (MESSAGE_ID BIGINT, RELIABLE CHAR(1), EXPIRATION BIGINT, TIMESTAMP BIGINT, PRIORITY SMALLINT, HEADERS BLOB, PAYLOAD BLOB, CHANNEL_COUNT INTEGER, TYPE SMALLINT, PRIMARY KEY (MESSAGE_ID))
+   CREATE_TRANSACTION=CREATE TABLE JBM_TX (TRANSACTION_ID BIGINT, BRANCH_QUAL BLOB(254), FORMAT_ID INTEGER, GLOBAL_TXID BLOB(254), PRIMARY KEY (TRANSACTION_ID))
+   CREATE_COUNTER=CREATE TABLE JBM_COUNTER (NAME VARCHAR(255), NEXT_ID BIGINT, PRIMARY KEY(NAME))
+   INSERT_MESSAGE_REF=INSERT INTO JBM_MSG_REF (CHANNEL_ID, MESSAGE_ID, TRANSACTION_ID, STATE, ORD, PAGE_ORD, DELIVERY_COUNT, SCHED_DELIVERY) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+   DELETE_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'
+   UPDATE_MESSAGE_REF=UPDATE JBM_MSG_REF SET TRANSACTION_ID=?, STATE='-' WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'
+   UPDATE_PAGE_ORDER=UPDATE JBM_MSG_REF SET PAGE_ORD = ? WHERE MESSAGE_ID=? AND CHANNEL_ID=?
+   COMMIT_MESSAGE_REF1=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='+'
+   COMMIT_MESSAGE_REF2=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='-'
+   ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
+   ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
+   LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
+   SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
+   SELECT_EXISTS_REF=SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?
+   SELECT_EXISTS_REF_MESSAGE_ID=SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE MESSAGE_ID = ?
+   UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?
+   LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
+   INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, CHANNEL_COUNT, TYPE) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
+   INC_CHANNEL_COUNT=UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT + 1 WHERE MESSAGE_ID=?
+   DEC_CHANNEL_COUNT=UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT - 1 WHERE MESSAGE_ID=?
+   DELETE_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID=? AND CHANNEL_COUNT=0
+   MESSAGE_ID_COLUMN=MESSAGE_ID
+   MESSAGE_EXISTS=SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ? FOR UPDATE
+   INSERT_TRANSACTION=INSERT INTO JBM_TX (TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID) VALUES(?, ?, ?, ?)
+   DELETE_TRANSACTION=DELETE FROM JBM_TX WHERE TRANSACTION_ID = ?
+   SELECT_PREPARED_TRANSACTIONS=SELECT TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID FROM JBM_TX
+   SELECT_MESSAGE_ID_FOR_REF=SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '+' ORDER BY ORD
+   SELECT_MESSAGE_ID_FOR_ACK=SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '-' ORDER BY ORD
+   UPDATE_COUNTER=UPDATE JBM_COUNTER SET NEXT_ID = ? WHERE NAME=?
+   SELECT_COUNTER=SELECT NEXT_ID FROM JBM_COUNTER WHERE NAME=? FOR UPDATE
+   INSERT_COUNTER=INSERT INTO JBM_COUNTER (NAME, NEXT_ID) VALUES (?, ?)
+   SELECT_ALL_CHANNELS=SELECT DISTINCT(CHANNEL_ID) FROM JBM_MSG_REF
+      ]]></attribute>
+      <attribute name="MaxParams">500</attribute>
+   </mbean>
+
+   <mbean code="org.jboss.messaging.core.plugin.ClusteredPostOfficeService"
+      name="jboss.messaging:service=PostOffice"
+      xmbean-dd="xmdesc/ClusteredPostOffice-xmbean.xml">
+      <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+      <depends>jboss.jca:service=DataSourceBinding,name=DefaultDS</depends>
+      <depends optional-attribute-name="TransactionManager">jboss:service=TransactionManager</depends>
+      <attribute name="PostOfficeName">Clustered JMS</attribute>
+      <attribute name="DataSource">java:/DefaultDS</attribute>
+      <attribute name="CreateTablesOnStartup">true</attribute>
+      <attribute name="SqlProperties"><![CDATA[
+CREATE_POSTOFFICE_TABLE=CREATE TABLE JBM_POSTOFFICE (POSTOFFICE_NAME VARCHAR(255), NODE_ID INTEGER, QUEUE_NAME VARCHAR(1023), COND VARCHAR(1023), SELECTOR VARCHAR(1023), CHANNEL_ID BIGINT, IS_FAILED_OVER CHAR(1), FAILED_NODE_ID INTEGER)
+INSERT_BINDING=INSERT INTO JBM_POSTOFFICE (POSTOFFICE_NAME, NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+DELETE_BINDING=DELETE FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME=? AND NODE_ID=? AND QUEUE_NAME=?
+LOAD_BINDINGS=SELECT NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME  = ?
+      ]]></attribute>
+      <attribute name="GroupName">DefaultPostOffice</attribute>
+      <attribute name="StateTimeout">5000</attribute>
+      <attribute name="CastTimeout">5000</attribute>
+      <attribute name="StatsSendPeriod">10000</attribute>
+      <attribute name="MessagePullPolicy">org.jboss.messaging.core.plugin.postoffice.cluster.NullMessagePullPolicy</attribute>
+      <attribute name="ClusterRouterFactory">org.jboss.messaging.core.plugin.postoffice.cluster.DefaultRouterFactory</attribute>
+
+
+      <attribute name="ChannelFactoryName">jgroups.mux:name=Multiplexer</attribute>
+      <attribute name="SyncChannelName">udp-sync</attribute>
+      <attribute name="AsyncChannelName">udp</attribute>
+      <attribute name="ChannelPartitionName">${jboss.partition.name:DefaultPartition}-JMS</attribute>
+
+      <attribute name="AsyncChannelConfig">
+         <config>
+            <UDP mcast_recv_buf_size="500000" down_thread="false" ip_mcast="true" mcast_send_buf_size="32000"
+           mcast_port="45567" ucast_recv_buf_size="500000" use_incoming_packet_handler="false"
+           mcast_addr="228.8.8.8" use_outgoing_packet_handler="true" loopback="true" ucast_send_buf_size="32000" ip_ttl="32" bind_addr="127.0.0.1"/>
+            <AUTOCONF down_thread="false" up_thread="false"/>
+            <PING timeout="2000" down_thread="false" num_initial_members="3" up_thread="false"/>
+            <MERGE2 max_interval="10000" down_thread="false" min_interval="5000" up_thread="false"/>
+            <FD_SOCK down_thread="false" up_thread="false"/>
+            <FD timeout="20000" max_tries="3" down_thread="false" up_thread="false" shun="true"/>
+            <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
+            <pbcast.NAKACK max_xmit_size="8192" down_thread="false" use_mcast_xmit="true" gc_lag="50" up_thread="false"
+                         retransmit_timeout="100,200,600,1200,2400,4800"/>
+            <UNICAST timeout="1200,2400,3600" down_thread="false" up_thread="false"/>
+            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="20000" down_thread="false" max_bytes="0" up_thread="false"/>
+            <FRAG frag_size="8192" down_thread="false" up_thread="false"/>
+            <VIEW_SYNC avg_send_interval="60000" down_thread="false" up_thread="false" />
+            <pbcast.GMS print_local_addr="true" join_timeout="3000" down_thread="false" join_retry_timeout="2000" up_thread="false" shun="true"/>
+         </config>
+      </attribute>
+
+      <attribute name="SyncChannelConfig">
+         <config>
+            <UDP mcast_recv_buf_size="500000" down_thread="false" ip_mcast="true" mcast_send_buf_size="32000"
+           mcast_port="45568" ucast_recv_buf_size="500000" use_incoming_packet_handler="false"
+           mcast_addr="228.8.8.8" use_outgoing_packet_handler="true" loopback="true" ucast_send_buf_size="32000" ip_ttl="32" bind_addr="127.0.0.1"/>
+            <AUTOCONF down_thread="false" up_thread="false"/>
+            <PING timeout="2000" down_thread="false" num_initial_members="3" up_thread="false"/>
+            <MERGE2 max_interval="10000" down_thread="false" min_interval="5000" up_thread="false"/>
+            <FD_SOCK down_thread="false" up_thread="false"/>
+            <FD timeout="20000" max_tries="3" down_thread="false" up_thread="false" shun="true"/>
+            <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
+            <pbcast.NAKACK max_xmit_size="8192" down_thread="false" use_mcast_xmit="true" gc_lag="50" up_thread="false"
+                         retransmit_timeout="100,200,600,1200,2400,4800"/>
+            <UNICAST timeout="1200,2400,3600" down_thread="false" up_thread="false"/>
+            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="20000" down_thread="false" max_bytes="0" up_thread="false"/>
+            <FRAG frag_size="8192" down_thread="false" up_thread="false"/>
+            <VIEW_SYNC avg_send_interval="60000" down_thread="false" up_thread="false" />
+            <pbcast.GMS print_local_addr="true" join_timeout="3000" down_thread="false" join_retry_timeout="2000" up_thread="false" shun="true"/>
+            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false"/>
+         </config>
+      </attribute>
+   </mbean>
+
+   <mbean code="org.jboss.jms.server.plugin.JDBCJMSUserManagerService"
+      name="jboss.messaging:service=JMSUserManager"
+      xmbean-dd="xmdesc/JMSUserManager-xmbean.xml">
+      <depends>jboss.jca:service=DataSourceBinding,name=DefaultDS</depends>
+      <depends optional-attribute-name="TransactionManager">jboss:service=TransactionManager</depends>
+      <attribute name="DataSource">java:/DefaultDS</attribute>
+      <attribute name="CreateTablesOnStartup">true</attribute>
+      <attribute name="SqlProperties"><![CDATA[
+CREATE_USER_TABLE=CREATE TABLE JBM_USER (USER_ID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, CLIENTID VARCHAR(128), PRIMARY KEY(USER_ID))
+CREATE_ROLE_TABLE=CREATE TABLE JBM_ROLE (ROLE_ID VARCHAR(32) NOT NULL, USER_ID VARCHAR(32) NOT NULL, PRIMARY KEY(USER_ID, ROLE_ID))
+SELECT_PRECONF_CLIENTID=SELECT CLIENTID FROM JBM_USER WHERE USER_ID=?
+POPULATE.TABLES.1=INSERT INTO JBM_USER (USER_ID,PASSWD,CLIENTID) VALUES ('dilbert','dogbert','dilbert-id')
+      ]]></attribute>
+   </mbean>
+
+</server>
\ No newline at end of file

Modified: trunk/src/etc/server/default/deploy/connection-factories-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/connection-factories-service.xml	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/etc/server/default/deploy/connection-factories-service.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -12,7 +12,7 @@
       name="jboss.messaging.connectionfactory:service=ConnectionFactory"
       xmbean-dd="xmdesc/ConnectionFactory-xmbean.xml">
       <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
-      <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=socket</depends>
+      <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=bisocket</depends>
       <depends>jboss.messaging:service=PostOffice</depends>
 
       <attribute name="JNDIBindings">
@@ -37,7 +37,7 @@
       name="jboss.messaging.connectionfactory:service=NonClusteredConnectionFactory"
       xmbean-dd="xmdesc/ConnectionFactory-xmbean.xml">
       <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
-      <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=socket</depends>
+      <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=bisocket</depends>
       <depends>jboss.messaging:service=PostOffice</depends>
 
       <attribute name="JNDIBindings">

Added: trunk/src/etc/server/default/deploy/db2-persistence-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/db2-persistence-service.xml	                        (rev 0)
+++ trunk/src/etc/server/default/deploy/db2-persistence-service.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     DB2 non-clustered persistence deployment descriptor.
+
+     UNTESTED
+
+     $Id$
+ -->
+
+<server>
+
+   <mbean code="org.jboss.messaging.core.plugin.JDBCPersistenceManagerService"
+         name="jboss.messaging:service=PersistenceManager"
+         xmbean-dd="xmdesc/JDBCPersistenceManager-xmbean.xml">
+         <depends>jboss.jca:service=DataSourceBinding,name=DefaultDS</depends>
+         <depends optional-attribute-name="TransactionManager">jboss:service=TransactionManager</depends>
+         <attribute name="DataSource">java:/DefaultDS</attribute>
+         <attribute name="CreateTablesOnStartup">true</attribute>
+         <attribute name="UsingBatchUpdates">true</attribute>
+         <attribute name="SqlProperties"><![CDATA[
+   CREATE_MESSAGE_REFERENCE=CREATE TABLE JBM_MSG_REF (CHANNEL_ID BIGINT, MESSAGE_ID BIGINT, TRANSACTION_ID BIGINT, STATE CHAR(1), ORD BIGINT, PAGE_ORD BIGINT, DELIVERY_COUNT INTEGER, SCHED_DELIVERY BIGINT, PRIMARY KEY(CHANNEL_ID, MESSAGE_ID))
+   CREATE_IDX_MESSAGE_REF_TX=CREATE INDEX JBM_MSG_REF_TX ON JBM_MSG_REF (TRANSACTION_ID)
+   CREATE_IDX_MESSAGE_REF_ORD=CREATE INDEX JBM_MSG_REF_ORD ON JBM_MSG_REF (ORD)
+   CREATE_IDX_MESSAGE_REF_PAGE_ORD=CREATE INDEX JBM_MSG_REF_PAGE_ORD ON JBM_MSG_REF (PAGE_ORD)
+   CREATE_IDX_MESSAGE_REF_MESSAGE_ID=CREATE INDEX JBM_MSG_REF_MESSAGE_ID ON JBM_MSG_REF (MESSAGE_ID)
+   CREATE_IDX_MESSAGE_REF_SCHED_DELIVERY=CREATE INDEX JBM_MSG_REF_SCHED_DELIVERY ON JBM_MSG_REF (SCHED_DELIVERY)
+   CREATE_MESSAGE=CREATE TABLE JBM_MSG (MESSAGE_ID BIGINT, RELIABLE CHAR(1), EXPIRATION BIGINT, TIMESTAMP BIGINT, PRIORITY SMALLINT, HEADERS BLOB, PAYLOAD BLOB, CHANNEL_COUNT INTEGER, TYPE SMALLINT, PRIMARY KEY (MESSAGE_ID))
+   CREATE_TRANSACTION=CREATE TABLE JBM_TX (TRANSACTION_ID BIGINT, BRANCH_QUAL BLOB(254), FORMAT_ID INTEGER, GLOBAL_TXID BLOB(254), PRIMARY KEY (TRANSACTION_ID))
+   CREATE_COUNTER=CREATE TABLE JBM_COUNTER (NAME VARCHAR(255), NEXT_ID BIGINT, PRIMARY KEY(NAME))
+   INSERT_MESSAGE_REF=INSERT INTO JBM_MSG_REF (CHANNEL_ID, MESSAGE_ID, TRANSACTION_ID, STATE, ORD, PAGE_ORD, DELIVERY_COUNT, SCHED_DELIVERY) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+   DELETE_MESSAGE_REF=DELETE FROM JBM_MSG_REF WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'
+   UPDATE_MESSAGE_REF=UPDATE JBM_MSG_REF SET TRANSACTION_ID=?, STATE='-' WHERE MESSAGE_ID=? AND CHANNEL_ID=? AND STATE='C'
+   UPDATE_PAGE_ORDER=UPDATE JBM_MSG_REF SET PAGE_ORD = ? WHERE MESSAGE_ID=? AND CHANNEL_ID=?
+   COMMIT_MESSAGE_REF1=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='+'
+   COMMIT_MESSAGE_REF2=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='-'
+   ROLLBACK_MESSAGE_REF1=DELETE FROM JBM_MSG_REF WHERE TRANSACTION_ID=? AND STATE='+'
+   ROLLBACK_MESSAGE_REF2=UPDATE JBM_MSG_REF SET STATE='C', TRANSACTION_ID = NULL WHERE TRANSACTION_ID=? AND STATE='-'
+   LOAD_PAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, PAGE_ORD, SCHED_DELIVERY FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND PAGE_ORD BETWEEN ? AND ? ORDER BY PAGE_ORD
+   LOAD_UNPAGED_REFS=SELECT MESSAGE_ID, DELIVERY_COUNT, SCHED_DELIVERY FROM JBM_MSG_REF WHERE STATE = 'C' AND CHANNEL_ID = ? AND PAGE_ORD IS NULL ORDER BY ORD
+   UPDATE_REFS_NOT_PAGED=UPDATE JBM_MSG_REF SET PAGE_ORD = NULL WHERE PAGE_ORD BETWEEN ? AND ? AND CHANNEL_ID=?
+   SELECT_MIN_MAX_PAGE_ORD=SELECT MIN(PAGE_ORD), MAX(PAGE_ORD) FROM JBM_MSG_REF WHERE CHANNEL_ID = ?
+   SELECT_EXISTS_REF=SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?
+   SELECT_EXISTS_REF_MESSAGE_ID=SELECT MESSAGE_ID FROM JBM_MSG_REF WHERE MESSAGE_ID = ?
+   UPDATE_DELIVERY_COUNT=UPDATE JBM_MSG_REF SET DELIVERY_COUNT = ? WHERE CHANNEL_ID = ? AND MESSAGE_ID = ?
+   LOAD_MESSAGES=SELECT MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, TYPE FROM JBM_MSG
+   INSERT_MESSAGE=INSERT INTO JBM_MSG (MESSAGE_ID, RELIABLE, EXPIRATION, TIMESTAMP, PRIORITY, HEADERS, PAYLOAD, CHANNEL_COUNT, TYPE) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
+   INC_CHANNEL_COUNT=UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT + 1 WHERE MESSAGE_ID=?
+   DEC_CHANNEL_COUNT=UPDATE JBM_MSG SET CHANNEL_COUNT = CHANNEL_COUNT - 1 WHERE MESSAGE_ID=?
+   DELETE_MESSAGE=DELETE FROM JBM_MSG WHERE MESSAGE_ID=? AND CHANNEL_COUNT=0
+   MESSAGE_ID_COLUMN=MESSAGE_ID
+   MESSAGE_EXISTS=SELECT MESSAGE_ID FROM JBM_MSG WHERE MESSAGE_ID = ? FOR UPDATE
+   INSERT_TRANSACTION=INSERT INTO JBM_TX (TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID) VALUES(?, ?, ?, ?)
+   DELETE_TRANSACTION=DELETE FROM JBM_TX WHERE TRANSACTION_ID = ?
+   SELECT_PREPARED_TRANSACTIONS=SELECT TRANSACTION_ID, BRANCH_QUAL, FORMAT_ID, GLOBAL_TXID FROM JBM_TX
+   SELECT_MESSAGE_ID_FOR_REF=SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '+' ORDER BY ORD
+   SELECT_MESSAGE_ID_FOR_ACK=SELECT MESSAGE_ID, CHANNEL_ID FROM JBM_MSG_REF WHERE TRANSACTION_ID = ? AND STATE = '-' ORDER BY ORD
+   UPDATE_COUNTER=UPDATE JBM_COUNTER SET NEXT_ID = ? WHERE NAME=?
+   SELECT_COUNTER=SELECT NEXT_ID FROM JBM_COUNTER WHERE NAME=? FOR UPDATE
+   INSERT_COUNTER=INSERT INTO JBM_COUNTER (NAME, NEXT_ID) VALUES (?, ?)
+   SELECT_ALL_CHANNELS=SELECT DISTINCT(CHANNEL_ID) FROM JBM_MSG_REF
+         ]]></attribute>
+         <attribute name="MaxParams">500</attribute>
+   </mbean>
+
+   <mbean code="org.jboss.messaging.core.plugin.DefaultPostOfficeService"
+      name="jboss.messaging:service=PostOffice"
+      xmbean-dd="xmdesc/DefaultPostOffice-xmbean.xml">
+      <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+      <depends>jboss.jca:service=DataSourceBinding,name=DefaultDS</depends>
+      <depends optional-attribute-name="TransactionManager">jboss:service=TransactionManager</depends>
+      <attribute name="PostOfficeName">JMS</attribute>
+      <attribute name="DataSource">java:/DefaultDS</attribute>
+      <attribute name="CreateTablesOnStartup">true</attribute>
+      <attribute name="SqlProperties"><![CDATA[
+CREATE_POSTOFFICE_TABLE=CREATE TABLE JBM_POSTOFFICE (POSTOFFICE_NAME VARCHAR(255), NODE_ID INTEGER, QUEUE_NAME VARCHAR(1023), COND VARCHAR(1023), SELECTOR VARCHAR(1023), CHANNEL_ID BIGINT, IS_FAILED_OVER CHAR(1), FAILED_NODE_ID INTEGER)
+INSERT_BINDING=INSERT INTO JBM_POSTOFFICE (POSTOFFICE_NAME, NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+DELETE_BINDING=DELETE FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME=? AND NODE_ID=? AND QUEUE_NAME=?
+LOAD_BINDINGS=SELECT NODE_ID, QUEUE_NAME, COND, SELECTOR, CHANNEL_ID, IS_FAILED_OVER, FAILED_NODE_ID FROM JBM_POSTOFFICE WHERE POSTOFFICE_NAME  = ?
+      ]]></attribute>
+   </mbean>
+
+   <mbean code="org.jboss.jms.server.plugin.JDBCJMSUserManagerService"
+      name="jboss.messaging:service=JMSUserManager"
+      xmbean-dd="xmdesc/JMSUserManager-xmbean.xml">
+      <depends>jboss.jca:service=DataSourceBinding,name=DefaultDS</depends>
+      <depends optional-attribute-name="TransactionManager">jboss:service=TransactionManager</depends>
+      <attribute name="DataSource">java:/DefaultDS</attribute>
+      <attribute name="CreateTablesOnStartup">true</attribute>
+      <attribute name="SqlProperties"><![CDATA[
+CREATE_USER_TABLE=CREATE TABLE JBM_USER (USER_ID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, CLIENTID VARCHAR(128), PRIMARY KEY(USER_ID))
+CREATE_ROLE_TABLE=CREATE TABLE JBM_ROLE (ROLE_ID VARCHAR(32) NOT NULL, USER_ID VARCHAR(32) NOT NULL, PRIMARY KEY(USER_ID, ROLE_ID))
+SELECT_PRECONF_CLIENTID=SELECT CLIENTID FROM JBM_USER WHERE USER_ID=?
+POPULATE.TABLES.1=INSERT INTO JBM_USER (USER_ID,PASSWD,CLIENTID) VALUES ('dilbert','dogbert','dilbert-id')
+      ]]></attribute>
+   </mbean>
+
+</server>
\ No newline at end of file

Modified: trunk/src/etc/server/default/deploy/messaging-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/messaging-service.xml	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/etc/server/default/deploy/messaging-service.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -25,7 +25,7 @@
       
       <depends optional-attribute-name="JMSUserManager">jboss.messaging:service=JMSUserManager</depends>
       
-      <depends>jboss.messaging:service=Connector,transport=socket</depends>
+      <depends>jboss.messaging:service=Connector,transport=bisocket</depends>
 
 	   <attribute name="PostOffice">jboss.messaging:service=PostOffice</attribute>
 

Modified: trunk/src/etc/server/default/deploy/remoting-service.xml
===================================================================
--- trunk/src/etc/server/default/deploy/remoting-service.xml	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/etc/server/default/deploy/remoting-service.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -9,8 +9,8 @@
 <server>
 
    <mbean code="org.jboss.remoting.transport.Connector"
-          name="jboss.messaging:service=Connector,transport=socket"
-          display-name="Socket transport Connector">
+          name="jboss.messaging:service=Connector,transport=bisocket"
+          display-name="Bisocket transport Connector">
       <attribute name="Configuration">
          <config>
             <invoker transport="bisocket">
@@ -27,10 +27,10 @@
                <attribute name="callbackStore">org.jboss.remoting.callback.CallbackStore</attribute>
                <attribute name="clientSocketClass" isParam="true">org.jboss.jms.client.remoting.ClientSocketWrapper</attribute>
                <attribute name="serverSocketClass">org.jboss.jms.server.remoting.ServerSocketWrapper</attribute>
-               <attribute name="NumberOfRetries">1</attribute>
-               <attribute name="NumberOfCallRetries">2</attribute>
-               <attribute name="callbackErrorsAllowed">1</attribute>
-               <attribute name="onewayThreadPool">org.jboss.jms.server.remoting.DirectThreadPool</attribute>
+               <attribute name="callbackErrorsAllowed">1</attribute>  
+               <attribute name="numberOfRetries" isParam="true">1</attribute>
+               <attribute name="NumberOfCallRetries" isParam="true">2</attribute>
+               <attribute name="clientMaxPoolSize" isParam="true">50</attribute>
             </invoker>
             <handlers>
                <handler subsystem="JMS">org.jboss.jms.server.remoting.JMSServerInvocationHandler</handler>
@@ -59,8 +59,8 @@
                <attribute name="serverBindPort">4458</attribute>
                <attribute name="leasePeriod">20000</attribute>
                <attribute name="callbackStore">org.jboss.remoting.callback.CallbackStore</attribute>
-               <attribute name="callbackPollPeriod" isParam="true">100</attribute>
-               <attribute name="onewayThreadPool">org.jboss.jms.server.remoting.DirectThreadPool</attribute>
+               <attribute name="callbackPollPeriod" isParam="true">100</attribute>  
+               <attribute name="onewayThreadPool">org.jboss.jms.server.remoting.DirectThreadPool</attribute>             
             </invoker>
             <handlers>
                <handler subsystem="JMS">org.jboss.jms.server.remoting.JMSServerInvocationHandler</handler>

Modified: trunk/src/etc/xmdesc/ClusteredPostOffice-xmbean.xml
===================================================================
--- trunk/src/etc/xmdesc/ClusteredPostOffice-xmbean.xml	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/etc/xmdesc/ClusteredPostOffice-xmbean.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -136,6 +136,12 @@
       <name>ChannelPartitionName</name>
       <type>java.lang.String</type>
    </attribute>
+   
+   <attribute access="read-write" getMethod="getThreadPoolSize" setMethod="setThreadPoolSize">
+      <description>The size of the thread pool used to perform various asynchronous clustering operations</description>
+      <name>ThreadPoolSize</name>
+      <type>int</type>
+   </attribute>   
 
    <!-- Managed operations -->
 

Modified: trunk/src/etc/xmdesc/ConnectionFactory-xmbean.xml
===================================================================
--- trunk/src/etc/xmdesc/ConnectionFactory-xmbean.xml	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/etc/xmdesc/ConnectionFactory-xmbean.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -65,6 +65,12 @@
       <name>DefaultTempQueueDownCacheSize</name>
       <type>int</type>
    </attribute>
+   
+   <attribute access="read-write" getMethod="getDupsOKBatchSize" setMethod="setDupsOKBatchSize">
+      <description>The value of the DUPS_OK_ACKNOWLEDGE batch size to use for sessions created from this connection factory</description>
+      <name>DupsOKBatchSize</name>
+      <type>int</type>
+   </attribute>   
 
    <!-- ServerPeer ObjectName is configured as a dependency optional-attribute-name, this is the
         only reason for this attribute to be writable. Any write attempt on this attribute after

Modified: trunk/src/etc/xmdesc/ServerPeer-xmbean.xml
===================================================================
--- trunk/src/etc/xmdesc/ServerPeer-xmbean.xml	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/etc/xmdesc/ServerPeer-xmbean.xml	2007-02-21 18:07:44 UTC (rev 2386)
@@ -145,12 +145,6 @@
       <name>DefaultSecurityConfig</name>
       <type>org.w3c.dom.Element</type>
    </attribute>
-   
-   <attribute access="read-write" getMethod="getQueuedExecutorPoolSize" setMethod="setQueuedExecutorPoolSize">
-      <description>The size of the rotating pool from which to allocate QueuedExecutors</description>
-      <name>QueuedExecutorPoolSize</name>
-      <type>int</type>
-   </attribute>
          
    <attribute access="read-write" getMethod="getDefaultMaxDeliveryAttempts" setMethod="setDefaultMaxDeliveryAttempts">
       <description>The default maximum delivery attempts for destinations, unless overridden on the destination</description>

Deleted: trunk/src/main/org/jboss/jms/client/container/AsfAspect.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/AsfAspect.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/container/AsfAspect.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -1,199 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.jms.client.container;
-
-import java.util.LinkedList;
-
-import javax.jms.IllegalStateException;
-import javax.jms.MessageListener;
-import javax.jms.ServerSessionPool;
-
-import org.jboss.aop.joinpoint.Invocation;
-import org.jboss.aop.joinpoint.MethodInvocation;
-import org.jboss.jms.client.JBossConnectionConsumer;
-import org.jboss.jms.client.delegate.DelegateSupport;
-import org.jboss.jms.client.remoting.MessageCallbackHandler;
-import org.jboss.jms.client.state.SessionState;
-import org.jboss.jms.delegate.ConnectionDelegate;
-import org.jboss.jms.delegate.SessionDelegate;
-import org.jboss.jms.destination.JBossDestination;
-import org.jboss.jms.message.MessageProxy;
-import org.jboss.logging.Logger;
-
-
-/**
- * An aspect that implements the Application Server Facilities for concurrent processing of 
- * a consumer's messages.
- * 
- * See JMS 1.1 spec. section 8.2
- * 
- * This aspect is PER_INSTANCE.
- *  
- * @author <a href="mailto:tim.fox at jboss.com>Tim Fox</a>
- *
- * $Id$
- */
-public class AsfAspect
-{
-   // Constants -----------------------------------------------------
-
-   private static final Logger log = Logger.getLogger(AsfAspect.class);
-
-   // Attributes ----------------------------------------------------
-   
-   private boolean trace = log.isTraceEnabled();
-
-   //The list of messages that get processed on a call to run()
-   protected LinkedList msgs = new LinkedList();
-   
-   //The distinguished message listener
-   protected MessageListener sessionListener;
-   
-   protected SessionState state;
-   
-   // Static --------------------------------------------------------
-   
-   // Constructors --------------------------------------------------
-
-   // Public --------------------------------------------------------
-
-   public Object handleSetMessageListener(Invocation invocation) throws Throwable
-   {
-      if (trace) { log.trace("setMessageListener()"); }
-      
-      MethodInvocation mi = (MethodInvocation)invocation;
-      
-      MessageListener listener = (MessageListener)mi.getArguments()[0];
-      
-      if (listener == null)
-      {
-         throw new IllegalStateException("Cannot set a null MessageListener on the session");
-      }
-      
-      sessionListener = listener;
-      
-      return null;
-   }
-   
-   public Object handleGetMessageListener(Invocation invocation) throws Throwable
-   {
-      if (trace) { log.trace("getMessageListener()"); }
-      
-      return sessionListener;
-   }
-   
-   public Object handleCreateConnectionConsumer(Invocation invocation) throws Throwable
-   {
-      if (trace) { log.trace("createConnectionConsumer()"); }
-      
-      MethodInvocation mi = (MethodInvocation)invocation;
-      
-      JBossDestination dest = (JBossDestination)mi.getArguments()[0];
-      String subscriptionName = (String)mi.getArguments()[1];
-      String messageSelector = (String)mi.getArguments()[2];
-      ServerSessionPool sessionPool = (ServerSessionPool)mi.getArguments()[3];
-      int maxMessages = ((Integer)mi.getArguments()[4]).intValue();
-      
-      return new JBossConnectionConsumer((ConnectionDelegate)mi.getTargetObject(), dest,
-                                         subscriptionName, messageSelector, sessionPool,
-                                         maxMessages);
-   }
-   
-   public Object handleAddAsfMessage(Invocation invocation) throws Throwable
-   {
-      if (trace) { log.trace("addAsfMessage()"); }
-      
-      MethodInvocation mi = (MethodInvocation)invocation;
-      
-      // Load the session with a message to be processed during a subsequent call to run()
-
-      MessageProxy m = (MessageProxy)mi.getArguments()[0];
-      int theConsumerID = ((Integer)mi.getArguments()[1]).intValue();
-      long channelID = ((Long)mi.getArguments()[2]).longValue();
-      int maxDeliveries = ((Integer)mi.getArguments()[3]).intValue();
-      SessionDelegate connectionConsumerDelegate = ((SessionDelegate)mi.getArguments()[4]);
-      
-      if (m == null)
-      {
-         throw new IllegalStateException("Cannot add a null message to the session");
-      }
-
-      AsfMessageHolder holder = new AsfMessageHolder();
-      holder.msg = m;
-      holder.consumerID = theConsumerID;
-      holder.channelID = channelID;
-      holder.maxDeliveries = maxDeliveries;
-      holder.connectionConsumerDelegate = connectionConsumerDelegate;
-      
-      msgs.add(holder);
-
-      return null;
-   }
-
-   public Object handleRun(Invocation invocation) throws Throwable
-   {
-      if (trace) { log.trace("run()"); }
-      
-      MethodInvocation mi = (MethodInvocation)invocation;
-            
-      //This is the delegate for the session from the pool
-      SessionDelegate del = (SessionDelegate)mi.getTargetObject();
-      
-      int ackMode = getSessionState(invocation).getAcknowledgeMode();
-
-      while (msgs.size() > 0)
-      {
-         AsfMessageHolder holder = (AsfMessageHolder)msgs.removeFirst();
-
-         if (trace) { log.trace("sending " + holder.msg + " to the message listener" ); }
-         
-         MessageCallbackHandler.callOnMessage(del, sessionListener, holder.consumerID,
-                                              holder.channelID, false,
-                                              holder.msg, ackMode, holder.maxDeliveries,
-                                              holder.connectionConsumerDelegate);                          
-      }
-      
-      return null;
-   }
-  
-   // Protected ------------------------------------------------------
-
-   // Package Private ------------------------------------------------
-
-   // Private --------------------------------------------------------
-   
-   private SessionState getSessionState(Invocation inv)
-   {
-      return (SessionState)((DelegateSupport)inv.getTargetObject()).getState();
-   }
-
-   // Inner Classes --------------------------------------------------
-   
-   private static class AsfMessageHolder
-   {
-      private MessageProxy msg;
-      private int consumerID;
-      private long channelID;
-      private int maxDeliveries;
-      private SessionDelegate connectionConsumerDelegate;
-   }
-}

Deleted: trunk/src/main/org/jboss/jms/client/container/FactoryAspect.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/FactoryAspect.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/container/FactoryAspect.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -1,127 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.jms.client.container;
-
-import java.io.Serializable;
-
-import org.jboss.aop.joinpoint.Invocation;
-import org.jboss.aop.joinpoint.MethodInvocation;
-import org.jboss.jms.message.BytesMessageProxy;
-import org.jboss.jms.message.JBossBytesMessage;
-import org.jboss.jms.message.JBossMapMessage;
-import org.jboss.jms.message.JBossMessage;
-import org.jboss.jms.message.JBossObjectMessage;
-import org.jboss.jms.message.JBossStreamMessage;
-import org.jboss.jms.message.JBossTextMessage;
-import org.jboss.jms.message.MapMessageProxy;
-import org.jboss.jms.message.MessageProxy;
-import org.jboss.jms.message.ObjectMessageProxy;
-import org.jboss.jms.message.StreamMessageProxy;
-import org.jboss.jms.message.TextMessageProxy;
-
-/**
- * Constructs various things that can be created entirely or partially on the client.
- * 
- * This aspect is PER_INSTANCE.
- *
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
- * @version <tt>$Revision$</tt>
- * 
- * $Id$
- */
-public class FactoryAspect
-{
-   // Constants -----------------------------------------------------
-
-   // Static --------------------------------------------------------
-   
-   // Attributes ----------------------------------------------------
-   
-   // Constructors --------------------------------------------------
-
-   // Public --------------------------------------------------------
-
-   public Object handleCreateMessage(Invocation invocation) throws Throwable
-   {
-      JBossMessage jbm = new JBossMessage(0);
-       
-      return new MessageProxy(jbm);
-   }
-   
-   public Object handleCreateBytesMessage(Invocation invocation) throws Throwable
-   {
-      JBossBytesMessage jbm = new JBossBytesMessage(0);
-         
-      return new BytesMessageProxy(jbm);
-   }
-   
-   public Object handleCreateMapMessage(Invocation invocation) throws Throwable
-   {
-      JBossMapMessage jbm = new JBossMapMessage(0);
-       
-      return new MapMessageProxy(jbm);      
-   }
-   
-   public Object handleCreateObjectMessage(Invocation invocation) throws Throwable
-   {
-      JBossObjectMessage jbm = new JBossObjectMessage(0);
-       
-      MethodInvocation mi = (MethodInvocation)invocation;
-      
-      if (mi.getArguments() != null)
-      {
-         jbm.setObject((Serializable)mi.getArguments()[0]);
-      }
-      
-      return new ObjectMessageProxy(jbm);
-   }
-   
-   public Object handleCreateStreamMessage(Invocation invocation) throws Throwable
-   {
-      JBossStreamMessage jbm = new JBossStreamMessage(0);
-      
-      return new StreamMessageProxy(jbm);
-   }
-   
-   public Object handleCreateTextMessage(Invocation invocation) throws Throwable
-   {  
-      JBossTextMessage jbm = new JBossTextMessage(0);
-      
-      MethodInvocation mi = (MethodInvocation)invocation;
-      
-      if (mi.getArguments() != null)
-      {
-         jbm.setText((String)mi.getArguments()[0]);
-      }
-      
-      return new TextMessageProxy(jbm);
-   }   
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-   
-   // Private -------------------------------------------------------
-		
-   // Inner classes -------------------------------------------------
-}

Modified: trunk/src/main/org/jboss/jms/client/container/ProducerAspect.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/ProducerAspect.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/container/ProducerAspect.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -50,7 +50,9 @@
  * Handles sending of messages plus handles get and set methods for Producer - 
  * returning state from local cache
  * 
- * This aspect is PER_INSTANCE.
+ * This aspect is PER_VM.
+ * 
+ * Remember! PER_INSTANCE aspects are very expensive so we avoid them.
  *
  * @author <a href="mailto:tim.fox at jboss.com>Tim Fox</a>
  * @version <tt>$Revision$</tt>
@@ -67,11 +69,11 @@
    
    private boolean trace = log.isTraceEnabled();
    
-   protected ProducerState producerState;
+   //protected ProducerState producerState;
    
-   protected ConnectionState connectionState;
+   //protected ConnectionState connectionState;
    
-   protected SessionState sessionState;
+   //protected SessionState sessionState;
    
    // Static --------------------------------------------------------      
    
@@ -166,8 +168,10 @@
 
       m.setJMSDestination(destination);
       
+      SessionState sessionState = (SessionState)producerState.getParent();
+                  
       // Generate the message id
-      ConnectionState connectionState = getConnectionState(invocation);
+      ConnectionState connectionState = (ConnectionState)sessionState.getParent();
       
       long id = connectionState.getIdGenerator().getId();
     
@@ -238,9 +242,7 @@
       {
          m.setJMSMessageID(messageToSend.getJMSMessageID());
       }
-      
-      SessionState sessionState = getSessionState(invocation);
-              
+            
       // we now invoke the send(Message) method on the session, which will eventually be fielded
       // by connection endpoint
       ((SessionDelegate)sessionState.getDelegate()).send(messageToSend, false);
@@ -352,33 +354,11 @@
    
    private ProducerState getProducerState(Invocation inv)
    {
-      if (producerState == null)
-      {
-         producerState = (ProducerState)((DelegateSupport)inv.getTargetObject()).getState();
-      }
+      ProducerState producerState = (ProducerState)((DelegateSupport)inv.getTargetObject()).getState();
+      
       return producerState;
    }
    
-   private ConnectionState getConnectionState(Invocation inv)
-   {
-      if (connectionState == null)
-      {
-         connectionState = 
-            (ConnectionState)((DelegateSupport)inv.getTargetObject()).getState().getParent().getParent();
-      }
-      return connectionState;
-   }
-   
-   private SessionState getSessionState(Invocation inv)
-   {
-      if (sessionState == null)
-      {
-         sessionState = 
-            (SessionState)((DelegateSupport)inv.getTargetObject()).getState().getParent();
-      }
-      return sessionState;
-   }
-   
    // Inner Classes -------------------------------------------------
    
 }

Modified: trunk/src/main/org/jboss/jms/client/container/SessionAspect.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/SessionAspect.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/container/SessionAspect.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -21,17 +21,22 @@
   */
 package org.jboss.jms.client.container;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
 import javax.jms.IllegalStateException;
 import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.ServerSessionPool;
 import javax.jms.Session;
 import javax.jms.TransactionInProgressException;
 
 import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.jms.client.JBossConnectionConsumer;
 import org.jboss.jms.client.delegate.ClientSessionDelegate;
 import org.jboss.jms.client.delegate.DelegateSupport;
 import org.jboss.jms.client.remoting.MessageCallbackHandler;
@@ -39,8 +44,19 @@
 import org.jboss.jms.client.state.SessionState;
 import org.jboss.jms.delegate.ConnectionDelegate;
 import org.jboss.jms.delegate.SessionDelegate;
+import org.jboss.jms.destination.JBossDestination;
+import org.jboss.jms.message.BytesMessageProxy;
+import org.jboss.jms.message.JBossBytesMessage;
+import org.jboss.jms.message.JBossMapMessage;
 import org.jboss.jms.message.JBossMessage;
+import org.jboss.jms.message.JBossObjectMessage;
+import org.jboss.jms.message.JBossStreamMessage;
+import org.jboss.jms.message.JBossTextMessage;
+import org.jboss.jms.message.MapMessageProxy;
 import org.jboss.jms.message.MessageProxy;
+import org.jboss.jms.message.ObjectMessageProxy;
+import org.jboss.jms.message.StreamMessageProxy;
+import org.jboss.jms.message.TextMessageProxy;
 import org.jboss.jms.server.endpoint.DefaultCancel;
 import org.jboss.jms.server.endpoint.DeliveryInfo;
 import org.jboss.jms.tx.LocalTx;
@@ -112,8 +128,7 @@
       //any deliveries - this is because the message listener might have closed
       //before on message had finished executing
       
-      if (ackMode == Session.AUTO_ACKNOWLEDGE ||
-          ackMode == Session.DUPS_OK_ACKNOWLEDGE)
+      if (ackMode == Session.AUTO_ACKNOWLEDGE)
       {
          //Acknowledge or cancel any outstanding auto ack
          
@@ -123,13 +138,36 @@
          {
             if (trace) { log.trace(this + " handleClosing(). Found remaining auto ack. Will ack " + remainingAutoAck); }
             
-            ackDelivery(del, remainingAutoAck);            
-                        
-            if (trace) { log.trace(this + " acked it"); }
-            
-            state.setAutoAckInfo(null);
+            try
+            {
+               ackDelivery(del, remainingAutoAck);
+               
+               if (trace) { log.trace(this + " acked it"); }               
+            }
+            finally
+            {                        
+               state.setAutoAckInfo(null);
+            }
          }
       }
+      else if (ackMode == Session.DUPS_OK_ACKNOWLEDGE)
+      {
+         //Ack any remaining deliveries
+                          
+         if (!state.getClientAckList().isEmpty())
+         {               
+            try
+            {
+               del.acknowledgeDeliveries(state.getClientAckList());
+            }
+            finally
+            {            
+               state.getClientAckList().clear();
+               
+               state.setAutoAckInfo(null);
+            }
+         }
+      }
       else if (ackMode == Session.CLIENT_ACKNOWLEDGE)
       {
          // Cancel any oustanding deliveries
@@ -210,16 +248,23 @@
                   
          state.getClientAckList().add(info);
       }
-      else if (ackMode == Session.AUTO_ACKNOWLEDGE ||
-               ackMode == Session.DUPS_OK_ACKNOWLEDGE)
+      else if (ackMode == Session.AUTO_ACKNOWLEDGE)
       {
-         // We collect the single acknowledgement in the state. Currently DUPS_OK is treated the
-         // same as AUTO_ACKNOWLDGE.
+         // We collect the single acknowledgement in the state. 
                            
          if (trace) { log.trace(this + " added " + info + " to session state"); }
          
          state.setAutoAckInfo(info);         
       }
+      else if (ackMode == Session.DUPS_OK_ACKNOWLEDGE)
+      {
+         if (trace) { log.trace(this + " added to DUPS_OK_ACKNOWLEDGE list delivery " + info); }
+         
+         state.getClientAckList().add(info);
+         
+         //Also set here - this would be used for recovery in a message listener
+         state.setAutoAckInfo(info);
+      }
       else
       {             
          Object txID = state.getCurrentTxId();
@@ -258,10 +303,9 @@
       
       int ackMode = state.getAcknowledgeMode();
       
-      if (ackMode == Session.AUTO_ACKNOWLEDGE ||
-          ackMode == Session.DUPS_OK_ACKNOWLEDGE)
+      if (ackMode == Session.AUTO_ACKNOWLEDGE)
       {
-         // We auto acknowledge. Currently DUPS_OK is treated the same as AUTO_ACKNOWLDGE.
+         // We auto acknowledge.
 
          SessionDelegate sd = (SessionDelegate)mi.getTargetObject();
 
@@ -279,21 +323,62 @@
                                  
             if (trace) { log.trace(this + " auto acknowledging delivery " + delivery); }
               
+
+            // We clear the state in a finally so then we don't get a knock on
+            // exception on the next ack since we haven't cleared the state. See
+            // http://jira.jboss.org/jira/browse/JBMESSAGING-852
+
+            //This is ok since the message is acked after delivery, then the client
+            //could get duplicates anyway
+            
             try
             {
                ackDelivery(sd, delivery);
             }
             finally
             {
-               state.setAutoAckInfo(null);
+               state.setAutoAckInfo(null);               
             }
+         }         
+         else
+         {
+            if (trace) { log.trace(this + " recover called, so NOT acknowledging"); }
+
+            state.setRecoverCalled(false);
          }
+      }
+      else if (ackMode == Session.DUPS_OK_ACKNOWLEDGE)
+      {
+         List acks = state.getClientAckList();
+         
+         if (!state.isRecoverCalled())
+         {
+            if (acks.size() >= state.getDupsOKBatchSize())
+            {
+               // We clear the state in a finally
+               // http://jira.jboss.org/jira/browse/JBMESSAGING-852
+   
+               SessionDelegate sd = (SessionDelegate)mi.getTargetObject();
+                                          
+               try
+               {
+                  sd.acknowledgeDeliveries(acks);
+               }
+               finally
+               {                  
+                  acks.clear();
+                  state.setAutoAckInfo(null);
+               }
+            }    
+         }
          else
          {
             if (trace) { log.trace(this + " recover called, so NOT acknowledging"); }
 
             state.setRecoverCalled(false);
          }
+         state.setAutoAckInfo(null);
+                  
       }
 
       return null;
@@ -341,16 +426,18 @@
       //Call redeliver
       SessionDelegate del = (SessionDelegate)mi.getTargetObject();
       
-      if (state.getAcknowledgeMode() == Session.CLIENT_ACKNOWLEDGE)
+      int ackMode = state.getAcknowledgeMode();
+      
+      if (ackMode == Session.CLIENT_ACKNOWLEDGE)
       {
-         del.redeliver(state.getClientAckList());
+         List dels = state.getClientAckList();
          
-         state.getClientAckList().clear();
+         state.setClientAckList(new ArrayList());
+         
+         del.redeliver(dels);
       }
-      else
+      else if (ackMode == Session.AUTO_ACKNOWLEDGE || ackMode == Session.DUPS_OK_ACKNOWLEDGE)
       {
-         //auto_ack or dups_ok
-         
          DeliveryInfo info = state.getAutoAckInfo();
          
          //Don't recover if it's already to cancel
@@ -365,8 +452,8 @@
             
             state.setAutoAckInfo(null);            
          }
-      }            
-
+      }   
+        
       state.setRecoverCalled(true);
       
       return null;  
@@ -550,7 +637,170 @@
    {
       return new Integer(getState(invocation).getAcknowledgeMode());
    }
+   
+   public Object handleCreateMessage(Invocation invocation) throws Throwable
+   {
+      JBossMessage jbm = new JBossMessage(0);
+       
+      return new MessageProxy(jbm);
+   }
+   
+   public Object handleCreateBytesMessage(Invocation invocation) throws Throwable
+   {
+      JBossBytesMessage jbm = new JBossBytesMessage(0);
+         
+      return new BytesMessageProxy(jbm);
+   }
+   
+   public Object handleCreateMapMessage(Invocation invocation) throws Throwable
+   {
+      JBossMapMessage jbm = new JBossMapMessage(0);
+       
+      return new MapMessageProxy(jbm);      
+   }
+   
+   public Object handleCreateObjectMessage(Invocation invocation) throws Throwable
+   {
+      JBossObjectMessage jbm = new JBossObjectMessage(0);
+       
+      MethodInvocation mi = (MethodInvocation)invocation;
+      
+      if (mi.getArguments() != null)
+      {
+         jbm.setObject((Serializable)mi.getArguments()[0]);
+      }
+      
+      return new ObjectMessageProxy(jbm);
+   }
+   
+   public Object handleCreateStreamMessage(Invocation invocation) throws Throwable
+   {
+      JBossStreamMessage jbm = new JBossStreamMessage(0);
+      
+      return new StreamMessageProxy(jbm);
+   }
+   
+   public Object handleCreateTextMessage(Invocation invocation) throws Throwable
+   {  
+      JBossTextMessage jbm = new JBossTextMessage(0);
+      
+      MethodInvocation mi = (MethodInvocation)invocation;
+      
+      if (mi.getArguments() != null)
+      {
+         jbm.setText((String)mi.getArguments()[0]);
+      }
+      
+      return new TextMessageProxy(jbm);
+   }   
+   
+   
+   
+   public Object handleSetMessageListener(Invocation invocation) throws Throwable
+   {
+      if (trace) { log.trace("setMessageListener()"); }
+      
+      MethodInvocation mi = (MethodInvocation)invocation;
+      
+      MessageListener listener = (MessageListener)mi.getArguments()[0];
+      
+      if (listener == null)
+      {
+         throw new IllegalStateException("Cannot set a null MessageListener on the session");
+      }
+      
+      getState(invocation).setDistinguishedListener(listener);
+      
+      return null;
+   }
+   
+   public Object handleGetMessageListener(Invocation invocation) throws Throwable
+   {
+      if (trace) { log.trace("getMessageListener()"); }
+      
+      return getState(invocation).getDistinguishedListener();
+   }
+   
+   public Object handleCreateConnectionConsumer(Invocation invocation) throws Throwable
+   {
+      if (trace) { log.trace("createConnectionConsumer()"); }
+      
+      MethodInvocation mi = (MethodInvocation)invocation;
+      
+      JBossDestination dest = (JBossDestination)mi.getArguments()[0];
+      String subscriptionName = (String)mi.getArguments()[1];
+      String messageSelector = (String)mi.getArguments()[2];
+      ServerSessionPool sessionPool = (ServerSessionPool)mi.getArguments()[3];
+      int maxMessages = ((Integer)mi.getArguments()[4]).intValue();
+      
+      return new JBossConnectionConsumer((ConnectionDelegate)mi.getTargetObject(), dest,
+                                         subscriptionName, messageSelector, sessionPool,
+                                         maxMessages);
+   }
+   
+   public Object handleAddAsfMessage(Invocation invocation) throws Throwable
+   {
+      if (trace) { log.trace("addAsfMessage()"); }
+      
+      MethodInvocation mi = (MethodInvocation)invocation;
+      
+      // Load the session with a message to be processed during a subsequent call to run()
 
+      MessageProxy m = (MessageProxy)mi.getArguments()[0];
+      int theConsumerID = ((Integer)mi.getArguments()[1]).intValue();
+      long channelID = ((Long)mi.getArguments()[2]).longValue();
+      int maxDeliveries = ((Integer)mi.getArguments()[3]).intValue();
+      SessionDelegate connectionConsumerDelegate = ((SessionDelegate)mi.getArguments()[4]);
+      
+      if (m == null)
+      {
+         throw new IllegalStateException("Cannot add a null message to the session");
+      }
+
+      AsfMessageHolder holder = new AsfMessageHolder();
+      holder.msg = m;
+      holder.consumerID = theConsumerID;
+      holder.channelID = channelID;
+      holder.maxDeliveries = maxDeliveries;
+      holder.connectionConsumerDelegate = connectionConsumerDelegate;
+      
+      getState(invocation).getASFMessages().add(holder);
+      
+      return null;
+   }
+
+   public Object handleRun(Invocation invocation) throws Throwable
+   {
+      if (trace) { log.trace("run()"); }
+      
+      MethodInvocation mi = (MethodInvocation)invocation;
+            
+      //This is the delegate for the session from the pool
+      SessionDelegate del = (SessionDelegate)mi.getTargetObject();
+      
+      SessionState state = getState(invocation);
+      
+      int ackMode = state.getAcknowledgeMode();
+
+      LinkedList msgs = state.getASFMessages();
+      
+      while (msgs.size() > 0)
+      {
+         AsfMessageHolder holder = (AsfMessageHolder)msgs.removeFirst();
+
+         if (trace) { log.trace("sending " + holder.msg + " to the message listener" ); }
+         
+         MessageCallbackHandler.callOnMessage(del, state.getDistinguishedListener(), holder.consumerID,
+                                              holder.channelID, false,
+                                              holder.msg, ackMode, holder.maxDeliveries,
+                                              holder.connectionConsumerDelegate);                          
+      }
+      
+      return null;
+   }
+   
+   
+
    public String toString()
    {
       return "SessionAspect[" + Integer.toHexString(hashCode()) + "]";
@@ -619,5 +869,14 @@
 
    // Inner Classes -------------------------------------------------
    
+   private static class AsfMessageHolder
+   {
+      private MessageProxy msg;
+      private int consumerID;
+      private long channelID;
+      private int maxDeliveries;
+      private SessionDelegate connectionConsumerDelegate;
+   }
+   
 }
 

Modified: trunk/src/main/org/jboss/jms/client/container/StateCreationAspect.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/StateCreationAspect.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/container/StateCreationAspect.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -138,7 +138,7 @@
       boolean xa = ((Boolean)mi.getArguments()[2]).booleanValue();
 
       SessionState sessionState =
-         new SessionState(connectionState, sessionDelegate, transacted, ackMode, xa);
+         new SessionState(connectionState, sessionDelegate, transacted, ackMode, xa, sessionDelegate.getDupsOKBatchSize());
 
       delegate.setState(sessionState);
       return delegate;
@@ -152,7 +152,7 @@
       SessionState sessionState = (SessionState)getState(invocation);
 
       MethodInvocation mi = (MethodInvocation)invocation;
-      Destination dest = (Destination)mi.getArguments()[0];
+      JBossDestination dest = (JBossDestination)mi.getArguments()[0];
       String selector = (String)mi.getArguments()[1];
       boolean noLocal = ((Boolean)mi.getArguments()[2]).booleanValue();
       String subscriptionName = (String)mi.getArguments()[3];

Modified: trunk/src/main/org/jboss/jms/client/delegate/ClientSessionDelegate.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/delegate/ClientSessionDelegate.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/delegate/ClientSessionDelegate.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -21,6 +21,8 @@
   */
 package org.jboss.jms.client.delegate;
 
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
 import java.io.Serializable;
 import java.util.List;
 
@@ -63,6 +65,7 @@
 import org.jboss.jms.wireformat.SessionRecoverDeliveriesRequest;
 import org.jboss.jms.wireformat.SessionSendRequest;
 import org.jboss.jms.wireformat.SessionUnsubscribeRequest;
+import org.jboss.logging.Logger;
 
 /**
  * The client-side Session delegate class.
@@ -80,16 +83,23 @@
    // Constants ------------------------------------------------------------------------------------
 
    private static final long serialVersionUID = -8096852898620279131L;
+   
+   private static final Logger log = Logger.getLogger(ClientSessionDelegate.class);
+   
 
    // Attributes -----------------------------------------------------------------------------------
+   
+   private int dupsOKBatchSize;
 
    // Static ---------------------------------------------------------------------------------------
 
    // Constructors ---------------------------------------------------------------------------------
 
-   public ClientSessionDelegate(int objectID)
+   public ClientSessionDelegate(int objectID, int dupsOKBatchSize)
    {
       super(objectID);
+      
+      this.dupsOKBatchSize = dupsOKBatchSize;
    }
 
    public ClientSessionDelegate()
@@ -457,13 +467,35 @@
 
       doInvoke(client, req);
    }
+   
+   // Streamable overrides -------------------------------------------------------------------------
 
+   public void read(DataInputStream in) throws Exception
+   {
+      super.read(in);
+      
+      dupsOKBatchSize = in.readInt();
+   }
+
+   public void write(DataOutputStream out) throws Exception
+   {
+      super.write(out);
+      
+      out.writeInt(dupsOKBatchSize);
+   }
+
    // Public ---------------------------------------------------------------------------------------
 
+   public int getDupsOKBatchSize()
+   {
+      return dupsOKBatchSize;
+   }
+   
    public String toString()
    {
       return "SessionDelegate[" + id + "]";
    }
+   
 
    // Protected ------------------------------------------------------------------------------------
 

Modified: trunk/src/main/org/jboss/jms/client/remoting/ClientSocketWrapper.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/remoting/ClientSocketWrapper.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/remoting/ClientSocketWrapper.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -124,16 +124,26 @@
    protected DataInputStream createInputStream(Socket socket)
          throws IOException
    {
-      BufferedInputStream bin = new BufferedInputStream(socket.getInputStream());
+      //We make sure the buffer is big (default is 8192)- remember we flush after every request
+      //or response so this is ok.
+      //We want to avoid flushes at other times
+      //TODO this could be made configurable
       
+      BufferedInputStream bin = new BufferedInputStream(socket.getInputStream(), 65536);
+      
       return new DataInputStream(bin);
    }
 
    protected DataOutputStream createOutputStream(Socket socket)
          throws IOException
    {
-      BufferedOutputStream bout = new BufferedOutputStream(socket.getOutputStream());
+      //We make sure the buffer is big (default is 8192)- remember we flush after every request
+      //or response so this is ok.
+      //We want to avoid flushes at other times
+      //TODO this could be made configurable
       
+      BufferedOutputStream bout = new BufferedOutputStream(socket.getOutputStream(), 65536);
+      
       return new DataOutputStream(bout);
    }
 

Modified: trunk/src/main/org/jboss/jms/client/remoting/MessageCallbackHandler.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/remoting/MessageCallbackHandler.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/remoting/MessageCallbackHandler.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -199,8 +199,8 @@
    private int maxDeliveries;
    private long channelID;
    private long lastDeliveryId = -1;
-   //private volatile boolean sentFull;
-   //private volatile boolean sentEmpty;
+   private volatile boolean serverSending = true;
+   
         
    // Constructors ---------------------------------------------------------------------------------
 
@@ -471,58 +471,14 @@
       } 
       
       //This needs to be outside the lock
+
       checkStart();
       
       if (trace) { log.trace(this + " receive() returning " + m); }
       
       return m;
    } 
-   
-   private volatile boolean serverSending = true;
-   
-   private void checkStop()
-   {
-      int size = buffer.size();
-      
-      if (serverSending && size >= maxBufferSize)
-      {
-         //Our buffer is full - we need to tell the server to stop sending if we haven't
-         //done so already
          
-         sendChangeRateMessage(0f);
-         
-         serverSending = false;
-      }
-   }
-   
-   private void checkStart()
-   {
-      int size = buffer.size();
-      
-      if (!serverSending && size <= minBufferSize)
-      {
-         //We need more messages - we need to tell the server this if we haven't done so already
-         
-         sendChangeRateMessage(1.0f);
-         
-         serverSending = true;
-      }      
-   }
-   
-   private void sendChangeRateMessage(float newRate) 
-   {
-      try
-      {
-         // this invocation will be sent asynchronously to the server; it's DelegateSupport.invoke()
-         // job to detect it and turn it into a remoting one way invocation.
-         consumerDelegate.changeRate(newRate);
-      }
-      catch (JMSException e)
-      {
-         log.error("Failed to send changeRate message", e);
-      }
-   }
-   
    public MessageListener getMessageListener()
    {
       return listener;      
@@ -583,6 +539,53 @@
             
    // Private --------------------------------------------------------------------------------------
    
+   private void checkStop()
+   {
+      int size = buffer.size();
+      
+      if (serverSending && size >= maxBufferSize)
+      {
+         //Our buffer is full - we need to tell the server to stop sending if we haven't
+         //done so already
+         
+         sendChangeRateMessage(0f);
+         
+         if (trace) { log.trace("Sent changeRate 0 message"); }
+         
+         serverSending = false;
+      }
+   }
+   
+   private void checkStart()
+   {
+      int size = buffer.size();
+      
+      if (!serverSending && size <= minBufferSize)
+      {
+         //We need more messages - we need to tell the server this if we haven't done so already
+         
+         sendChangeRateMessage(1.0f);
+         
+         if (trace) { log.trace("Sent changeRate 1.0 message"); }
+         
+         serverSending = true;
+      }      
+   }
+   
+   private void sendChangeRateMessage(float newRate) 
+   {
+      try
+      {
+         // this invocation will be sent asynchronously to the server; it's DelegateSupport.invoke()
+         // job to detect it and turn it into a remoting one way invocation.
+         consumerDelegate.changeRate(newRate);
+      }
+      catch (JMSException e)
+      {
+         log.error("Failed to send changeRate message", e);
+      }
+   }
+   
    private void waitForOnMessageToComplete()
    {
       // Wait for any onMessage() executions to complete

Modified: trunk/src/main/org/jboss/jms/client/state/ConsumerState.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/state/ConsumerState.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/state/ConsumerState.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -25,11 +25,12 @@
 
 import javax.jms.Destination;
 
+import org.jboss.jms.client.delegate.ClientConnectionDelegate;
 import org.jboss.jms.client.delegate.DelegateSupport;
-import org.jboss.jms.client.delegate.ClientConnectionDelegate;
+import org.jboss.jms.client.remoting.CallbackManager;
 import org.jboss.jms.client.remoting.MessageCallbackHandler;
-import org.jboss.jms.client.remoting.CallbackManager;
 import org.jboss.jms.delegate.ConsumerDelegate;
+import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.server.Version;
 
 /**
@@ -60,6 +61,8 @@
    private int bufferSize;
    private int maxDeliveries;
 
+   private boolean storingDeliveries;
+   
    // Needed for failover
    private long channelID;
 
@@ -68,7 +71,7 @@
 
    // Constructors ---------------------------------------------------------------------------------
 
-   public ConsumerState(SessionState parent, ConsumerDelegate delegate, Destination dest,
+   public ConsumerState(SessionState parent, ConsumerDelegate delegate, JBossDestination dest,
                         String selector, boolean noLocal, String subscriptionName, int consumerID,
                         boolean isCC, int bufferSize, int maxDeliveries, long channelID)
    {
@@ -83,6 +86,17 @@
       this.subscriptionName=subscriptionName;
       this.maxDeliveries = maxDeliveries;
       this.channelID = channelID;
+      
+      //We don't store deliveries if this a non durable subscriber
+      
+      if (dest.isTopic() && subscriptionName == null)
+      {
+         storingDeliveries = false;
+      }
+      else
+      {
+         storingDeliveries = true;
+      }
    }
 
    // HierarchicalState implementation -------------------------------------------------------------
@@ -197,6 +211,11 @@
    {
       return channelID;
    }
+   
+   public boolean isStoringDeliveries()
+   {
+      return storingDeliveries;
+   }
 
    // Package protected ----------------------------------------------------------------------------
 

Modified: trunk/src/main/org/jboss/jms/client/state/SessionState.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/state/SessionState.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/client/state/SessionState.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -22,33 +22,35 @@
 package org.jboss.jms.client.state;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Iterator;
-import java.util.Collections;
 
+import javax.jms.MessageListener;
+import javax.jms.Session;
+
+import org.jboss.jms.client.delegate.ClientBrowserDelegate;
+import org.jboss.jms.client.delegate.ClientConsumerDelegate;
+import org.jboss.jms.client.delegate.ClientProducerDelegate;
 import org.jboss.jms.client.delegate.ClientSessionDelegate;
 import org.jboss.jms.client.delegate.DelegateSupport;
-import org.jboss.jms.client.delegate.ClientConsumerDelegate;
-import org.jboss.jms.client.delegate.ClientProducerDelegate;
-import org.jboss.jms.client.delegate.ClientBrowserDelegate;
 import org.jboss.jms.client.remoting.MessageCallbackHandler;
 import org.jboss.jms.delegate.SessionDelegate;
+import org.jboss.jms.destination.JBossDestination;
 import org.jboss.jms.server.Version;
 import org.jboss.jms.server.endpoint.DeliveryInfo;
 import org.jboss.jms.server.endpoint.DeliveryRecovery;
 import org.jboss.jms.tx.MessagingXAResource;
 import org.jboss.jms.tx.ResourceManager;
-import org.jboss.jms.destination.JBossDestination;
 import org.jboss.logging.Logger;
 
 import EDU.oswego.cs.dl.util.concurrent.LinkedQueue;
 import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 
-import javax.jms.Session;
-
 /**
  * State corresponding to a session. This state is acessible inside aspects/interceptors.
  * 
@@ -85,18 +87,25 @@
    private QueuedExecutor executor;
 
    private boolean recoverCalled;
-
+   
    // List<DeliveryInfo>
    private List clientAckList;
 
    private DeliveryInfo autoAckInfo;
    private Map callbackHandlers;
-
-
+   
+   private int dupsOKBatchSize;
+   
+   private LinkedList asfMessages = new LinkedList();
+   
+   //The distinguished message listener - for ASF
+   private MessageListener sessionListener;
+      
    // Constructors ---------------------------------------------------------------------------------
 
    public SessionState(ConnectionState parent, ClientSessionDelegate delegate,
-                       boolean transacted, int ackMode, boolean xa)
+                       boolean transacted, int ackMode, boolean xa,
+                       int dupsOKBatchSize)
    {
       super(parent, (DelegateSupport)delegate);
 
@@ -106,6 +115,8 @@
       this.acknowledgeMode = ackMode;
       this.transacted = transacted;
       this.xa = xa;
+      
+      this.dupsOKBatchSize = dupsOKBatchSize;
 
       if (xa)
       {
@@ -157,6 +168,26 @@
    {
       return parent.getVersionToUse();
    }
+   
+   public int getDupsOKBatchSize()
+   {
+      return dupsOKBatchSize;
+   }
+   
+   public MessageListener getDistinguishedListener()
+   {
+      return this.sessionListener;
+   }
+   
+   public void setDistinguishedListener(MessageListener listener)
+   {
+      this.sessionListener = listener;
+   }
+   
+   public LinkedList getASFMessages()
+   {
+      return asfMessages;
+   }
 
    // HierarchicalStateSupport overrides -----------------------------------------------------------
 
@@ -316,6 +347,11 @@
    {
       return clientAckList;
    }
+   
+   public void setClientAckList(List list)
+   {
+      this.clientAckList = list;
+   }
 
    public DeliveryInfo getAutoAckInfo()
    {
@@ -395,7 +431,7 @@
    {
       return sessionID;
    }
-
+   
    public String toString()
    {
       return "SessionState[" + sessionID + "]";

Modified: trunk/src/main/org/jboss/jms/server/ConnectionFactoryManager.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/ConnectionFactoryManager.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/ConnectionFactoryManager.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -21,8 +21,8 @@
   */
 package org.jboss.jms.server;
 
+import org.jboss.jms.client.plugin.LoadBalancingFactory;
 import org.jboss.jms.server.connectionfactory.JNDIBindings;
-import org.jboss.jms.client.plugin.LoadBalancingFactory;
 import org.jboss.messaging.core.plugin.contract.MessagingComponent;
 
 /**
@@ -44,6 +44,7 @@
                                  int defaultTempQueueFullSize,
                                  int defaultTempQueuePageSize,
                                  int defaultTempQueueDownCacheSize,
+                                 int dupsOKBatchSize,
                                  boolean clustered,
                                  LoadBalancingFactory loadBalancingPolicy) throws Exception;
 

Deleted: trunk/src/main/org/jboss/jms/server/QueuedExecutorPool.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/QueuedExecutorPool.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/QueuedExecutorPool.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -1,68 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.jms.server;
-
-import org.jboss.messaging.util.RotatingPool;
-
-import EDU.oswego.cs.dl.util.concurrent.LinkedQueue;
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
-/**
- * A QueuedExecutorPool
-
- * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
- * @version <tt>$Revision$</tt>
- *
- * $Id$
- *
- */
-public class QueuedExecutorPool extends RotatingPool
-{
-   public QueuedExecutorPool(int maxSize)
-   {
-      super(maxSize);
-   }
-   
-   protected Object createEntry()
-   {
-      //We make sure the executor queue is not bounded
-      //otherwise we could end up with everything grinding to a halt if the
-      //same executor  is shared by many consumers and it gets full
-      //The default bounded linked queue will block
-      return new QueuedExecutor(new LinkedQueue());
-   }
-   
-   public void shutdown()
-   {
-      for (int i = 0; i < entries.length; i++)
-      {
-         QueuedExecutor q = (QueuedExecutor)entries[i];
-         
-         if (q != null)
-         {
-            q.shutdownAfterProcessingCurrentlyQueuedTasks();
-         }
-      }
-      
-      entries = null;
-   }
-}

Modified: trunk/src/main/org/jboss/jms/server/ServerPeer.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/ServerPeer.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/ServerPeer.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -112,8 +112,6 @@
    private String defaultQueueJNDIContext;
    private String defaultTopicJNDIContext;
 
-   private int queuedExecutorPoolSize = 200;
-
    private boolean started;
 
    private int objectIDSequence = 1;
@@ -147,8 +145,7 @@
    private IDManager messageIDManager;
    private IDManager channelIDManager;
    private IDManager transactionIDManager;
-   private MemoryManager memoryManager;
-   private QueuedExecutorPool queuedExecutorPool;
+   private MemoryManager memoryManager;  
    private MessageStore messageStore;
    private MessageCounterManager messageCounterManager;
 
@@ -217,12 +214,6 @@
 
          log.debug(this + " starting");
 
-         if (queuedExecutorPoolSize < 1)
-         {
-            throw new IllegalArgumentException("queuedExecutorPoolSize must be > 0");
-         }
-         queuedExecutorPool = new QueuedExecutorPool(queuedExecutorPoolSize);
-
          loadClientAOPConfig();
 
          loadServerAOPConfig();
@@ -334,8 +325,6 @@
 
          // TODO unloadClientAOPConfig();
 
-         queuedExecutorPool.shutdown();
-         
          MessagingTimeoutFactory.instance.reset();
 
          log.info("JMS " + this + " stopped");
@@ -503,21 +492,6 @@
       return securityStore.getDefaultSecurityConfig();
    }
         
-   public synchronized int getQueuedExecutorPoolSize()
-   {
-      return queuedExecutorPoolSize;
-   }
-
-   public synchronized void setQueuedExecutorPoolSize(int poolSize)
-   {
-      if (started)
-      {
-         log.warn("Cannot set jms queued executor pool size on server peer when server peer is started");
-         return;         
-      }
-      this.queuedExecutorPoolSize = poolSize;
-   }
-   
    public synchronized long getFailoverStartTimeout()
    {
       return this.failoverStartTimeout;
@@ -1145,11 +1119,6 @@
       return objectIDSequence++;
    }
 
-   public QueuedExecutorPool getQueuedExecutorPool()
-   {
-      return queuedExecutorPool;
-   }
-   
    /*
     * Wait for failover from the specified node to complete.
     */

Modified: trunk/src/main/org/jboss/jms/server/ServerPeerMBean.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/ServerPeerMBean.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/ServerPeerMBean.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -88,11 +88,7 @@
    ObjectName getDefaultExpiryQueue();
 
    void setDefaultExpiryQueue(ObjectName on);
-
-   int getQueuedExecutorPoolSize();
-
-   void setQueuedExecutorPoolSize(int poolSize);
-   
+ 
    long getFailoverStartTimeout();
    
    void setFailoverStartTimeout(long timeout);

Modified: trunk/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactory.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactory.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactory.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -7,12 +7,13 @@
 package org.jboss.jms.server.connectionfactory;
 
 import javax.management.ObjectName;
+
+import org.jboss.jms.client.plugin.LoadBalancingFactory;
 import org.jboss.jms.server.ConnectionFactoryManager;
 import org.jboss.jms.server.ConnectionManager;
 import org.jboss.jms.server.ConnectorManager;
 import org.jboss.jms.server.ServerPeer;
 import org.jboss.jms.util.ExceptionUtil;
-import org.jboss.jms.client.plugin.LoadBalancingFactory;
 import org.jboss.remoting.InvokerLocator;
 import org.jboss.system.ServiceMBeanSupport;
 import org.w3c.dom.Element;
@@ -40,9 +41,11 @@
    protected boolean clustered;
    protected LoadBalancingFactory loadBalancingFactory;
    
-   protected int defaultTempQueueFullSize = 75000;
+   protected int defaultTempQueueFullSize = 200000;
    protected int defaultTempQueuePageSize = 2000;
    protected int defaultTempQueueDownCacheSize = 2000;
+   
+   protected int dupsOKBatchSize = 1000;
 
    protected ObjectName serverPeerObjectName;
    protected ConnectionFactoryManager connectionFactoryManager;
@@ -124,8 +127,8 @@
          connectionFactoryManager.
             registerConnectionFactory(getServiceName().getCanonicalName(), clientID, jndiBindings,
                                       locatorURI, enablePing, prefetchSize,
-                                      defaultTempQueueFullSize, defaultTempQueuePageSize,
-                                      defaultTempQueueDownCacheSize, clustered,
+                                      defaultTempQueueFullSize, defaultTempQueuePageSize,                                      
+                                      defaultTempQueueDownCacheSize, dupsOKBatchSize, clustered,
                                       loadBalancingFactory);
       
          InvokerLocator locator = new InvokerLocator(locatorURI);
@@ -296,6 +299,22 @@
       
       loadBalancingFactory = (LoadBalancingFactory)clz.newInstance();
    }
+   
+   public void setDupsOKBatchSize(int size) throws Exception
+   {
+      if (started)
+      {
+         log.warn("DupsOKBatchSize can only be changed when connection factory is stopped");
+         return;
+      }
+      
+      this.dupsOKBatchSize = size;
+   }
+   
+   public int getDupsOKBatchSize()
+   {
+      return this.dupsOKBatchSize;
+   }
 
    // JMX managed operations -----------------------------------------------------------------------
 

Modified: trunk/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -118,6 +118,7 @@
                                                       int defaultTempQueueFullSize,
                                                       int defaultTempQueuePageSize,
                                                       int defaultTempQueueDownCacheSize,
+                                                      int dupsOKBatchSize,
                                                       boolean clustered,
                                                       LoadBalancingFactory loadBalancingFactory)
       throws Exception
@@ -140,7 +141,8 @@
                                              jndiBindings, prefetchSize,
                                              defaultTempQueueFullSize,
                                              defaultTempQueuePageSize,
-                                             defaultTempQueueDownCacheSize);
+                                             defaultTempQueueDownCacheSize,
+                                             dupsOKBatchSize);
       endpoints.put(uniqueName, endpoint);
 
       ConnectionFactoryDelegate delegate = null;

Modified: trunk/src/main/org/jboss/jms/server/destination/DestinationServiceSupport.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/destination/DestinationServiceSupport.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/destination/DestinationServiceSupport.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -12,7 +12,6 @@
 import javax.management.ObjectName;
 
 import org.jboss.jms.server.DestinationManager;
-import org.jboss.jms.server.QueuedExecutorPool;
 import org.jboss.jms.server.SecurityManager;
 import org.jboss.jms.server.ServerPeer;
 import org.jboss.jms.server.messagecounter.MessageCounter;
@@ -68,8 +67,6 @@
    
    protected PersistenceManager pm;
    
-   protected QueuedExecutorPool pool;
-   
    protected MessageStore ms;
    
    protected TransactionRepository tr;
@@ -114,9 +111,7 @@
          sm = serverPeer.getSecurityManager();
          
          pm = serverPeer.getPersistenceManagerInstance(); 
-         
-         pool = serverPeer.getQueuedExecutorPool();
-         
+           
          ms = serverPeer.getMessageStore();
          
          tr = serverPeer.getTxRepository();

Modified: trunk/src/main/org/jboss/jms/server/destination/ManagedDestination.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/destination/ManagedDestination.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/destination/ManagedDestination.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -51,7 +51,7 @@
    protected static final int NON_DURABLE = 2;
    
       
-   private static final int DEFAULT_FULL_SIZE = 75000;
+   private static final int DEFAULT_FULL_SIZE = 200000;
    
    private static final int DEFAULT_PAGE_SIZE = 2000;
    

Modified: trunk/src/main/org/jboss/jms/server/destination/QueueService.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/destination/QueueService.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/destination/QueueService.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -22,8 +22,6 @@
 import org.jboss.messaging.core.plugin.postoffice.Binding;
 import org.jboss.messaging.core.plugin.postoffice.cluster.LocalClusteredQueue;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * MBean wrapper around a ManagedQueue
  *
@@ -92,9 +90,7 @@
             queue.activate();
          }
          else
-         {         
-            QueuedExecutor executor = (QueuedExecutor)pool.get();
-            
+         {                                 
             // Create a new queue
             
             JMSCondition queueCond = new JMSCondition(true, destination.getName());
@@ -102,16 +98,16 @@
             if (postOffice.isLocal())
             {
                queue = new PagingFilteredQueue(destination.getName(),
-                                               idm.getID(), ms, pm, true, true, executor,
+                                               idm.getID(), ms, pm, true, true,
                                                destination.getMaxSize(), null,
                                                destination.getFullSize(), destination.getPageSize(),
                                                destination.getDownCacheSize());
                postOffice.bindQueue(queueCond, queue);
             }
             else
-            {               
-               queue = new LocalClusteredQueue(postOffice, nodeId, destination.getName(),
-                                               idm.getID(), ms, pm, true, true, executor,
+            {                      
+               queue = new LocalClusteredQueue((ClusteredPostOffice)postOffice, nodeId, destination.getName(),
+                                               idm.getID(), ms, pm, true, true,
                                                destination.getMaxSize(), null, tr,
                                                destination.getFullSize(), destination.getPageSize(),
                                                destination.getDownCacheSize());

Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -116,6 +116,8 @@
    private int defaultTempQueueFullSize;
    private int defaultTempQueuePageSize;
    private int defaultTempQueueDownCacheSize;
+   private int dupsOKBatchSize;
+   
    private ServerConnectionFactoryEndpoint cfendpoint;
 
    private byte usingVersion;
@@ -139,7 +141,8 @@
                                    String remotingSessionID,
                                    String clientVMID,
                                    byte versionToUse,
-                                   ServerInvokerCallbackHandler callbackHandler) throws Exception
+                                   ServerInvokerCallbackHandler callbackHandler,
+                                   int dupsOKBatchSize) throws Exception
    {
       this.serverPeer = serverPeer;
 
@@ -160,6 +163,8 @@
       this.defaultTempQueueFullSize = defaultTempQueueFullSize;
       this.defaultTempQueuePageSize = defaultTempQueuePageSize;
       this.defaultTempQueueDownCacheSize = defaultTempQueueDownCacheSize;
+      
+      this.dupsOKBatchSize = dupsOKBatchSize;
 
       sessions = new HashMap();
       temporaryDestinations = new HashSet();
@@ -254,7 +259,7 @@
 
          log.debug("created and registered " + ep);
 
-         ClientSessionDelegate d = new ClientSessionDelegate(sessionID);
+         ClientSessionDelegate d = new ClientSessionDelegate(sessionID, dupsOKBatchSize);
 
          log.debug("created " + d);
          

Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionFactoryEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionFactoryEndpoint.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionFactoryEndpoint.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -77,7 +77,8 @@
 
    protected int defaultTempQueueDownCacheSize;
 
-
+   protected int dupsOKBatchSize;
+   
    // Constructors ---------------------------------------------------------------------------------
 
    /**
@@ -90,7 +91,8 @@
                                           int preFetchSize,
                                           int defaultTempQueueFullSize,
                                           int defaultTempQueuePageSize,
-                                          int defaultTempQueueDownCacheSize)
+                                          int defaultTempQueueDownCacheSize,
+                                          int dupsOKBatchSize)
    {
       this.serverPeer = serverPeer;
       this.clientID = defaultClientID;
@@ -100,6 +102,7 @@
       this.defaultTempQueueFullSize = defaultTempQueueFullSize;
       this.defaultTempQueuePageSize = defaultTempQueuePageSize;
       this.defaultTempQueueDownCacheSize = defaultTempQueueDownCacheSize;
+      this.dupsOKBatchSize = dupsOKBatchSize;
    }
 
    // ConnectionFactoryDelegate implementation -----------------------------------------------------
@@ -223,7 +226,7 @@
                                       defaultTempQueueFullSize, defaultTempQueuePageSize,
                                       defaultTempQueueDownCacheSize, failedNodeID, this,
                                       remotingSessionID, clientVMID, versionToUse,
-                                      callbackHandler);
+                                      callbackHandler, dupsOKBatchSize);
 
       int connectionID = endpoint.getConnectionID();
 

Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerConsumerEndpoint.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -105,6 +105,8 @@
 
    // Must be volatile
    private volatile boolean clientAccepting;
+   
+   private boolean storeDeliveries;
 
    // Constructors ---------------------------------------------------------------------------------
 
@@ -141,6 +143,20 @@
       
       this.startStopLock = new Object();
       
+      if (dest.isTopic() && !messageQueue.isRecoverable())
+      {
+         //This is a consumer of a non durable topic subscription
+         //We don't need to store deliveries since if the consumer is closed or
+         //dies the refs go too
+         this.storeDeliveries = false;
+      }
+      else
+      {
+         this.storeDeliveries = true;
+      }
+      
+      storeDeliveries = true;
+      
       if (selector != null)
       {
          if (trace) log.trace("creating selector:" + selector);
@@ -155,9 +171,6 @@
       
       //We don't need to prompt delivery - this will come from the client in a changeRate request
       
-      // prompt delivery
-      //promptDelivery();
-
       log.debug(this + " constructed");
    }
 
@@ -211,15 +224,23 @@
          
          boolean selectorRejected = !this.accept(message);
    
-         SimpleDelivery delivery = new SimpleDelivery(observer, ref, false, !selectorRejected);
+         SimpleDelivery delivery = new SimpleDelivery(observer, ref, !storeDeliveries, !selectorRejected);
          
          if (selectorRejected)
          {
             return delivery;
          }
                  
-         long deliveryId =
-            sessionEndpoint.addDelivery(delivery, id, dlq, expiryQueue, redeliveryDelay);
+         long deliveryId;
+         
+         if (storeDeliveries)
+         {
+            deliveryId = sessionEndpoint.addDelivery(delivery, id, dlq, expiryQueue, redeliveryDelay);
+         }
+         else
+         {
+            deliveryId = -1;
+         }
    
          // We send the message to the client on the current thread. The message is written onto the
          // transport and then the thread returns immediately without waiting for a response.
@@ -259,7 +280,7 @@
             {
                // one way invocation, no acknowledgment sent back by the client
                if (trace) { log.trace(this + " submitting message " + message + " to the remoting layer to be sent asynchronously"); }
-               callbackHandler.handleCallbackOneway(callback);
+               callbackHandler.handleCallbackOneway(callback);               
             }
          }
          catch (HandleCallbackException e)
@@ -356,7 +377,6 @@
            
    // ConsumerEndpoint implementation --------------------------------------------------------------
    
-   
    public void changeRate(float newRate) throws JMSException
    {
       if (trace) { log.trace(this + " changing rate to " + newRate); }
@@ -376,8 +396,13 @@
          
          // No need to synchronize - clientAccepting is volatile.
          
-         // We need to deal with the fact that one way invocations may arrive in a different order
-         // to that which they arrived in. So we just toggle on / off.
+         // Important note - this invocations can arrive in a different order to which they were
+         // sent - this is inherent in one way invocations where a client side pool is used.
+         // Therefore we just toggle the clientAccepting flag - if we actually looked at the newRate
+         // value we might end up turning off the consumer when it should be on
+         // (since a off-on, arrives as on-off)
+         // Toggling is safe, but when we start to look at the actual rate value we will
+         // have to be a bit cleverer
          
          clientAccepting = !clientAccepting;
          
@@ -392,6 +417,8 @@
       }
    }
    
+   
+   
    /*
     * This method is always called between closing() and close() being called
     * Instead of having a new method we could perhaps somehow pass the last delivery id
@@ -551,7 +578,7 @@
    
    private void promptDelivery()
    {
-      messageQueue.deliver(Channel.ASYNCRHONOUS);
+      messageQueue.deliver();
    }
    
    // Inner classes --------------------------------------------------------------------------------

Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -50,7 +50,6 @@
 import org.jboss.jms.selector.Selector;
 import org.jboss.jms.server.DestinationManager;
 import org.jboss.jms.server.JMSCondition;
-import org.jboss.jms.server.QueuedExecutorPool;
 import org.jboss.jms.server.ServerPeer;
 import org.jboss.jms.server.destination.ManagedDestination;
 import org.jboss.jms.server.destination.ManagedQueue;
@@ -83,7 +82,6 @@
 import org.jboss.util.id.GUID;
 
 import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 import EDU.oswego.cs.dl.util.concurrent.SynchronizedLong;
 
 /**
@@ -143,7 +141,6 @@
 
    private DestinationManager dm;
    private IDManager idm;
-   private QueuedExecutorPool pool;
    private TransactionRepository tr;
    private PostOffice postOffice;
    private int nodeId;
@@ -173,7 +170,6 @@
       dm = sp.getDestinationManager();
       postOffice = sp.getPostOfficeInstance();     
       idm = sp.getChannelIDManager();
-      pool = sp.getQueuedExecutorPool();
       nodeId = sp.getServerPeerID();
       tr = sp.getTxRepository();
 
@@ -313,8 +309,8 @@
    public void send(JBossMessage message, boolean checkForDuplicates) throws JMSException
    {
       try
-      {       
-         connectionEndpoint.sendMessage(message, null, checkForDuplicates);
+      {                
+         connectionEndpoint.sendMessage(message, null, checkForDuplicates);         
       }
       catch (Throwable t)
       {
@@ -364,7 +360,7 @@
          Delivery del = cancelDeliveryInternal(cancel);
          
          //Prompt delivery
-         ((Channel)del.getObserver()).deliver(false);
+         ((Channel)del.getObserver()).deliver();
       }
       catch (Throwable t)
       {
@@ -551,22 +547,21 @@
          dm.registerDestination(mDest);
          
          if (dest.isQueue())
-         {
-            QueuedExecutor executor = (QueuedExecutor)pool.get();
+         {            
             Queue coreQueue;
 
             if (postOffice.isLocal())
             {
                coreQueue = new PagingFilteredQueue(dest.getName(),
-                                                   idm.getID(), ms, pm, true, false, executor,
+                                                   idm.getID(), ms, pm, true, false,
                                                    -1, null, fullSize, pageSize, downCacheSize);
             }
             else
             {
                // uniformly handle the temporary queue as LocalClusteredQueue
-               coreQueue = new LocalClusteredQueue(postOffice, nodeId, dest.getName(),
-                                                   idm.getID(), ms, pm, true, false, executor,
-                                                   -1, null, tr, fullSize, pageSize, downCacheSize);
+               coreQueue = new LocalClusteredQueue((ClusteredPostOffice)postOffice, nodeId, dest.getName(),
+                                                   idm.getID(), ms, pm, true, false,
+                                                   -1, null, tr, fullSize, pageSize, downCacheSize);                             
             }
 
             String counterName = TEMP_QUEUE_MESSAGECOUNTER_PREFIX + dest.getName();
@@ -1126,7 +1121,7 @@
       //TODO - are we sure this is the right place to prompt delivery?
       if (queue != null)
       {
-         queue.deliver(false);
+         queue.deliver();
       }
    }
    
@@ -1144,6 +1139,8 @@
       }
       
       rec.del.acknowledge(null);    
+      
+      if (trace) { log.trace(this + " acknowledged delivery " + ack); }
    }
 
    /**
@@ -1321,14 +1318,13 @@
             if (log.isTraceEnabled()) { log.trace(this + " creating new non-durable subscription on " + jmsDestination); }
             
             // Create the non durable sub
-            QueuedExecutor executor = (QueuedExecutor)pool.get();
-            
+                        
             PagingFilteredQueue q;
             
             if (postOffice.isLocal())
             {
                q = new PagingFilteredQueue(new GUID().toString(), idm.getID(), ms, pm, true, false,
-                        executor, mDest.getMaxSize(), selector,
+                        mDest.getMaxSize(), selector,
                         mDest.getFullSize(),
                         mDest.getPageSize(),
                         mDest.getDownCacheSize());
@@ -1336,10 +1332,10 @@
                binding = postOffice.bindQueue(topicCond, q);
             }
             else
-            {
-               q = new LocalClusteredQueue(postOffice, nodeId, new GUID().toString(),
+            {  
+               q = new LocalClusteredQueue((ClusteredPostOffice)postOffice, nodeId, new GUID().toString(),
                                            idm.getID(), ms, pm, true, false,
-                                           executor, mDest.getMaxSize(), selector, tr,
+                                           mDest.getMaxSize(), selector, tr,
                                            mDest.getFullSize(),
                                            mDest.getPageSize(),
                                            mDest.getDownCacheSize());
@@ -1395,14 +1391,13 @@
                // Does not already exist
                
                if (trace) { log.trace(this + " creating new durable subscription on " + jmsDestination); }
-               
-               QueuedExecutor executor = (QueuedExecutor)pool.get();
+                              
                PagingFilteredQueue q;
 
                if (postOffice.isLocal())
                {
                   q = new PagingFilteredQueue(name, idm.getID(), ms, pm, true, true,
-                                              executor, mDest.getMaxSize(), selector,
+                                              mDest.getMaxSize(), selector,
                                               mDest.getFullSize(),
                                               mDest.getPageSize(),
                                               mDest.getDownCacheSize());
@@ -1411,9 +1406,9 @@
                }
                else
                {
-                  q = new LocalClusteredQueue(postOffice, nodeId, name, idm.getID(),
+                  q = new LocalClusteredQueue((ClusteredPostOffice)postOffice, nodeId, name, idm.getID(),
                                               ms, pm, true, true,
-                                              executor, mDest.getMaxSize(), selector, tr,
+                                              mDest.getMaxSize(), selector, tr,
                                               mDest.getFullSize(),
                                               mDest.getPageSize(),
                                               mDest.getDownCacheSize());
@@ -1485,14 +1480,13 @@
                   }
                   
                   // create a fresh new subscription
-                  
-                  QueuedExecutor executor = (QueuedExecutor)pool.get();
+                                    
                   PagingFilteredQueue q;
                   
                   if (postOffice.isLocal())
                   {
                      q = new PagingFilteredQueue(name, idm.getID(), ms, pm, true, true,
-                              executor, mDest.getMaxSize(), selector,
+                              mDest.getMaxSize(), selector,
                               mDest.getFullSize(),
                               mDest.getPageSize(),
                               mDest.getDownCacheSize());
@@ -1500,8 +1494,8 @@
                   }
                   else
                   {
-                     q = new LocalClusteredQueue(postOffice, nodeId, name, idm.getID(), ms, pm, true, true,
-                              executor, mDest.getMaxSize(), selector, tr,
+                     q = new LocalClusteredQueue((ClusteredPostOffice)postOffice, nodeId, name, idm.getID(), ms, pm, true, true,
+                              mDest.getMaxSize(), selector, tr,
                               mDest.getFullSize(),
                               mDest.getPageSize(),
                               mDest.getDownCacheSize());
@@ -1719,7 +1713,7 @@
       {
          DeliveryObserver observer = (DeliveryObserver)iter.next();
          
-         ((Channel)observer).deliver(false);
+         ((Channel)observer).deliver();
       }
    }
    

Modified: trunk/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -159,7 +159,7 @@
                
                if (param instanceof RequestSupport)
                {
-                  //A JBM invocation being sent one way (e.g. changeRate)
+                  //A JBM invocation being sent one way (e.g. changeRate, send)
                   
                   if (trace) { log.trace("JBM oneway request"); }
                   
@@ -180,10 +180,7 @@
                      if (trace) { log.trace("It's a callback: " + callback); }
                      
                      if (callback.getParameter() instanceof ClientDelivery)
-                     {
-                        // Whooooppee!! found the callback. Hurrah for remoting!
-                        // What a simple and intuitive API ;)
-                        
+                     {                        
                         packet = (ClientDelivery)callback.getParameter();
                         
                         if (trace) { log.trace("Message delivery callback"); }
@@ -227,13 +224,6 @@
                // List of polled Callbacks, this is how messages are delivered when using
                // polled callbacks e.g. the HTTP transport
                
-               // Sanity check
-               if (((List)param).isEmpty())
-               {
-                  log.warn("Got a polled callback list - but it is empty!!! " +
-                     "See http://jira.jboss.org/jira/browse/JBMESSAGING-818");
-               }
-               
                packet = new PolledCallbacksDelivery((List)param, resp.getSessionId());             
             }
             else if (param == null)

Modified: trunk/src/main/org/jboss/messaging/core/Channel.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/Channel.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/Channel.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -46,9 +46,6 @@
  */
 public interface Channel extends DeliveryObserver, Distributor, Receiver
 {
-   public final boolean SYNCHRONOUS = true;
-   public final boolean ASYNCRHONOUS = false;
-
    /**    
     * @return the unique ID of the channel
     */
@@ -92,9 +89,8 @@
 
    /**
     * Delivers as many references as possible to its router until no more deliveries are returned.
-    * @param synchronous - one of Channel.SYNCHRONOUS, Channel.ASYNCRHONOUS.
     */
-   void deliver(boolean synchronous);
+   void deliver();
 
    /**
     * Close the channel

Modified: trunk/src/main/org/jboss/messaging/core/ChannelSupport.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/ChannelSupport.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/ChannelSupport.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -36,26 +36,19 @@
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TransactionException;
 import org.jboss.messaging.core.tx.TxCallback;
-import org.jboss.messaging.util.Future;
 import org.jboss.messaging.util.prioritylinkedlist.BasicPriorityLinkedList;
 import org.jboss.messaging.util.prioritylinkedlist.PriorityLinkedList;
 import org.jboss.util.timeout.Timeout;
 import org.jboss.util.timeout.TimeoutTarget;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 import EDU.oswego.cs.dl.util.concurrent.SynchronizedInt;
 
 /**
  * 
- * This class provides much of the functionality needed to implement a channel. This partial
- * implementation supports atomicity, isolation and recoverability of reliable messages.
+ * This class provides much of the functionality needed to implement a channel.
  * 
- * It uses a "SEDA-type" approach, where requests to handle messages, and deliver to receivers are
- * not executed concurrently but placed on an event queue and executed serially by a single thread.
+ * This partial implementation supports atomicity, isolation and recoverability of reliable messages.
  * 
- * Currently remoting does not support a non blocking API so a full SEDA approach is not possible
- * at this stage.
- * 
  * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @version <tt>$Revision$</tt> $Id: ChannelSupport.java,v 1.65
@@ -79,10 +72,8 @@
 
    protected MessageStore ms;
 
-   protected QueuedExecutor executor;
+   protected boolean receiversReady;
 
-   protected volatile boolean receiversReady;
-
    protected PriorityLinkedList messageRefs;
 
    protected boolean acceptReliableMessages;
@@ -115,7 +106,7 @@
    protected ChannelSupport(long channelID, MessageStore ms,
                             PersistenceManager pm,
                             boolean acceptReliableMessages, boolean recoverable,
-                            QueuedExecutor executor, int maxSize)
+                            int maxSize)
    {
       if (trace) { log.trace("creating " + (pm != null ? "recoverable " : "non-recoverable ") + "channel[" + channelID + "]"); }
 
@@ -135,8 +126,6 @@
 
       this.channelID = channelID;
 
-      this.executor = executor;
-
       this.acceptReliableMessages = acceptReliableMessages;
 
       this.recoverable = recoverable;
@@ -165,29 +154,7 @@
 
       checkClosed();
 
-      Future result = new Future();
-
-      if (tx == null)
-      {
-         try
-         {
-            // Instead of executing directly, we add the handle request to the event queue.
-            // Since remoting doesn't currently handle non blocking IO, we still have to wait for the
-            // result, but when remoting does, we can use a full SEDA approach and get even better
-            // throughput.
-            this.executor.execute(new HandleRunnable(result, sender, ref, true));
-         }
-         catch (InterruptedException e)
-         {
-            log.warn("Thread interrupted", e);
-         }
-
-         return (Delivery)result.getResult();
-      }
-      else
-      {
-         return handleInternal(sender, ref, tx, true, false);
-      }
+      return handleInternal(sender, ref, tx, true);      
    }
 
    // DeliveryObserver implementation --------------------------------------------------------------
@@ -196,7 +163,7 @@
    {
       if (trace) { log.trace("acknowledging " + d + (tx == null ? " non-transactionally" : " transactionally in " + tx)); }
 
-      acknowledgeInternal(d, tx, true, false);
+      acknowledgeInternal(d, tx, true);
    }
 
    public void cancel(Delivery del) throws Throwable
@@ -214,8 +181,7 @@
       
       if (!checkAndSchedule(ref))
       {
-         // We put the cancellation on the event queue if it's not a scheduled delivery
-         this.executor.execute(new CancelRunnable(ref));     
+         cancelInternal(ref);
       }
    }      
         
@@ -229,7 +195,10 @@
 
       if (trace) { log.trace("receiver " + r + (added ? "" : " NOT") + " added"); }
 
-      receiversReady = true;
+      synchronized (refLock)
+      {
+         receiversReady = true;
+      }
 
       return added;
    }
@@ -240,7 +209,10 @@
 
       if (removed && !router.iterator().hasNext())
       {
-         receiversReady = false;
+         synchronized (refLock)
+         {
+            receiversReady = false;
+         }
       }
 
       if (trace) { log.trace(this + (removed ? " removed " : " did NOT remove ") + r); }
@@ -251,6 +223,11 @@
    public void clear()
    {
       router.clear();
+      
+      synchronized (refLock)
+      {
+         receiversReady = false;
+      }
    }
 
    public boolean contains(Receiver r)
@@ -315,36 +292,20 @@
          return messages;
       }      
    }
-
-   public void deliver(boolean synchronous)
+ 
+   public void deliver()
    {
       checkClosed();
 
-      // We put a delivery request on the event queue.
-      try
-      {
-         Future future = null;
-
-         if (synchronous)
+      if (router.getNumberOfReceivers() > 0)
+      {                
+         synchronized (refLock)
          {
-            future = new Future();
+            receiversReady = true;
+            
+            deliverInternal();
          }
-
-         //TODO we should keep track of how many deliveries are currently in the queue so we don't
-         //     execute another delivery when one is in the queue, since this is pointless.
-
-         executor.execute(new DeliveryRunnable(future));
-
-         if (synchronous)
-         {
-            // Wait to complete
-            future.getResult();
-         }
       }
-      catch (InterruptedException e)
-      {
-         log.warn("Thread interrupted", e);
-      }
    }      
 
    public void close()
@@ -495,13 +456,11 @@
             {               
                if (!liter.hasNext())
                {
-                  // TODO we need to look in paging state too - currently not supported
-
-                  
                   // Clebert - why did you add a link to 808 here?
                   // I don't think 808 has anything to do with this.
                   // http://jira.jboss.org/jira/browse/JBMESSAGING-808
                   
+                  // TODO we need to look in paging state too - currently not supported                  
                   //http://jira.jboss.com/jira/browse/JBMESSAGING-839
                   log.warn(this + " cannot find reference " + id + " (Might be paged!)");
                   break;
@@ -626,14 +585,16 @@
          ListIterator iter = null;
          
          MessageReference ref = null;
-
+         
+         if (!receiversReady)
+         {
+            return;
+         }
+         
          while (true)
          {           
-            synchronized (refLock)
-            {
-               ref = nextReference(iter);               
-            }
-            
+            ref = nextReference(iter);               
+                     
             if (ref != null)
             {
                // Attempt to push the ref to a receiver
@@ -648,6 +609,7 @@
                {
                   // No receiver, broken receiver or full receiver so we stop delivering
                   if (trace) { log.trace(this + " got no delivery for " + ref + " so no receiver got the message. Stopping delivery."); }
+                  
                   break;
                }
                else if (!del.isSelectorAccepted())
@@ -678,8 +640,8 @@
                if (trace) { log.trace(this + " no more refs to deliver "); }
                
                break;
-            }
-         }
+            }            
+         }         
       }
       catch (Throwable t)
       {
@@ -731,7 +693,7 @@
    }
       
    protected Delivery handleInternal(DeliveryObserver sender, MessageReference ref,
-                                     Transaction tx, boolean persist, boolean synchronous)
+                                     Transaction tx, boolean persist)
    {
       if (ref == null)
       {
@@ -785,15 +747,9 @@
                synchronized (refLock)
                {
                   addReferenceInMemory(ref);
-               }
-               
-               // We only do delivery if there are receivers that haven't said they don't want any
-               // more references.
-               if (receiversReady)
-               {
-                  // Prompt delivery
+                  
                   deliverInternal();
-               }
+               }            
             }
          }
          else
@@ -813,7 +769,7 @@
             else
             {
                // add to post commit callback
-               getCallback(tx, synchronous).addRef(ref);
+               getCallback(tx).addRef(ref);
                
                if (trace) { log.trace(this + " added transactionally " + ref + " in memory"); }
             }
@@ -838,8 +794,6 @@
          return null;
       }
 
-      // I might as well return null, the sender shouldn't care
-      
       return new SimpleDelivery(this, ref, true);
    }
 
@@ -869,8 +823,7 @@
       }
    }
    
-   protected void acknowledgeInternal(Delivery d, Transaction tx, boolean persist,
-                                      boolean synchronous) throws Exception
+   protected void acknowledgeInternal(Delivery d, Transaction tx, boolean persist) throws Exception
    {   
       if (tx == null)
       {                  
@@ -885,7 +838,7 @@
       }
       else
       {
-         this.getCallback(tx, synchronous).addDelivery(d);
+         this.getCallback(tx).addDelivery(d);
    
          if (trace) { log.trace(this + " added " + d + " to memory on transaction " + tx); }
    
@@ -896,24 +849,16 @@
       }
    }
 
-   protected InMemoryCallback getCallback(Transaction tx, boolean synchronous)
+   protected InMemoryCallback getCallback(Transaction tx)
    {
       InMemoryCallback callback = (InMemoryCallback) tx.getCallback(this);            
 
       if (callback == null)
       {
-         callback = new InMemoryCallback(synchronous);
+         callback = new InMemoryCallback();
 
          tx.addCallback(callback, this);
       }
-      else
-      {
-         //Sanity
-         if (callback.isSynchronous() != synchronous)
-         {
-            throw new IllegalStateException("Callback synchronousness status doesn't match");
-         }
-      }
 
       return callback;
    }
@@ -989,32 +934,19 @@
 
    // Inner classes --------------------------------------------------------------------------------
 
-   private class InMemoryCallback implements TxCallback, Runnable
+   private class InMemoryCallback implements TxCallback
    {
       private List refsToAdd;
 
       private List deliveriesToRemove;
       
-      private boolean synchronous;
-          
-      private boolean committing;
-
-      private Future result;
-
-      private InMemoryCallback(boolean synchronous)
+      private InMemoryCallback()
       {
          refsToAdd = new ArrayList();
 
          deliveriesToRemove = new ArrayList();
-         
-         this.synchronous = synchronous;
       }
       
-      private boolean isSynchronous()
-      {
-         return synchronous;
-      }
-
       private void addRef(MessageReference ref)
       {
          refsToAdd.add(ref);
@@ -1045,156 +977,59 @@
          // NOOP
       }
       
-      public void run()
-      {
+      public void afterCommit(boolean onePhase) throws Exception
+      {         
          try
          {
-            if (committing)
-            {
-               doAfterCommit();
-            }
-            else
-            {
-               doAfterRollback();
-            }
+            // We add the references to the state
             
-            result.setResult(null);
-         }
-         catch (Throwable t)
-         {
-            log.debug(this + "'s execution generated exception", t);
-            result.setException(t);
-         }
-      }
-
-      public void afterCommit(boolean onePhase) throws Exception
-      {
-         if (synchronous)
-         {
-            try
+            for(Iterator i = refsToAdd.iterator(); i.hasNext(); )
             {
-               doAfterCommit();
-            }
-            catch (Throwable t)
-            {
-               //TODO Sort out exception handling!!
-               throw new TransactionException("Failed to commit", t);
-            }
-         }
-         else
-         {            
-            // We don't execute the commit directly, we add it to the event queue of the channel
-            // so it is executed in turn
-            committing = true;
-            executeAndWaitForResult();
-         }
-      }
+               MessageReference ref = (MessageReference)i.next();
 
-      public void afterRollback(boolean onePhase) throws Exception
-      {
-         if (synchronous)            
-         {
-            doAfterRollback();
-         }
-         else
-         {                     
-            // We don't execute the commit directly, we add it to the event queue
-            // of the channel
-            // so it is executed in turn
-            committing = false;
-   
-            executeAndWaitForResult();
-         }
-      }
+               if (trace) { log.trace(this + ": adding " + ref + " to non-recoverable state"); }
 
-      public String toString()
-      {
-         return ChannelSupport.this + ".InMemoryCallback[" +
-                Integer.toHexString(InMemoryCallback.this.hashCode()) + "]";
-      }
+               try
+               {
+                  synchronized (refLock)
+                  {
+                     addReferenceInMemory(ref);
+                  }
+               }
+               catch (Throwable t)
+               {
+                  throw new TransactionException("Failed to add reference", t);
+               }
+            }
 
-      private void executeAndWaitForResult() throws TransactionException
-      {
-         result = new Future();
-
-         try
-         {
-            if (trace) { log.trace("adding " + this + " to " + ChannelSupport.this + "'s executor"); }
-            executor.execute(this);
-         }
-         catch (InterruptedException e)
-         {
-            log.error("Thread interrupted", e);
-         }
-
-         // Wait for it to complete
-
-         if (trace) { log.trace("waiting for " + this + " to complete"); }
-         Throwable t = (Throwable)result.getResult();
-         if (trace) { log.trace(InMemoryCallback.this + " completed"); }
-
-         if (t != null)
-         {
-            if (t instanceof RuntimeException)
+            // Remove deliveries
+            
+            for(Iterator i = deliveriesToRemove.iterator(); i.hasNext(); )
             {
-               throw (RuntimeException) t;
-            }
-            if (t instanceof Error)
-            {
-               throw (Error) t;
-            }
-            if (t instanceof TransactionException)
-            {
-               throw (TransactionException) t;
-            }
-            throw new IllegalStateException("Unknown Throwable " + t);
-         }
-      }
+               Delivery del = (Delivery)i.next();
 
-      private void doAfterCommit() throws Throwable
-      {
-         // We add the references to the state
-         
-         for(Iterator i = refsToAdd.iterator(); i.hasNext(); )
-         {
-            MessageReference ref = (MessageReference)i.next();
+               if (trace) { log.trace(this + " removing " + del + " after commit"); }
 
-            if (trace) { log.trace(this + ": adding " + ref + " to non-recoverable state"); }
-
-            try
-            {
-               synchronized (refLock)
-               {
-                  addReferenceInMemory(ref);
-               }
+               del.getReference().releaseMemoryReference();
+               
+               deliveringCount.decrement();
             }
-            catch (Throwable t)
+            
+            // prompt delivery
+            synchronized (refLock)
             {
-               throw new TransactionException("Failed to add reference", t);
+               deliverInternal();
             }
          }
-
-         // Remove deliveries
-         
-         for(Iterator i = deliveriesToRemove.iterator(); i.hasNext(); )
+         catch (Throwable t)
          {
-            Delivery del = (Delivery)i.next();
-
-            if (trace) { log.trace(this + " removing " + del + " after commit"); }
-
-            del.getReference().releaseMemoryReference();
-            
-            deliveringCount.decrement();
+            log.error("failed to commit", t);
+            throw new Exception("Failed to commit", t);
          }
          
-         // prompt delivery
-         if (receiversReady)
-         {
-            deliverInternal();
-         }
       }
 
-      private void doAfterRollback()
+      public void afterRollback(boolean onePhase) throws Exception
       {
          for(Iterator i = refsToAdd.iterator(); i.hasNext(); )
          {
@@ -1204,6 +1039,12 @@
             ref.releaseMemoryReference();
          }
       }
+
+      public String toString()
+      {
+         return ChannelSupport.this + ".InMemoryCallback[" +
+                Integer.toHexString(InMemoryCallback.this.hashCode()) + "]";
+      }
    }
 
    /**
@@ -1224,126 +1065,9 @@
    }
 
    // Private --------------------------------------------------------------------------------------
- 
-
-  
+   
    // Inner classes --------------------------------------------------------------------------------
 
-   private class DeliveryRunnable implements Runnable
-   {
-      Future result;
-      
-      public DeliveryRunnable(Future result)
-      {
-         this.result = result;
-      }
-      
-      public void run()
-      {
-         try
-         {
-            if (router.getNumberOfReceivers() > 0)
-            {               
-               deliverInternal();                     
-            }
-            if (result != null)
-            {
-               result.setResult(null);
-            }
-         }
-         catch (Throwable t)
-         {
-            log.error("Failed to deliver", t);
-            if (result != null)
-            {
-               result.setException(t);
-            }
-         }
-      }
-   } 
-   
-   private class DeliverScheduledRunnable implements Runnable
-   {
-      private MessageReference ref;
-      
-      private Future result;
-      
-      public DeliverScheduledRunnable(Future result, MessageReference ref)
-      {
-         this.ref = ref;
-         
-         this.result = result;
-      }
-      
-      public void run()
-      {
-         try         
-         {
-            if (router.getNumberOfReceivers() > 0)
-            {               
-               boolean delivered = deliverScheduled(ref);     
-               
-               result.setResult(Boolean.valueOf(delivered));
-            }
-            else
-            {
-               result.setResult(Boolean.valueOf(false));
-            }
-         }
-         catch (Throwable t)
-         {
-            log.error("Failed to deliver scheduled", t);            
-         }
-      }
-   } 
-   
-   private class CancelRunnable implements Runnable
-   {
-      MessageReference ref;
-      
-      CancelRunnable(MessageReference ref)
-      {
-         this.ref = ref;
-      }
-      
-      public void run()
-      {
-         try
-         {
-            cancelInternal(ref);
-         }
-         catch (Exception e)
-         {
-            log.error("Failed to cancel delivery", e);
-         }
-      }
-   }
-   
-   protected class HandleRunnable implements Runnable
-   {
-      Future result;
-
-      DeliveryObserver sender;
-
-      MessageReference ref;
-      
-      boolean persist;
-
-      public HandleRunnable(Future result, DeliveryObserver sender, MessageReference ref, boolean persist)
-      {
-         this.result = result;
-         this.sender = sender;
-         this.ref = ref;
-         this.persist = persist;
-      }
-
-      public void run()
-      {
-         Delivery d = handleInternal(sender, ref, null, persist, false);
-         result.setResult(d);
-      }
-   }   
-   
    private class DeliverRefTimeoutTarget implements TimeoutTarget
    {
       private MessageReference ref;
@@ -1368,33 +1092,23 @@
          }
               
          ref.setScheduledDeliveryTime(0);
-           
-         Future result = new Future();
          
-         DeliverScheduledRunnable runnable = new DeliverScheduledRunnable(result, ref);
+         boolean delivered = false;
          
-         try
-         {
-            executor.execute(runnable);
+         if (router.getNumberOfReceivers() > 0)
+         {               
+            delivered = deliverScheduled(ref);     
          }
-         catch (InterruptedException e)
-         {
-            log.error("Thread interrupted", e);
-         }
-         
-         Boolean b = (Boolean)result.getResult();
-         boolean delivered = b.booleanValue();
-         
+
          if (!delivered)
          {
-            //add to front of queue
             try
             {
-               executor.execute(new CancelRunnable(ref));
+               cancelInternal(ref);
             }
-            catch (InterruptedException e)
+            catch (Exception e)
             {
-               log.error("Thread interrupted", e);
+               log.error("Failed to cancel", e);
             }
          }
          else

Modified: trunk/src/main/org/jboss/messaging/core/PagingChannelSupport.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/PagingChannelSupport.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/PagingChannelSupport.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -35,8 +35,6 @@
 import org.jboss.messaging.core.plugin.contract.PersistenceManager.InitialLoadInfo;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager.ReferenceInfo;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * A PagingChannel
  * 
@@ -62,7 +60,7 @@
    /**
     * The maximum number of references this channel will hold before going into paging mode
     */
-   protected int fullSize = 75000;
+   protected int fullSize = 200000;
 
    /**
     * The maximum number of references to load from storage in one go when unpaging
@@ -104,9 +102,9 @@
     */
    public PagingChannelSupport(long channelID, MessageStore ms, PersistenceManager pm,
                                boolean acceptReliableMessages, boolean recoverable,                        
-                               QueuedExecutor executor, int maxSize)
+                               int maxSize)
    {
-      super(channelID, ms, pm, acceptReliableMessages, recoverable, executor, maxSize);
+      super(channelID, ms, pm, acceptReliableMessages, recoverable, maxSize);
       
       downCache = new ArrayList(downCacheSize);    
       
@@ -127,10 +125,10 @@
     */
    public PagingChannelSupport(long channelID, MessageStore ms, PersistenceManager pm,
                                boolean acceptReliableMessages, boolean recoverable,                        
-                               QueuedExecutor executor, int maxSize,
+                               int maxSize,
                                int fullSize, int pageSize, int downCacheSize)
    {
-      super(channelID, ms, pm, acceptReliableMessages, recoverable, executor, maxSize);
+      super(channelID, ms, pm, acceptReliableMessages, recoverable, maxSize);
       
       if (pageSize >= fullSize)
       {

Modified: trunk/src/main/org/jboss/messaging/core/local/PagingFilteredQueue.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/local/PagingFilteredQueue.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/local/PagingFilteredQueue.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -33,8 +33,6 @@
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.tx.Transaction;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A PagingFilteredQueue
@@ -74,10 +72,9 @@
 
    public PagingFilteredQueue(String name, long id, MessageStore ms, PersistenceManager pm,             
                               boolean acceptReliableMessages, boolean recoverable,
-                              QueuedExecutor executor, int maxSize,
-                              Filter filter)
+                              int maxSize, Filter filter)
    {
-      super(id, ms, pm, acceptReliableMessages, recoverable, executor, maxSize);
+      super(id, ms, pm, acceptReliableMessages, recoverable, maxSize);
       
       router = new RoundRobinPointToPointRouter();
       
@@ -88,11 +85,10 @@
    
    public PagingFilteredQueue(String name, long id, MessageStore ms, PersistenceManager pm,             
                               boolean acceptReliableMessages, boolean recoverable,
-                              QueuedExecutor executor, int maxSize,
-                              Filter filter,
+                              int maxSize, Filter filter,
                               int fullSize, int pageSize, int downCacheSize)
    {
-      super(id, ms, pm, acceptReliableMessages, recoverable, executor, maxSize, fullSize, pageSize, downCacheSize);
+      super(id, ms, pm, acceptReliableMessages, recoverable, maxSize, fullSize, pageSize, downCacheSize);
       
       router = new RoundRobinPointToPointRouter();
       

Modified: trunk/src/main/org/jboss/messaging/core/plugin/ClusteredPostOfficeService.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/ClusteredPostOfficeService.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/plugin/ClusteredPostOfficeService.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -21,15 +21,18 @@
  */
 package org.jboss.messaging.core.plugin;
 
-import javax.management.ObjectName;
-import javax.management.NotificationListener;
-import javax.management.NotificationFilter;
+import java.util.Collections;
+import java.util.Set;
+
 import javax.management.ListenerNotFoundException;
 import javax.management.MBeanNotificationInfo;
+import javax.management.NotificationFilter;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
 import javax.transaction.TransactionManager;
+
 import org.jboss.jms.selector.SelectorFactory;
 import org.jboss.jms.server.JMSConditionFactory;
-import org.jboss.jms.server.QueuedExecutorPool;
 import org.jboss.jms.server.ServerPeer;
 import org.jboss.jms.util.ExceptionUtil;
 import org.jboss.messaging.core.FilterFactory;
@@ -49,9 +52,6 @@
 import org.jboss.messaging.core.tx.TransactionRepository;
 import org.w3c.dom.Element;
 
-import java.util.Set;
-import java.util.Collections;
-
 /**
  * A ClusteredPostOfficeService
  * 
@@ -91,6 +91,7 @@
    private long statsSendPeriod = 1000;
    private String clusterRouterFactory;
    private String messagePullPolicy;
+   private int threadPoolSize = 50;
 
    private DefaultClusteredPostOffice postOffice;
 
@@ -175,6 +176,11 @@
 
    public void setChannelFactoryName(ObjectName channelFactoryName)
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       this.channelFactoryName = channelFactoryName;
    }
 
@@ -185,6 +191,11 @@
 
    public void setSyncChannelName(String syncChannelName)
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       this.syncChannelName = syncChannelName;
    }
 
@@ -195,6 +206,11 @@
 
    public void setAsyncChannelName(String asyncChannelName)
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       this.asyncChannelName = asyncChannelName;
    }
 
@@ -205,11 +221,21 @@
 
    public void setChannelPartitionName(String channelPartitionName)
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       this.channelPartitionName = channelPartitionName;
    }
 
    public void setSyncChannelConfig(Element config) throws Exception
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       syncChannelConfig = config;
    }
 
@@ -220,6 +246,11 @@
 
    public void setAsyncChannelConfig(Element config) throws Exception
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       asyncChannelConfig = config;
    }
 
@@ -230,6 +261,11 @@
 
    public void setStateTimeout(long timeout)
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       this.stateTimeout = timeout;
    }
 
@@ -240,6 +276,11 @@
 
    public void setCastTimeout(long timeout)
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       this.castTimeout = timeout;
    }
 
@@ -260,6 +301,11 @@
 
    public void setStatsSendPeriod(long period)
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       this.statsSendPeriod = period;
    }
 
@@ -280,6 +326,11 @@
 
    public void setClusterRouterFactory(String clusterRouterFactory)
    {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
       this.clusterRouterFactory = clusterRouterFactory;
    }
 
@@ -292,6 +343,21 @@
    {
       return postOffice.printBindingInformation();
    }
+   
+   public int getThreadPoolSize()
+   {
+      return this.threadPoolSize;
+   }
+   
+   public void setThreadPoolSize(int size)
+   {
+      if (started)
+      {
+         log.warn("Cannot set attribute when service is started");
+         return;
+      }
+      this.threadPoolSize = size;
+   }
 
    // Public --------------------------------------------------------
 
@@ -316,7 +382,6 @@
          MessageStore ms = serverPeer.getMessageStore();
          TransactionRepository tr = serverPeer.getTxRepository();
          PersistenceManager pm = serverPeer.getPersistenceManagerInstance();
-         QueuedExecutorPool pool = serverPeer.getQueuedExecutorPool();
          int nodeId = serverPeer.getServerPeerID();
 
          Class clazz = Class.forName(messagePullPolicy);
@@ -369,13 +434,14 @@
          postOffice =  new DefaultClusteredPostOffice(ds, tm, sqlProperties,
                                                       createTablesOnStartup,
                                                       nodeId, officeName, ms,
-                                                      pm, tr, ff, cf, pool,
+                                                      pm, tr, ff, cf,
                                                       groupName,
                                                       jChannelFactory,
                                                       stateTimeout, castTimeout,
                                                       pullPolicy, rf,
                                                       mapper,
-                                                      statsSendPeriod);
+                                                      statsSendPeriod,
+                                                      threadPoolSize);
 
          postOffice.start();
 

Modified: trunk/src/main/org/jboss/messaging/core/plugin/DefaultPostOfficeService.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/DefaultPostOfficeService.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/plugin/DefaultPostOfficeService.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -26,7 +26,6 @@
 
 import org.jboss.jms.selector.SelectorFactory;
 import org.jboss.jms.server.JMSConditionFactory;
-import org.jboss.jms.server.QueuedExecutorPool;
 import org.jboss.jms.server.ServerPeer;
 import org.jboss.jms.util.ExceptionUtil;
 import org.jboss.messaging.core.FilterFactory;
@@ -130,8 +129,6 @@
          
          PersistenceManager pm = serverPeer.getPersistenceManagerInstance();
          
-         QueuedExecutorPool pool = serverPeer.getQueuedExecutorPool();
-         
          TransactionRepository tr = serverPeer.getTxRepository();
          
          int nodeId = serverPeer.getServerPeerID();
@@ -142,7 +139,7 @@
                
          postOffice = new DefaultPostOffice(ds, tm, sqlProperties,
                                          createTablesOnStartup,
-                                         nodeId, officeName, ms, pm, tr, ff, cf, pool);
+                                         nodeId, officeName, ms, pm, tr, ff, cf);
          
          postOffice.start();
          

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/DefaultPostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/DefaultPostOffice.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/DefaultPostOffice.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -39,7 +39,6 @@
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 
-import org.jboss.jms.server.QueuedExecutorPool;
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.Filter;
@@ -58,7 +57,6 @@
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TransactionRepository;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
 import EDU.oswego.cs.dl.util.concurrent.ReentrantWriterPreferenceReadWriteLock;
 
@@ -88,7 +86,6 @@
    protected TransactionRepository tr;
    protected FilterFactory filterFactory;
    protected ConditionFactory conditionFactory;
-   protected QueuedExecutorPool pool;
    protected int currentNodeId;
 
    // Map <NodeID, Map<queueName, Binding>>
@@ -113,8 +110,7 @@
                          int nodeId, String officeName, MessageStore ms,
                          PersistenceManager pm,
                          TransactionRepository tr, FilterFactory filterFactory,
-                         ConditionFactory conditionFactory,
-                         QueuedExecutorPool pool)
+                         ConditionFactory conditionFactory)
    {
       super (ds, tm, sqlProperties, createTablesOnStartup);
 
@@ -130,7 +126,6 @@
       this.tr = tr;
       this.filterFactory = filterFactory;
       this.conditionFactory = conditionFactory;
-      this.pool = pool;
       this.officeName = officeName;
 
    }
@@ -662,10 +657,9 @@
       Queue queue;
 
       if (nodeID == currentNodeId)
-      {
-         QueuedExecutor executor = (QueuedExecutor)pool.get();
+      {         
          queue =
-            new PagingFilteredQueue(queueName, channelID, ms, pm, true, true, executor, -1, filter);
+            new PagingFilteredQueue(queueName, channelID, ms, pm, true, true, -1, filter);
       }
       else
       {

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -41,16 +41,15 @@
 import java.util.Properties;
 import java.util.Set;
 
+import javax.management.ListenerNotFoundException;
+import javax.management.MBeanNotificationInfo;
+import javax.management.Notification;
+import javax.management.NotificationBroadcasterSupport;
+import javax.management.NotificationFilter;
+import javax.management.NotificationListener;
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
-import javax.management.NotificationBroadcasterSupport;
-import javax.management.NotificationListener;
-import javax.management.MBeanNotificationInfo;
-import javax.management.NotificationFilter;
-import javax.management.ListenerNotFoundException;
-import javax.management.Notification;
 
-import org.jboss.jms.server.QueuedExecutorPool;
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.Delivery;
 import org.jboss.messaging.core.Filter;
@@ -83,6 +82,8 @@
 import org.jgroups.blocks.MessageDispatcher;
 import org.jgroups.blocks.RequestHandler;
 
+import EDU.oswego.cs.dl.util.concurrent.LinkedQueue;
+import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;
 import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 
 /**
@@ -217,8 +218,9 @@
    private NotificationBroadcasterSupport nbSupport;
 
    private QueuedExecutor viewExecutor;
-
-
+   
+   private PooledExecutor pooledExecutor;
+   
    // Constructors ---------------------------------------------------------------------------------
 
    /*
@@ -235,18 +237,18 @@
                                      TransactionRepository tr,
                                      FilterFactory filterFactory,
                                      ConditionFactory conditionFactory,
-                                     QueuedExecutorPool pool,
                                      String groupName,
                                      JChannelFactory JChannelFactory,
                                      long stateTimeout, long castTimeout,
                                      MessagePullPolicy redistributionPolicy,
                                      ClusterRouterFactory rf,
                                      FailoverMapper failoverMapper,
-                                     long statsSendPeriod)
+                                     long statsSendPeriod,
+                                     int poolSize)
       throws Exception
    {
       super (ds, tm, sqlProperties, createTablesOnStartup, nodeId, officeName, ms, pm, tr,
-             filterFactory, conditionFactory, pool);
+             filterFactory, conditionFactory);
 
       this.groupName = groupName;
 
@@ -281,6 +283,10 @@
       viewExecutor = new QueuedExecutor();
 
       this.jChannelFactory = JChannelFactory;
+      
+      this.pooledExecutor = new PooledExecutor(new LinkedQueue(), poolSize);
+      
+      this.pooledExecutor.setMinimumPoolSize(poolSize);
    }
 
    // MessagingComponent overrides -----------------------------------------------------------------
@@ -888,7 +894,7 @@
                         // We now trigger delivery - this may cause a pull event
                         // We only do this if there are no refs in the local queue
 
-                        localQueue.deliver(false);
+                        localQueue.deliver();
 
                         if (trace) { log.trace(this + " triggered delivery for " + localQueue.getName()); }
                      }
@@ -1023,6 +1029,11 @@
          }
       }
    }
+   
+   public PooledExecutor getPooledExecutor()
+   {
+      return pooledExecutor;
+   }
 
    // Replicator implementation --------------------------------------------------------------------
 
@@ -1201,22 +1212,38 @@
             {
                if (tx == null)
                {
-                  if (numberRemote == 1)
-                  {
-                     if (trace) { log.trace(this + " unicasting message to " + lastNodeId); }
-
-                     // Unicast - only one node is interested in the message
-                     asyncSendRequest(new MessageRequest(condition.toText(),
-                                                         ref.getMessage(), null), lastNodeId);
-                  }
-                  else
-                  {
-                     if (trace) { log.trace(this + " multicasting message to group"); }
-
-                     // Multicast - more than one node is interested
-                     asyncSendRequest(new MessageRequest(condition.toText(),
-                                                         ref.getMessage(), queueNameNodeIdMap));
-                  }
+                  //TODO temporarily commented out since if we some messages are unicast and others
+                  //are multicast then later sent messages can overtake earlier sent messages
+                  //(ordering is only guaranteed for messages sent in one of the two different ways)
+                  //which can result in messaged being received at their destinations out of order
+                  //To resolve this we use multicast always for now
+                  //http://jira.jboss.org/jira/browse/JBMESSAGING-868
+                  
+//                  if (numberRemote == 1)
+//                  {
+//                     if (trace) { log.trace(this + " unicasting message to " + lastNodeId); }
+//
+//                     // Unicast - only one node is interested in the message
+//                     asyncSendRequest(new MessageRequest(condition.toText(),
+//                                                         ref.getMessage(), null), lastNodeId);
+//                  }
+//                  else
+//                  {
+//                     if (trace) { log.trace(this + " multicasting message to group"); }
+//
+//                     // Multicast - more than one node is interested
+//                     asyncSendRequest(new MessageRequest(condition.toText(),
+//                                                         ref.getMessage(), queueNameNodeIdMap));
+//                  }
+                  
+                  if (trace) { log.trace(this + " multicasting message to group"); }
+                                                     
+                  // Multicast - more than one node is interested
+                  asyncSendRequest(new MessageRequest(condition.toText(),
+                                                      ref.getMessage(), queueNameNodeIdMap));
+                  
+                  
+                  
                }
                else
                {
@@ -1628,17 +1655,15 @@
 
       if (nodeID == currentNodeId)
       {
-         QueuedExecutor executor = (QueuedExecutor)pool.get();
-
          if (failedNodeID == null)
          {
             queue = new LocalClusteredQueue(this, nodeID, queueName, channelId, ms, pm, true,
-                                            durable, executor, -1, filter, tr);
+                                            durable, -1, filter, tr);
          }
          else
          {
             queue = new FailedOverQueue(this, nodeID, queueName, channelId, ms, pm, true,
-                                        durable, executor, filter, tr, failedNodeID.intValue());
+                                        durable, filter, tr, failedNodeID.intValue());
          }
       }
       else

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/FailedOverQueue.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/FailedOverQueue.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/FailedOverQueue.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -6,12 +6,11 @@
  */
 package org.jboss.messaging.core.plugin.postoffice.cluster;
 
-import org.jboss.messaging.core.tx.TransactionRepository;
-import org.jboss.messaging.core.plugin.contract.PostOffice;
+import org.jboss.messaging.core.Filter;
+import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
-import org.jboss.messaging.core.Filter;
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
+import org.jboss.messaging.core.tx.TransactionRepository;
 
 /**
  *
@@ -35,25 +34,25 @@
 
    // Constructors ---------------------------------------------------------------------------------
 
-   public FailedOverQueue(PostOffice office, int nodeID, String name, long id, MessageStore ms,
+   public FailedOverQueue(ClusteredPostOffice office, int nodeID, String name, long id, MessageStore ms,
                           PersistenceManager pm, boolean acceptReliableMessages,
-                          boolean recoverable, QueuedExecutor executor, Filter filter,
+                          boolean recoverable, Filter filter,
                           TransactionRepository tr, int fullSize, int pageSize, int downCacheSize,
                           int failedNodeID)
    {
       super(office, nodeID, name, id, ms, pm, acceptReliableMessages, recoverable,
-            executor, -1, filter, tr, fullSize, pageSize, downCacheSize);
+            -1, filter, tr, fullSize, pageSize, downCacheSize);
 
       this.failedNodeID = failedNodeID;
    }
 
-   public FailedOverQueue(PostOffice office, int nodeID, String name, long id, MessageStore ms,
+   public FailedOverQueue(ClusteredPostOffice office, int nodeID, String name, long id, MessageStore ms,
                           PersistenceManager pm, boolean acceptReliableMessages,
-                          boolean recoverable, QueuedExecutor executor, Filter filter,
+                          boolean recoverable, Filter filter,
                           TransactionRepository tr, int failedNodeID)
    {
       super(office, nodeID, name, id, ms, pm, acceptReliableMessages, recoverable,
-            executor, -1, filter, tr);
+            -1, filter, tr);
 
       this.failedNodeID = failedNodeID;
    }

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/LocalClusteredQueue.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/LocalClusteredQueue.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/LocalClusteredQueue.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -21,19 +21,22 @@
  */
 package org.jboss.messaging.core.plugin.postoffice.cluster;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.*;
+import org.jboss.messaging.core.Delivery;
+import org.jboss.messaging.core.Filter;
+import org.jboss.messaging.core.SimpleDelivery;
 import org.jboss.messaging.core.local.PagingFilteredQueue;
 import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageReference;
+import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
-import org.jboss.messaging.core.plugin.contract.PostOffice;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TransactionRepository;
 import org.jboss.messaging.util.Future;
 
+import EDU.oswego.cs.dl.util.concurrent.Executor;
+
 /**
  * 
  * A LocalClusteredQueue
@@ -60,33 +63,39 @@
    
    private TransactionRepository tr;
    
+   private Executor executor;
+   
    //TODO - we shouldn't have to specify office AND nodeId
-   public LocalClusteredQueue(PostOffice office, int nodeId, String name, long id,
+   public LocalClusteredQueue(ClusteredPostOffice office, int nodeId, String name, long id,
                               MessageStore ms, PersistenceManager pm,
                               boolean acceptReliableMessages, boolean recoverable,
-                              QueuedExecutor executor, int maxSize,
+                              int maxSize,
                               Filter filter, TransactionRepository tr,
                               int fullSize, int pageSize, int downCacheSize)
    {
       super(name, id, ms, pm, acceptReliableMessages, recoverable, 
-            executor, maxSize, filter, fullSize, pageSize, downCacheSize);
+            maxSize, filter, fullSize, pageSize, downCacheSize);
      
       this.nodeId = nodeId;
       this.tr = tr;
       this.office = (PostOfficeInternal)office; //TODO - This cast is potentially unsafe - handle better
+      
+      this.executor = this.office.getPooledExecutor();
    }
    
-   public LocalClusteredQueue(PostOffice office, int nodeId, String name, long id,
+   public LocalClusteredQueue(ClusteredPostOffice office, int nodeId, String name, long id,
                               MessageStore ms, PersistenceManager pm,
                               boolean acceptReliableMessages, boolean recoverable,
-                              QueuedExecutor executor, int maxSize,
+                              int maxSize,
                               Filter filter, TransactionRepository tr)
    {
-      super(name, id, ms, pm, acceptReliableMessages, recoverable, executor, maxSize, filter);
+      super(name, id, ms, pm, acceptReliableMessages, recoverable, maxSize, filter);
       
       this.nodeId = nodeId;
       this.tr = tr;
       this.office = (PostOfficeInternal)office; //TODO - This cast is potentially unsafe - handle better
+      
+      this.executor = this.office.getPooledExecutor();
    }
    
    public void setPullQueue(RemoteQueueStub queue)
@@ -159,20 +168,12 @@
       
       checkClosed();
       
-      Future result = new Future();
-      
-      // Instead of executing directly, we add the handle request to the event queue.
-      // Since remoting doesn't currently handle non blocking IO, we still have to wait for the
-      // result, but when remoting does, we can use a full SEDA approach and get even better
-      // throughput.
-      this.executor.execute(new HandleRunnable(result, null, ref, false));
-
-      return (Delivery)result.getResult();
+      return handleInternal(null, ref, null, false);
    }
    
    public void acknowledgeFromCluster(Delivery d) throws Throwable
    {
-      acknowledgeInternal(d, null, false, false);      
+      acknowledgeInternal(d, null, false);      
    }
    
    public void handlePullMessagesResult(RemoteQueueStub remoteQueue, Message message,
@@ -203,12 +204,10 @@
         
    public int getRefCount()
    {
-      //We are only interested in getting the reference count when delivery is not in progress
-      //since we don't want mid delivery transient spurious values, so we execute the request
-      //on the same thread.
-      
       Future result = new Future();
       
+      //This needs to be run on a different thread to the one used by JGroups to deliver the message
+      //to avoid deadlock
       try
       {
          this.executor.execute(new GetRefCountRunnable(result));
@@ -470,8 +469,7 @@
             {
                ref = ms.reference(message);
                
-               //Should be executed synchronously since we already in the event queue
-               Delivery delRet = handleInternal(null, ref, tx, true, true);
+               Delivery delRet = handleInternal(null, ref, tx, true);
 
                if (delRet == null || !delRet.isSelectorAccepted())
                {

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PostOfficeInternal.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PostOfficeInternal.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/PostOfficeInternal.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -28,6 +28,8 @@
 import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 
+import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;
+
 /**
  * 
  * A PostOfficeInternal
@@ -75,4 +77,6 @@
    boolean referenceExistsInStorage(long channelID, long messageID) throws Exception;
    
    void handleMessagePullResult(int remoteNodeId, long holdingTxId, String queueName, Message message) throws Throwable;
+   
+   PooledExecutor getPooledExecutor();
 }

Modified: trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/RemoteQueueStub.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/RemoteQueueStub.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/RemoteQueueStub.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -182,7 +182,7 @@
       throw new UnsupportedOperationException();
    }
 
-   public void deliver(boolean synchronous)
+   public void deliver()
    {
       throw new UnsupportedOperationException();
    }

Modified: trunk/tests/src/org/jboss/test/messaging/core/SimpleChannel.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/SimpleChannel.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/SimpleChannel.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -85,7 +85,7 @@
       return ms;
    }
 
-   public void deliver(boolean synch)
+   public void deliver()
    {
       log.debug("deliver()");
       deliveryNotification = true;

Modified: trunk/tests/src/org/jboss/test/messaging/core/SimpleReceiver.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/SimpleReceiver.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/SimpleReceiver.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -221,7 +221,7 @@
          return;
       }
       log.trace("receiver explicitely requesting message from the channel");
-      channel.deliver(true);
+      channel.deliver();
    }
 
    public void clear()

Modified: trunk/tests/src/org/jboss/test/messaging/core/local/NonRecoverablePagingFilteredQueueTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/local/NonRecoverablePagingFilteredQueueTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/local/NonRecoverablePagingFilteredQueueTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -24,8 +24,6 @@
 import org.jboss.messaging.core.local.PagingFilteredQueue;
 import org.jboss.test.messaging.core.local.base.PagingFilteredQueueTestBase;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
@@ -55,7 +53,7 @@
    {
       super.setUp();
       
-      queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, false, new QueuedExecutor(), -1, null);
+      queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, false, -1, null);
    }
    
    public void tearDown() throws Exception
@@ -71,7 +69,7 @@
 
    public void recoverChannel() throws Exception
    {
-      queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, false, new QueuedExecutor(), -1, null);
+      queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, false, -1, null);
    }
 
    // Public --------------------------------------------------------

Modified: trunk/tests/src/org/jboss/test/messaging/core/local/RecoverablePagingFilteredQueueTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/local/RecoverablePagingFilteredQueueTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/local/RecoverablePagingFilteredQueueTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -24,8 +24,6 @@
 import org.jboss.messaging.core.local.PagingFilteredQueue;
 import org.jboss.test.messaging.core.local.base.PagingFilteredQueueTestBase;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
@@ -55,7 +53,7 @@
    {
       super.setUp();
       
-      queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null);
+      queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null);
    }
 
    public void tearDown() throws Exception
@@ -71,7 +69,7 @@
 
    public void recoverChannel() throws Exception
    {
-      queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null);
+      queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null);
    }
 
    // Public --------------------------------------------------------

Modified: trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/local/base/PagingFilteredQueueTestBase.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -48,8 +48,6 @@
 import org.jboss.test.messaging.tools.jmx.ServiceContainer;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * The QueueTest test strategy is to try as many combination as it makes sense of the following
  * variables:
@@ -208,7 +206,7 @@
    {
       Filter f = new SimpleFilter(3);
             
-      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, false, new QueuedExecutor(), -1, f);
+      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, false, -1, f);
       
       Message m1 = new CoreMessage(1, false, 0, 0, (byte)0, null, null);
       Message m2 = new CoreMessage(2, false, 0, 0, (byte)0, null, null);
@@ -413,11 +411,11 @@
 
       SimpleReceiver receiver = new SimpleReceiver("ACKING", SimpleReceiver.ACKING);
       queue.add(receiver);
-      queue.deliver(true);
+      queue.deliver();
       assertEquals(1, receiver.getMessages().size());
       assertEquals(0, ((Message)receiver.getMessages().get(0)).getMessageID());
 
-      queue.deliver(true);
+      queue.deliver();
       assertEquals(1, receiver.getMessages().size());
 
 
@@ -456,7 +454,7 @@
 
       SimpleReceiver receiver = new SimpleReceiver("ACKING", SimpleReceiver.ACKING);
       queue.add(receiver);
-      queue.deliver(true);
+      queue.deliver();
       assertEquals(10, receiver.getMessages().size());
       for(int i = 0; i < NUMBER_OF_MESSAGES; i++)
       {
@@ -464,7 +462,7 @@
       }
       receiver.clear();
 
-      queue.deliver(true);
+      queue.deliver();
       assertEquals(0, receiver.getMessages().size());
    }
 
@@ -508,13 +506,13 @@
 
       assertTrue(queue.browse().isEmpty());
 
-      queue.deliver(true);
+      queue.deliver();
       
       Receiver r = new SimpleReceiver("ACKING", SimpleReceiver.ACKING);
       
       queue.add(r);
       
-      queue.deliver(true);
+      queue.deliver();
    }
 
    ///////////
@@ -555,15 +553,15 @@
       assertTrue(sm.isReliable());
       assertEquals(0, sm.getMessageID());
 
-      queue.deliver(true);
+      queue.deliver();
 
       SimpleReceiver receiver = new SimpleReceiver("ACKING", SimpleReceiver.ACKING);
       queue.add(receiver);
-      queue.deliver(true);
+      queue.deliver();
       assertEquals(1, receiver.getMessages().size());
       assertEquals(0, ((Message)receiver.getMessages().get(0)).getMessageID());
 
-      queue.deliver(true);
+      queue.deliver();
       assertEquals(1, receiver.getMessages().size());
    }
 
@@ -605,13 +603,13 @@
          // the channel must not accept the message
          assertNull(delivery);
 
-         queue.deliver(true);
+         queue.deliver();
          
          Receiver r = new SimpleReceiver("ACKING", SimpleReceiver.ACKING);
          
          queue.add(r);
          
-         queue.deliver(true);
+         queue.deliver();
       }
 
       assertTrue(queue.browse().isEmpty());
@@ -655,7 +653,7 @@
 
       SimpleReceiver receiver = new SimpleReceiver("ACKING", SimpleReceiver.ACKING);
       queue.add(receiver);
-      queue.deliver(true);
+      queue.deliver();
       assertEquals(10, receiver.getMessages().size());
       for(int i = 0; i < NUMBER_OF_MESSAGES; i++)
       {
@@ -663,7 +661,7 @@
       }
       receiver.clear();
 
-      queue.deliver(true);
+      queue.deliver();
       assertEquals(0, receiver.getMessages().size());
    }
 

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_2PCTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_2PCTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_2PCTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -28,12 +28,10 @@
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 
-
 /**
  * 
  * A ChannelShare_NP_2PC_Recoverable.
@@ -65,10 +63,10 @@
    
    public void testChannelShareNP_2PC() throws Throwable
    {
-      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
-      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, new QueuedExecutor(), -1, null, 50, 10, 5);
-                  
+      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, -1, null, 50, 10, 5);
+     
       Message[] msgs = new Message[150];
       
       MessageReference[] refs1 = new MessageReference[150];

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_NTTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_NTTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_NTTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -27,12 +27,10 @@
 import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 
-
 /**
  * 
  * A ChannelShare_NP_NT_Recoverable.
@@ -64,9 +62,9 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
      
-      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, new QueuedExecutor(), -1, null, 50, 10, 5);
+      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, -1, null, 50, 10, 5);
            
       Message[] msgs = new Message[150];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_TTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_TTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_NP_TTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -28,12 +28,10 @@
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 
-
 /**
  * 
  * A ChannelShare_NP_T_Recoverable.
@@ -65,9 +63,9 @@
    
    public void testChannelShareNP_Transactional() throws Throwable
    {
-      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
-      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, new QueuedExecutor(), -1, null, 50, 10, 5);
+      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, -1, null, 50, 10, 5);
      
                                
       Message[] msgs = new Message[150];

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_2PCTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_2PCTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_2PCTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -28,12 +28,10 @@
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 
-
 /**
  * 
  * A ChannelShare_P_2PCTest
@@ -60,9 +58,9 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
-      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, new QueuedExecutor(), -1, null, 50, 10, 5);
+      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, -1, null, 50, 10, 5);
      
                             
       Message[] msgs = new Message[150];

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_NTTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_NTTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_NTTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -27,11 +27,9 @@
 import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A ChannelShare_P_NT_Recoverable.
@@ -64,9 +62,9 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
-      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, new QueuedExecutor(), -1, null, 50, 10, 5);
+      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, -1, null, 50, 10, 5);
      
                                 
       Message[] msgs = new Message[150];

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_TTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_TTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/ChannelShare_P_TTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -28,11 +28,9 @@
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A ChannelShare_P_T_Recoverable.
@@ -64,9 +62,9 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
-      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, new QueuedExecutor(), -1, null, 50, 10, 5);
+      PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", 2, ms, pm, true, true, -1, null, 50, 10, 5);
                                 
       Message[] msgs = new Message[150];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/PagingTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -31,9 +31,7 @@
 import org.jboss.test.messaging.tools.jmx.ServiceContainer;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
 
-
 /**
  * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
  * @version <tt>$Revision$</tt>
@@ -65,7 +63,7 @@
    {
       PagingFilteredQueue p =
          new PagingFilteredQueue("queue0", 1, ms, pm, true, true,
-                                 new QueuedExecutor(), -1, null, 100, 20, 10);
+                                 -1, null, 100, 20, 10);
            
       CoreMessage m = null;
 

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_2PCTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_2PCTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_2PCTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -29,11 +29,9 @@
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A PagingTest_NP_2PC_Recoverable.
@@ -67,7 +65,7 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
             
       Message[] msgs = new Message[241];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_NTTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_NTTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_NTTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -28,11 +28,9 @@
 import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A PagingTest_NP_NT_Recoverable.
@@ -66,7 +64,7 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
       Message[] msgs = new Message[241];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_TTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_TTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_NP_TTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -29,11 +29,9 @@
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A PagingTest_NP_T_Recoverable.
@@ -67,7 +65,7 @@
  
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
       Message[] msgs = new Message[241];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_2PCTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_2PCTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_2PCTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -29,11 +29,9 @@
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A PagingTest_P_2PC_Recoverable.
@@ -67,7 +65,7 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
       Message[] msgs = new Message[241];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_NTTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_NTTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_NTTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -28,11 +28,9 @@
 import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A PagingTest_P_NT_Recoverable.
@@ -66,7 +64,7 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
       Message[] msgs = new Message[241];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_TTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_TTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_P_TTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -29,11 +29,9 @@
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.Transaction;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A PagingTest_P_T_Recoverable.
@@ -67,7 +65,7 @@
    
    public void test1() throws Throwable
    {
-      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, new QueuedExecutor(), -1, null, 100, 20, 10);
+      PagingFilteredQueue queue = new PagingFilteredQueue("queue1", 1, ms, pm, true, true, -1, null, 100, 20, 10);
       
       Message[] msgs = new Message[241];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/SingleChannel_ReloadTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -30,11 +30,9 @@
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
 import org.jboss.messaging.core.plugin.LockMap;
 import org.jboss.messaging.core.tx.TransactionRepository;
-import org.jboss.test.messaging.util.CoreMessageFactory;
 import org.jboss.test.messaging.core.paging.base.PagingStateTestBase;
+import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A PagingTest_Reload.
@@ -70,7 +68,7 @@
    {
       PagingFilteredQueue queue =
          new PagingFilteredQueue("queue1", 1, ms, pm, true, true,
-                                 new QueuedExecutor(), -1, null, 100, 20, 10);
+                                 -1, null, 100, 20, 10);
 
       Message[] msgs = new Message[200];
       
@@ -133,7 +131,7 @@
          
       PagingFilteredQueue queue2 =
          new PagingFilteredQueue("queue1", 1, ms, pm, true, true,
-                                 new QueuedExecutor(), -1, null, 100, 20, 10);
+                                 -1, null, 100, 20, 10);
       queue2.deactivate();
       queue2.load();
       
@@ -170,7 +168,7 @@
       
       PagingFilteredQueue queue =
          new PagingFilteredQueue("queue1", 1, ms, pm, true, true,
-                                 new QueuedExecutor(), -1, null, 100, 20, 10);
+                                 -1, null, 100, 20, 10);
       
       Message[] msgs = new Message[200];
       
@@ -233,7 +231,7 @@
 
       PagingFilteredQueue queue2 =
          new PagingFilteredQueue("queue1", 1, ms, pm, true, true,
-                                 new QueuedExecutor(), -1, null, 100, 20, 10);
+                                 -1, null, 100, 20, 10);
       queue2.deactivate();
       queue2.load();
       
@@ -264,7 +262,7 @@
       
       PagingFilteredQueue queue =
          new PagingFilteredQueue("queue1", 1, ms, pm, true, true,
-                                 new QueuedExecutor(), -1, null, 100, 20, 10);
+                                 -1, null, 100, 20, 10);
   
       Message[] msgs = new Message[200];
       

Modified: trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/paging/base/PagingStateTestBase.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -42,9 +42,9 @@
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
+import org.jboss.messaging.core.tx.MessagingXid;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TransactionRepository;
-import org.jboss.messaging.core.tx.MessagingXid;
 import org.jboss.test.messaging.MessagingTestCase;
 import org.jboss.test.messaging.tools.jmx.ServiceContainer;
 import org.jboss.tm.TransactionManagerService;
@@ -351,7 +351,7 @@
    {
       ConsumingReceiver r = new ConsumingReceiver(num, refs, consumeCount, false, false);
       channel.add(r);
-      channel.deliver(false);
+      channel.deliver();
       r.acknowledge();
       channel.remove(r);
       //Need to give enough time for the call to handle to complete and return
@@ -365,7 +365,7 @@
    {
       ConsumingReceiver r = new ConsumingReceiver(num, refs, consumeCount, true, false);
       channel.add(r);
-      channel.deliver(false);
+      channel.deliver();
       r.acknowledge();
       channel.remove(r);
       //Need to give enough time for the call to handle to complete and return
@@ -379,7 +379,7 @@
    {
       ConsumingReceiver r = new ConsumingReceiver(num, refs, consumeCount, true, true);
       channel.add(r);
-      channel.deliver(false);
+      channel.deliver();
       r.acknowledge();
       channel.remove(r);
       //Need to give enough time for the call to handle to complete and return
@@ -391,7 +391,7 @@
    {
       CancellingReceiver r1 = new CancellingReceiver(number);
       channel.add(r1);
-      channel.deliver(false);   
+      channel.deliver();   
       SimpleDelivery[] dels = r1.getToCancel();
       channel.remove(r1);
       //Need to give enough time for the call to handle to complete and return
@@ -405,7 +405,7 @@
    {
       CancellingReceiver r1 = new CancellingReceiver(number);
       channel.add(r1);
-      channel.deliver(false);   
+      channel.deliver();   
       r1.cancel();
       channel.remove(r1);
       //Need to give enough time for the call to handle to complete and return

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/base/PostOfficeTestBase.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -24,7 +24,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.jboss.jms.server.QueuedExecutorPool;
 import org.jboss.messaging.core.FilterFactory;
 import org.jboss.messaging.core.Queue;
 import org.jboss.messaging.core.message.Message;
@@ -32,20 +31,20 @@
 import org.jboss.messaging.core.message.SimpleMessageStore;
 import org.jboss.messaging.core.plugin.IDManager;
 import org.jboss.messaging.core.plugin.JDBCPersistenceManager;
+import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
 import org.jboss.messaging.core.plugin.contract.Condition;
 import org.jboss.messaging.core.plugin.contract.ConditionFactory;
+import org.jboss.messaging.core.plugin.contract.FailoverMapper;
 import org.jboss.messaging.core.plugin.contract.MessageStore;
 import org.jboss.messaging.core.plugin.contract.PersistenceManager;
 import org.jboss.messaging.core.plugin.contract.PostOffice;
-import org.jboss.messaging.core.plugin.contract.ClusteredPostOffice;
-import org.jboss.messaging.core.plugin.contract.FailoverMapper;
 import org.jboss.messaging.core.plugin.postoffice.DefaultPostOffice;
-import org.jboss.messaging.core.plugin.postoffice.cluster.MessagePullPolicy;
-import org.jboss.messaging.core.plugin.postoffice.cluster.NullMessagePullPolicy;
 import org.jboss.messaging.core.plugin.postoffice.cluster.ClusterRouterFactory;
-import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultRouterFactory;
-import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultFailoverMapper;
 import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultClusteredPostOffice;
+import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultFailoverMapper;
+import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultRouterFactory;
+import org.jboss.messaging.core.plugin.postoffice.cluster.MessagePullPolicy;
+import org.jboss.messaging.core.plugin.postoffice.cluster.NullMessagePullPolicy;
 import org.jboss.messaging.core.plugin.postoffice.cluster.jchannelfactory.JChannelFactory;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.messaging.core.tx.TransactionRepository;
@@ -80,12 +79,11 @@
                                                                   ServiceContainer sc,
                                                                   MessageStore ms,
                                                                   PersistenceManager pm,
-                                                                  TransactionRepository tr,
-                                                                  QueuedExecutorPool pool)
+                                                                  TransactionRepository tr)
       throws Exception
    {
       return createClusteredPostOffice(nodeID, groupName, 5000, 5000, new NullMessagePullPolicy(),
-                                       sc, ms, pm, tr, pool);
+                                       sc, ms, pm, tr);
    }
 
 
@@ -97,8 +95,7 @@
                                                                   ServiceContainer sc,
                                                                   MessageStore ms,
                                                                   PersistenceManager pm,
-                                                                  TransactionRepository tr,
-                                                                  QueuedExecutorPool pool)
+                                                                  TransactionRepository tr)
       throws Exception
    {
       FilterFactory ff = new SimpleFilterFactory();
@@ -124,9 +121,9 @@
       DefaultClusteredPostOffice postOffice =
          new DefaultClusteredPostOffice(sc.getDataSource(), sc.getTransactionManager(),
                                         sc.getClusteredPostOfficeSQLProperties(), true, nodeID,
-                                        "Clustered", ms, pm, tr, ff, cf, pool,
+                                        "Clustered", ms, pm, tr, ff, cf,
                                         groupName, jChannelFactory,
-                                        stateTimeout, castTimeout, pullPolicy, rf, mapper, 1000);
+                                        stateTimeout, castTimeout, pullPolicy, rf, mapper, 1000, 10);
       
       postOffice.start();
 
@@ -147,8 +144,6 @@
    
    protected TransactionRepository tr;
    
-   protected QueuedExecutorPool pool;
-   
    protected ConditionFactory conditionFactory;
    
    // Constructors --------------------------------------------------
@@ -168,7 +163,7 @@
       
       DefaultPostOffice postOffice = 
          new DefaultPostOffice(sc.getDataSource(), sc.getTransactionManager(),
-                            sc.getPostOfficeSQLProperties(), true, 1, "Simple", ms, pm, tr, ff, cf, pool);
+                               sc.getPostOfficeSQLProperties(), true, 1, "Simple", ms, pm, tr, ff, cf);
       
       postOffice.start();      
       
@@ -267,8 +262,6 @@
       tr = new TransactionRepository(pm, ms, transactionIDManager);
       tr.start();
 
-      pool = new QueuedExecutorPool(10);
-
       channelIDManager = new IDManager("CHANNEL_ID", 10, pm);
       channelIDManager.start();
 

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/DefaultPostOfficeTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/DefaultPostOfficeTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/DefaultPostOfficeTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -37,8 +37,6 @@
 import org.jboss.test.messaging.core.plugin.base.PostOfficeTestBase;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A DefaultPostOfficeTest
@@ -82,7 +80,7 @@
          
          PagingFilteredQueue queue1 =
             new PagingFilteredQueue("durableQueue", channelIDManager.getID(), ms, pm, true, true,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          
          Binding binding1 =
@@ -102,7 +100,7 @@
          //Bind one non durable
          PagingFilteredQueue queue2 =
             new PagingFilteredQueue("nonDurableQueue", channelIDManager.getID(), ms, pm, true,
-                                    false, (QueuedExecutor)pool.get(), -1, null);
+                                    false, -1, null);
          
          Binding binding2 =
             office1.bindQueue(new SimpleCondition("condition2"), queue2);
@@ -192,42 +190,42 @@
       {      
          office = createPostOffice();
          
-         PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null);
+         PagingFilteredQueue queue1 = new PagingFilteredQueue("queue1", channelIDManager.getID(), ms, pm, true, false, -1, null);
          
          Binding binding1 =
             office.bindQueue(new SimpleCondition("condition1"), queue1);
          
-         PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null);
+         PagingFilteredQueue queue2 = new PagingFilteredQueue("queue2", channelIDManager.getID(), ms, pm, true, false, -1, null);
          
          Binding binding2 =
             office.bindQueue(new SimpleCondition("condition1"), queue2);
          
-         PagingFilteredQueue queue3 = new PagingFilteredQueue("queue3", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null);
+         PagingFilteredQueue queue3 = new PagingFilteredQueue("queue3", channelIDManager.getID(), ms, pm, true, false, -1, null);
          
          Binding binding3 =
             office.bindQueue(new SimpleCondition("condition1"), queue3);
          
-         PagingFilteredQueue queue4 = new PagingFilteredQueue("queue4", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null);
+         PagingFilteredQueue queue4 = new PagingFilteredQueue("queue4", channelIDManager.getID(), ms, pm, true, false, -1, null);
          
          Binding binding4 =
             office.bindQueue(new SimpleCondition("condition1"), queue4);
          
-         PagingFilteredQueue queue5 = new PagingFilteredQueue("queue5", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null);
+         PagingFilteredQueue queue5 = new PagingFilteredQueue("queue5", channelIDManager.getID(), ms, pm, true, false, -1, null);
          
          Binding binding5 =
             office.bindQueue(new SimpleCondition("condition2"), queue5);
          
-         PagingFilteredQueue queue6 = new PagingFilteredQueue("queue6", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null);
+         PagingFilteredQueue queue6 = new PagingFilteredQueue("queue6", channelIDManager.getID(), ms, pm, true, false, -1, null);
          
          Binding binding6 =
             office.bindQueue(new SimpleCondition("condition2"), queue6);
          
-         PagingFilteredQueue queue7 = new PagingFilteredQueue("queue7", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null);
+         PagingFilteredQueue queue7 = new PagingFilteredQueue("queue7", channelIDManager.getID(), ms, pm, true, false, -1, null);
          
          Binding binding7 =
             office.bindQueue(new SimpleCondition("condition2"), queue7);
          
-         PagingFilteredQueue queue8 = new PagingFilteredQueue("queue8", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null);
+         PagingFilteredQueue queue8 = new PagingFilteredQueue("queue8", channelIDManager.getID(), ms, pm, true, false, -1, null);
          
          Binding binding8 =
             office.bindQueue(new SimpleCondition("condition2"), queue8);
@@ -320,37 +318,37 @@
          
          PagingFilteredQueue queue1 =
             new PagingFilteredQueue("queue1", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue1);
          
          PagingFilteredQueue queue2 =
             new PagingFilteredQueue("queue2", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue2);
          
          PagingFilteredQueue queue3 =
             new PagingFilteredQueue("queue3", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue3);
          
          PagingFilteredQueue queue4 =
             new PagingFilteredQueue("queue4", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic2"), queue4);
          
          PagingFilteredQueue queue5 =
             new PagingFilteredQueue("queue5", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic2"), queue5);
          
          PagingFilteredQueue queue6 =
             new PagingFilteredQueue("queue6", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic2"), queue6);
       
@@ -479,7 +477,7 @@
          
          PagingFilteredQueue queue1 =
             new PagingFilteredQueue("queue1", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("condition1"), queue1);
               
@@ -534,19 +532,19 @@
       
          PagingFilteredQueue queue1 =
             new PagingFilteredQueue("queue1", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, filter);
+                                    -1, filter);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue1);
          
          PagingFilteredQueue queue2 =
             new PagingFilteredQueue("queue2", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue2);
          
          PagingFilteredQueue queue3 =
             new PagingFilteredQueue("queue3", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue3);
          
@@ -640,37 +638,37 @@
       
          PagingFilteredQueue queue1 =
             new PagingFilteredQueue("queue1", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue1);
          
          PagingFilteredQueue queue2 =
             new PagingFilteredQueue("queue2", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue2);
          
          PagingFilteredQueue queue3 =
             new PagingFilteredQueue("queue3", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue3);
          
          PagingFilteredQueue queue4 =
             new PagingFilteredQueue("queue4", channelIDManager.getID(), ms, pm, true, true,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic2"), queue4);
          
          PagingFilteredQueue queue5 =
             new PagingFilteredQueue("queue5", channelIDManager.getID(), ms, pm, true, true,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic2"), queue5);
          
          PagingFilteredQueue queue6 =
             new PagingFilteredQueue("queue6", channelIDManager.getID(), ms, pm, true, true,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic2"), queue6);
       
@@ -820,13 +818,13 @@
       
          PagingFilteredQueue queue1 =
             new PagingFilteredQueue("queue1", channelIDManager.getID(), ms, pm, true, false,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue1);
          
          PagingFilteredQueue queue2 =
             new PagingFilteredQueue("queue2", channelIDManager.getID(), ms, pm, true, true,
-                                    (QueuedExecutor)pool.get(), -1, null);
+                                    -1, null);
          
          postOffice.bindQueue(new SimpleCondition("topic1"), queue2);
           

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -38,8 +38,6 @@
 import org.jboss.test.messaging.core.plugin.postoffice.DefaultPostOfficeTest;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A DefaultClusteredPostOfficeTest
@@ -57,7 +55,7 @@
    // Static ---------------------------------------------------------------------------------------
    
    // Attributes -----------------------------------------------------------------------------------
-   
+    
    // Constructors ---------------------------------------------------------------------------------
 
    public DefaultClusteredPostOfficeTest(String name)
@@ -76,12 +74,12 @@
       try
       {         
          log.trace("Starting office 1");
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
 
          log.trace("starting office 2");
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
                   
-         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
+         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
          
          Thread.sleep(2000);
          
@@ -129,7 +127,7 @@
       {         
          // Start one office
          
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
          
          log.info("Created office1");
          
@@ -137,7 +135,7 @@
          
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "sub1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          Binding binding1 =
             office1.bindClusteredQueue(new SimpleCondition("topic1"), queue1);
@@ -146,7 +144,7 @@
          
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office1, 1, "sub2", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          Binding binding2 =
             office1.bindClusteredQueue(new SimpleCondition("topic1"), queue2);
@@ -155,7 +153,7 @@
          
          // Start another office - make sure it picks up the bindings from the first node
          
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
          
          log.info("Created office 2");
          
@@ -171,7 +169,7 @@
          
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office2, 2, "sub3", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          Binding binding3 =
             office2.bindClusteredQueue(new SimpleCondition("topic1"), queue3);
@@ -200,7 +198,7 @@
          
          LocalClusteredQueue queue4 =
             new LocalClusteredQueue(office2, 2, "sub4", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          Binding binding4 =
             office2.bindClusteredQueue(new SimpleCondition("topic1"), queue4);
@@ -251,7 +249,7 @@
 
          // Add a third office
                   
-         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
+         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
          
          // Maks sure it picks up the bindings
          
@@ -267,7 +265,7 @@
                   
          LocalClusteredQueue queue5 =
             new LocalClusteredQueue(office3, 3, "sub5", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          
          Binding binding5 =
             office3.bindClusteredQueue(new SimpleCondition("topic1"), queue5);
@@ -305,14 +303,14 @@
          
          LocalClusteredQueue queue6 =
             new LocalClusteredQueue(office1, 1, "sub6", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          
          Binding binding6 =
             office1.bindClusteredQueue(new SimpleCondition("topic1"), queue6);
          
          LocalClusteredQueue queue7 =
             new LocalClusteredQueue(office1, 1, "sub7", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          
          Binding binding7 =
             office1.bindClusteredQueue(new SimpleCondition("topic1"), queue7);
@@ -395,9 +393,9 @@
          assertEquivalent(binding6, (Binding)iter.next());
          
          // Restart office 1 and office 2
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
          
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
          
          bindings = office1.listAllBindingsForCondition(new SimpleCondition("topic1"));
          assertNotNull(bindings);
@@ -430,9 +428,9 @@
          office3.stop();
          
          // Start them all
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
-         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
+         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
          
          // Only the durable queue should survive
          
@@ -593,25 +591,25 @@
           
       try
       {   
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
          
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
          
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          
          try
          {
@@ -625,7 +623,7 @@
 
          LocalClusteredQueue queue4 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          
          try
          {
@@ -643,13 +641,13 @@
 
          LocalClusteredQueue queue5 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue5);
          
          PagingFilteredQueue queue6 =
             new PagingFilteredQueue("queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null);
+                                    true, false, -1, null);
          try
          {
             office1.bindQueue(new SimpleCondition("queue1"), queue6);
@@ -665,19 +663,19 @@
          // It should be possible to bind queues locally into a clustered post office
          LocalClusteredQueue queue7 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          office1.bindQueue(new SimpleCondition("queue1"), queue7);
          
          LocalClusteredQueue queue8 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          office2.bindQueue(new SimpleCondition("queue1"), queue8);
          
          LocalClusteredQueue queue9 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          try
          {
@@ -717,27 +715,27 @@
           
       try
       {   
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
          
          SimpleFilter filter1 = new SimpleFilter(2);
          SimpleFilter filter2 = new SimpleFilter(3);
       
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor)pool.get(), -1, filter1, tr);
+                                    true, recoverable, -1, filter1, tr);
 
          office1.bindClusteredQueue(new SimpleCondition("topic1"), queue1);
          
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue2", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor)pool.get(), -1, filter2, tr);
+                                    true, recoverable, -1, filter2, tr);
 
          office2.bindClusteredQueue(new SimpleCondition("topic1"), queue2);
          
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office2, 2, "queue3", channelIDManager.getID(), ms, pm, true,
-                                    recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    recoverable, -1, null, tr);
 
          office2.bindClusteredQueue(new SimpleCondition("topic1"), queue3);
          
@@ -763,6 +761,7 @@
          MessageReference ref2 = ms.reference(msg2);         
          routed = office1.route(ref2, new SimpleCondition("topic1"), null);      
          assertTrue(routed);
+         
          Message msg3 = CoreMessageFactory.createCoreMessage(3);      
          MessageReference ref3 = ms.reference(msg3);         
          routed = office1.route(ref3, new SimpleCondition("topic1"), null);      
@@ -835,60 +834,60 @@
           
       try
       {   
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
       
          //Two topics with a mixture of durable and non durable subscriptions
          
          LocalClusteredQueue[] queues = new LocalClusteredQueue[16];
          Binding[] bindings = new Binding[16];
          
-         queues[0] = new LocalClusteredQueue(office1, 1, "sub1", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[0] = new LocalClusteredQueue(office1, 1, "sub1", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[0] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[0]);
          
-         queues[1] = new LocalClusteredQueue(office1, 1, "sub2", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[1] = new LocalClusteredQueue(office1, 1, "sub2", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[1] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[1]);
          
-         queues[2] = new LocalClusteredQueue(office2, 2, "sub3", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[2] = new LocalClusteredQueue(office2, 2, "sub3", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[2] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[2]);
          
-         queues[3] = new LocalClusteredQueue(office2, 2, "sub4", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[3] = new LocalClusteredQueue(office2, 2, "sub4", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[3] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[3]);
          
-         queues[4] = new LocalClusteredQueue(office2, 2, "sub5", channelIDManager.getID(), ms, pm, true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[4] = new LocalClusteredQueue(office2, 2, "sub5", channelIDManager.getID(), ms, pm, true, true, -1, null, tr);
          bindings[4] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[4]);
          
-         queues[5] = new LocalClusteredQueue(office1, 1, "sub6", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[5] = new LocalClusteredQueue(office1, 1, "sub6", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[5] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[5]);
          
-         queues[6] = new LocalClusteredQueue(office1, 1, "sub7", channelIDManager.getID(), ms, pm, true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[6] = new LocalClusteredQueue(office1, 1, "sub7", channelIDManager.getID(), ms, pm, true, true, -1, null, tr);
          bindings[6] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[6]);
          
-         queues[7] = new LocalClusteredQueue(office1, 1, "sub8", channelIDManager.getID(), ms, pm, true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[7] = new LocalClusteredQueue(office1, 1, "sub8", channelIDManager.getID(), ms, pm, true, true, -1, null, tr);
          bindings[7] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[7]);
          
-         queues[8] = new LocalClusteredQueue(office1, 1, "sub9", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[8] = new LocalClusteredQueue(office1, 1, "sub9", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[8] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[8]);
          
-         queues[9] = new LocalClusteredQueue(office1, 1, "sub10", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[9] = new LocalClusteredQueue(office1, 1, "sub10", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[9] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[9]);
          
-         queues[10] = new LocalClusteredQueue(office2, 2, "sub11", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[10] = new LocalClusteredQueue(office2, 2, "sub11", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[10] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[10]);
          
-         queues[11] = new LocalClusteredQueue(office2, 2, "sub12", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[11] = new LocalClusteredQueue(office2, 2, "sub12", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[11] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[11]);
          
-         queues[12] = new LocalClusteredQueue(office2, 2, "sub13", channelIDManager.getID(), ms, pm, true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[12] = new LocalClusteredQueue(office2, 2, "sub13", channelIDManager.getID(), ms, pm, true, true, -1, null, tr);
          bindings[12] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[12]);
          
-         queues[13] = new LocalClusteredQueue(office1, 1, "sub14", channelIDManager.getID(), ms, pm, true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[13] = new LocalClusteredQueue(office1, 1, "sub14", channelIDManager.getID(), ms, pm, true, false, -1, null, tr);
          bindings[13] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[13]);
          
-         queues[14] = new LocalClusteredQueue(office1, 1, "sub15", channelIDManager.getID(), ms, pm, true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[14] = new LocalClusteredQueue(office1, 1, "sub15", channelIDManager.getID(), ms, pm, true, true, -1, null, tr);
          bindings[14] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[14]);
          
-         queues[15] = new LocalClusteredQueue(office1, 1, "sub16", channelIDManager.getID(), ms, pm, true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+         queues[15] = new LocalClusteredQueue(office1, 1, "sub16", channelIDManager.getID(), ms, pm, true, true, -1, null, tr);
          bindings[15] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[15]);
        
          SimpleReceiver[] receivers = new SimpleReceiver[16];
@@ -1024,19 +1023,19 @@
         
       try
       {   
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
-         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
-         office4 = createClusteredPostOffice(4, "testgroup", sc, ms, pm, tr, pool);
-         office5 = createClusteredPostOffice(5, "testgroup", sc, ms, pm, tr, pool);
-         office6 = createClusteredPostOffice(6, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
+         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
+         office4 = createClusteredPostOffice(4, "testgroup", sc, ms, pm, tr);
+         office5 = createClusteredPostOffice(5, "testgroup", sc, ms, pm, tr);
+         office6 = createClusteredPostOffice(6, "testgroup", sc, ms, pm, tr);
     
          // We deploy the queue on nodes 1, 2, 3, 4 and 5
          // We don't deploy on node 6
          
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm, true,
-                                    recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    recoverable, -1, null, tr);
 
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue1);
 
@@ -1045,7 +1044,7 @@
          
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm, true,
-                                    recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    recoverable, -1, null, tr);
 
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
@@ -1054,7 +1053,7 @@
          
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office3, 3, "queue1", channelIDManager.getID(), ms, pm, true,
-                                    recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    recoverable, -1, null, tr);
 
          office3.bindClusteredQueue(new SimpleCondition("queue1"), queue3);
 
@@ -1063,7 +1062,7 @@
          
          LocalClusteredQueue queue4 =
             new LocalClusteredQueue(office4, 4, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
 
          office4.bindClusteredQueue(new SimpleCondition("queue1"), queue4);
 
@@ -1072,7 +1071,7 @@
          
          LocalClusteredQueue queue5 =
             new LocalClusteredQueue(office5, 5, "queue1", channelIDManager.getID(), ms, pm, true,
-                                    recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    recoverable, -1, null, tr);
 
          office5.bindClusteredQueue(new SimpleCondition("queue1"), queue5);
          SimpleReceiver receiver5 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1201,13 +1200,13 @@
                     
       try
       {   
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
-         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
+         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
 
          LocalClusteredQueue sub1 =
             new LocalClusteredQueue(office1, 1, "sub1", channelIDManager.getID(), ms, pm, true,
-                                    recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    recoverable, -1, null, tr);
 
          office1.bindQueue(new SimpleCondition("topic"), sub1);
 
@@ -1216,7 +1215,7 @@
          
          LocalClusteredQueue sub2 =
             new LocalClusteredQueue(office2, 2, "sub2", channelIDManager.getID(), ms, pm, true,
-                                    recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    recoverable, -1, null, tr);
 
          office2.bindQueue(new SimpleCondition("topic"), sub2);
          SimpleReceiver receiver2 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1224,7 +1223,7 @@
          
          LocalClusteredQueue sub3 =
             new LocalClusteredQueue(office3, 3, "sub3", channelIDManager.getID(), ms, pm, true,
-                                    recoverable, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    recoverable, -1, null, tr);
 
          office3.bindQueue(new SimpleCondition("topic"), sub3);
          SimpleReceiver receiver3 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1313,13 +1312,13 @@
         
       try
       {   
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
-         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
-         office4 = createClusteredPostOffice(4, "testgroup", sc, ms, pm, tr, pool);
-         office5 = createClusteredPostOffice(5, "testgroup", sc, ms, pm, tr, pool);
-         office6 = createClusteredPostOffice(6, "testgroup", sc, ms, pm, tr, pool);
-         office7 = createClusteredPostOffice(7, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
+         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
+         office4 = createClusteredPostOffice(4, "testgroup", sc, ms, pm, tr);
+         office5 = createClusteredPostOffice(5, "testgroup", sc, ms, pm, tr);
+         office6 = createClusteredPostOffice(6, "testgroup", sc, ms, pm, tr);
+         office7 = createClusteredPostOffice(7, "testgroup", sc, ms, pm, tr);
          
          //Node 2
          //======
@@ -1327,7 +1326,7 @@
          // Non durable 1 on node 2
          LocalClusteredQueue nonDurable1 =
             new LocalClusteredQueue(office2, 2, "nondurable1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          office2.bindClusteredQueue(new SimpleCondition("topic"), nonDurable1);
          SimpleReceiver receiver1 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1336,7 +1335,7 @@
          // Non durable 2 on node 2
          LocalClusteredQueue nonDurable2 =
             new LocalClusteredQueue(office2, 2, "nondurable2", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          office2.bindClusteredQueue(new SimpleCondition("topic"), nonDurable2);
          SimpleReceiver receiver2 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1348,7 +1347,7 @@
          // Non shared durable
          LocalClusteredQueue nonSharedDurable1 =
             new LocalClusteredQueue(office3, 3, "nonshareddurable1", channelIDManager.getID(), ms,
-                                    pm, true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    pm, true, true, -1, null, tr);
 
          office3.bindClusteredQueue(new SimpleCondition("topic"), nonSharedDurable1);
          SimpleReceiver receiver3 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1357,7 +1356,7 @@
          // Non durable
          LocalClusteredQueue nonDurable3 =
             new LocalClusteredQueue(office3, 3, "nondurable3", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          office3.bindClusteredQueue(new SimpleCondition("topic"), nonDurable3);
          SimpleReceiver receiver4 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1369,7 +1368,7 @@
          // Shared durable
          LocalClusteredQueue sharedDurable1 =
             new LocalClusteredQueue(office4, 4, "shareddurable1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
 
          office4.bindClusteredQueue(new SimpleCondition("topic"), sharedDurable1);
          SimpleReceiver receiver5 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1378,7 +1377,7 @@
          // Non shared durable
          LocalClusteredQueue nonSharedDurable2 =
             new LocalClusteredQueue(office4, 4, "nonshareddurable2", channelIDManager.getID(), ms,
-                                    pm, true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    pm, true, true, -1, null, tr);
 
          office4.bindClusteredQueue(new SimpleCondition("topic"), nonSharedDurable2);
          SimpleReceiver receiver6 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1387,7 +1386,7 @@
          // Non durable
          LocalClusteredQueue nonDurable4 =
             new LocalClusteredQueue(office4, 4, "nondurable4", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
 
          office4.bindClusteredQueue(new SimpleCondition("topic"), nonDurable4);
          SimpleReceiver receiver7 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1396,7 +1395,7 @@
          // Non durable
          LocalClusteredQueue nonDurable5 =
             new LocalClusteredQueue(office4, 4, "nondurable5", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office4.bindClusteredQueue(new SimpleCondition("topic"), nonDurable5);
          SimpleReceiver receiver8 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          nonDurable5.add(receiver8);
@@ -1404,7 +1403,7 @@
          // Non durable
          LocalClusteredQueue nonDurable6 =
             new LocalClusteredQueue(office4, 4, "nondurable6", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office4.bindClusteredQueue(new SimpleCondition("topic"), nonDurable6);
          SimpleReceiver receiver9 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          nonDurable6.add(receiver9);
@@ -1414,7 +1413,7 @@
          // Shared durable
          LocalClusteredQueue sharedDurable2 =
             new LocalClusteredQueue(office5, 5, "shareddurable1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
 
          office5.bindClusteredQueue(new SimpleCondition("topic"), sharedDurable2);
          SimpleReceiver receiver10 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1423,7 +1422,7 @@
          // Shared durable
          LocalClusteredQueue sharedDurable3 =
             new LocalClusteredQueue(office5, 5, "shareddurable2", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
 
          office5.bindClusteredQueue(new SimpleCondition("topic"), sharedDurable3);
          SimpleReceiver receiver11 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1433,7 +1432,7 @@
          //=========
          LocalClusteredQueue sharedDurable4 =
             new LocalClusteredQueue(office6, 6, "shareddurable2", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
 
          office6.bindClusteredQueue(new SimpleCondition("topic"), sharedDurable4);
          SimpleReceiver receiver12 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1441,7 +1440,7 @@
          
          LocalClusteredQueue nonDurable7 =
             new LocalClusteredQueue(office6, 6, "nondurable7", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office6.bindClusteredQueue(new SimpleCondition("topic"), nonDurable7);
          SimpleReceiver receiver13 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          nonDurable7.add(receiver13);
@@ -1450,7 +1449,7 @@
          //=======
          LocalClusteredQueue sharedDurable5 =
             new LocalClusteredQueue(office7, 7, "shareddurable2", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
 
          office7.bindClusteredQueue(new SimpleCondition("topic"), sharedDurable5);
          SimpleReceiver receiver14 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -1777,90 +1776,90 @@
       {   
          //Start two offices
          
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
      
          LocalClusteredQueue[] queues = new LocalClusteredQueue[16];
          Binding[] bindings = new Binding[16];
          
          queues[0] =
             new LocalClusteredQueue(office1, 1, "sub1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[0] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[0]);
          
          queues[1] =
             new LocalClusteredQueue(office1, 1, "sub2", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[1] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[1]);
          
          queues[2] =
             new LocalClusteredQueue(office2, 2, "sub3", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[2] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[2]);
          
          queues[3] =
             new LocalClusteredQueue(office2, 2, "sub4", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[3] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[3]);
          
          queues[4] =
             new LocalClusteredQueue(office2, 2, "sub5", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          bindings[4] = office2.bindClusteredQueue(new SimpleCondition("topic1"), queues[4]);
          
          queues[5] =
             new LocalClusteredQueue(office1, 1, "sub6", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[5] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[5]);
          
          queues[6] =
             new LocalClusteredQueue(office1, 1, "sub7", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          bindings[6] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[6]);
          
          queues[7] =
             new LocalClusteredQueue(office1, 1, "sub8", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          bindings[7] = office1.bindClusteredQueue(new SimpleCondition("topic1"), queues[7]);
          
          queues[8] =
             new LocalClusteredQueue(office1, 1, "sub9", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[8] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[8]);
          
          queues[9] =
             new LocalClusteredQueue(office1, 1, "sub10", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[9] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[9]);
          
          queues[10] =
             new LocalClusteredQueue(office2, 2, "sub11", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[10] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[10]);
          
          queues[11] =
             new LocalClusteredQueue(office2, 2, "sub12", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[11] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[11]);
          
          queues[12] =
             new LocalClusteredQueue(office2, 2, "sub13", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          bindings[12] = office2.bindClusteredQueue(new SimpleCondition("topic2"), queues[12]);
          
          queues[13] =
             new LocalClusteredQueue(office1, 1, "sub14", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          bindings[13] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[13]);
          
          queues[14] =
             new LocalClusteredQueue(office1, 1, "sub15", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          bindings[14] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[14]);
          
          queues[15] =
             new LocalClusteredQueue(office1, 1, "sub16", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          bindings[15] = office1.bindClusteredQueue(new SimpleCondition("topic2"), queues[15]);
 
          SimpleReceiver[] receivers = new SimpleReceiver[16];

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeWithDefaultRouterTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeWithDefaultRouterTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOfficeWithDefaultRouterTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -29,8 +29,6 @@
 import org.jboss.test.messaging.core.SimpleReceiver;
 import org.jboss.test.messaging.core.plugin.base.PostOfficeTestBase;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * 
  * A DefaultClusteredPostOfficeWithDefaultRouterTest
@@ -49,7 +47,7 @@
    // Static ---------------------------------------------------------------------------------------
    
    // Attributes -----------------------------------------------------------------------------------
-   
+    
    // Constructors ---------------------------------------------------------------------------------
 
    public DefaultClusteredPostOfficeWithDefaultRouterTest(String name)
@@ -105,49 +103,49 @@
           
       try
       {   
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
          
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
          
-         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
+         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
          
-         office4 = createClusteredPostOffice(4, "testgroup", sc, ms, pm, tr, pool);
+         office4 = createClusteredPostOffice(4, "testgroup", sc, ms, pm, tr);
          
-         office5 = createClusteredPostOffice(5, "testgroup", sc, ms, pm, tr, pool);
+         office5 = createClusteredPostOffice(5, "testgroup", sc, ms, pm, tr);
          
-         office6 = createClusteredPostOffice(6, "testgroup", sc, ms, pm, tr, pool);
+         office6 = createClusteredPostOffice(6, "testgroup", sc, ms, pm, tr);
          
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("topic"), queue1);
          SimpleReceiver receiver1 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue1.add(receiver1);
          
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office3, 3, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office3.bindClusteredQueue(new SimpleCondition("topic"), queue2);
          SimpleReceiver receiver2 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue2.add(receiver2);
          
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office4, 4, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office4.bindClusteredQueue(new SimpleCondition("topic"), queue3);
          SimpleReceiver receiver3 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue3.add(receiver3);
          
          LocalClusteredQueue queue4 =
             new LocalClusteredQueue(office5, 5, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office5.bindClusteredQueue(new SimpleCondition("topic"), queue4);
          SimpleReceiver receiver4 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue4.add(receiver4);
          
          LocalClusteredQueue queue5 =
             new LocalClusteredQueue(office6, 6, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office6.bindClusteredQueue(new SimpleCondition("topic"), queue5);
          SimpleReceiver receiver5 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue5.add(receiver5);
@@ -251,44 +249,44 @@
           
       try
       {   
-         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
-         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
-         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
-         office4 = createClusteredPostOffice(4, "testgroup", sc, ms, pm, tr, pool);
-         office5 = createClusteredPostOffice(5, "testgroup", sc, ms, pm, tr, pool);
-         office6 = createClusteredPostOffice(6, "testgroup", sc, ms, pm, tr, pool);
+         office1 = createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
+         office2 = createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
+         office3 = createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
+         office4 = createClusteredPostOffice(4, "testgroup", sc, ms, pm, tr);
+         office5 = createClusteredPostOffice(5, "testgroup", sc, ms, pm, tr);
+         office6 = createClusteredPostOffice(6, "testgroup", sc, ms, pm, tr);
          
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("topic"), queue1);
          SimpleReceiver receiver1 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue1.add(receiver1);
          
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office3, 3, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office3.bindClusteredQueue(new SimpleCondition("topic"), queue2);
          SimpleReceiver receiver2 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue2.add(receiver2);
          
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office4, 4, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office4.bindClusteredQueue(new SimpleCondition("topic"), queue3);
          SimpleReceiver receiver3 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue3.add(receiver3);
          
          LocalClusteredQueue queue4 =
             new LocalClusteredQueue(office5, 5, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office5.bindClusteredQueue(new SimpleCondition("topic"), queue4);
          SimpleReceiver receiver4 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue4.add(receiver4);
          
          LocalClusteredQueue queue5 =
             new LocalClusteredQueue(office6, 6, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, false, (QueuedExecutor)pool.get(), -1, null, tr);
+                                    true, false, -1, null, tr);
          office6.bindClusteredQueue(new SimpleCondition("topic"), queue5);
          SimpleReceiver receiver5 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
          queue5.add(receiver5);

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultMessagePullPolicyTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultMessagePullPolicyTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultMessagePullPolicyTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -274,7 +274,7 @@
          
       }
 
-      public void deliver(boolean synchronous)
+      public void deliver()
       {
          // TODO Auto-generated method stub
          

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultRouterTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultRouterTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/DefaultRouterTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -436,7 +436,7 @@
          
       }
 
-      public void deliver(boolean synchronous)
+      public void deliver()
       {
          // TODO Auto-generated method stub
          
@@ -604,6 +604,7 @@
          // TODO Auto-generated method stub
          return 0;
       }
+
       
    }
    

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RecoveryTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RecoveryTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RecoveryTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -34,8 +34,6 @@
 import org.jboss.test.messaging.core.plugin.base.PostOfficeTestBase;
 import org.jboss.test.messaging.util.CoreMessageFactory;
 
-import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
-
 /**
  * A RecoveryTest
  *
@@ -80,25 +78,25 @@
       try
       {
          office1 = (DefaultClusteredPostOffice)
-            createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
+            createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
          office2 = (DefaultClusteredPostOffice)
-            createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+            createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
          office3 = (DefaultClusteredPostOffice)
-            createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
+            createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
 
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office1.bindClusteredQueue(new SimpleCondition("topic1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue2", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
             office2.bindClusteredQueue(new SimpleCondition("topic1"), queue2);
 
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office3, 3, "queue3", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
             office3.bindClusteredQueue(new SimpleCondition("topic1"), queue3);
 
          SimpleReceiver receiver1 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);
@@ -216,27 +214,27 @@
       try
       {
          office1 = (DefaultClusteredPostOffice)
-            createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr, pool);
+            createClusteredPostOffice(1, "testgroup", sc, ms, pm, tr);
 
          office2 = (DefaultClusteredPostOffice)
-            createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr, pool);
+            createClusteredPostOffice(2, "testgroup", sc, ms, pm, tr);
 
          office3 = (DefaultClusteredPostOffice)
-            createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr, pool);
+            createClusteredPostOffice(3, "testgroup", sc, ms, pm, tr);
 
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office1.bindClusteredQueue(new SimpleCondition("topic1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue2", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("topic1"), queue2);
 
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office3, 3, "queue3", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office3.bindClusteredQueue(new SimpleCondition("topic1"), queue3);
 
          SimpleReceiver receiver1 = new SimpleReceiver("blah", SimpleReceiver.ACCEPTING);

Modified: trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RedistributionWithDefaultMessagePullPolicyTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RedistributionWithDefaultMessagePullPolicyTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/core/plugin/postoffice/cluster/RedistributionWithDefaultMessagePullPolicyTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -33,8 +33,8 @@
 import org.jboss.messaging.core.message.Message;
 import org.jboss.messaging.core.message.MessageReference;
 import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultClusteredPostOffice;
+import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultMessagePullPolicy;
 import org.jboss.messaging.core.plugin.postoffice.cluster.LocalClusteredQueue;
-import org.jboss.messaging.core.plugin.postoffice.cluster.DefaultMessagePullPolicy;
 import org.jboss.messaging.core.tx.Transaction;
 import org.jboss.test.messaging.core.SimpleCondition;
 import org.jboss.test.messaging.core.SimpleReceiver;
@@ -129,21 +129,21 @@
       {
          office1 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(1, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office2 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(2, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
 
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
          Message msg = CoreMessageFactory.createCoreMessage(1, true, null);
@@ -170,7 +170,7 @@
          queue2.add(receiver2);
 
          //Prompt delivery so the channels know if the receivers are ready
-         queue1.deliver(false);
+         queue1.deliver();
          Thread.sleep(2000);
 
          //Pull from 1 to 2
@@ -178,7 +178,7 @@
          receiver2.setMaxRefs(1);
 
          log.trace("delivering");
-         queue2.deliver(false);
+         queue2.deliver();
 
          Thread.sleep(3000);
 
@@ -228,20 +228,20 @@
       {
          office1 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(1, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office2 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(2, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
          Message msg = CoreMessageFactory.createCoreMessage(1, true, null);
@@ -268,7 +268,7 @@
          queue2.add(receiver2);
 
          //Prompt delivery so the channels know if the receivers are ready
-         queue1.deliver(false);
+         queue1.deliver();
          Thread.sleep(2000);
 
          //Pull from 1 to 2
@@ -279,7 +279,7 @@
          office2.setFail(true, false, false);
 
          log.trace("delivering");
-         queue2.deliver(false);
+         queue2.deliver();
 
          Thread.sleep(3000);
 
@@ -332,20 +332,20 @@
       {
          office1 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(1, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office2 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(2, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
          Message msg = CoreMessageFactory.createCoreMessage(1, true, null);
@@ -372,7 +372,7 @@
          queue2.add(receiver2);
 
          //Prompt delivery so the channels know if the receivers are ready
-         queue1.deliver(false);
+         queue1.deliver();
          Thread.sleep(2000);
 
          //Pull from 1 to 2
@@ -383,7 +383,7 @@
          office2.setFail(false, true, false);
 
          log.trace("delivering");
-         queue2.deliver(false);
+         queue2.deliver();
 
          Thread.sleep(3000);
 
@@ -432,20 +432,20 @@
       {
          office1 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(1, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office2 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(2, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, true, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, true, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
          Message msg = CoreMessageFactory.createCoreMessage(1, true, null);
@@ -472,7 +472,7 @@
          queue2.add(receiver2);
 
          //Prompt delivery so the channels know if the receivers are ready
-         queue1.deliver(false);
+         queue1.deliver();
          Thread.sleep(2000);
 
          //Pull from 1 to 2
@@ -482,7 +482,7 @@
          office2.setFail(false, false, true);
 
          log.trace("delivering");
-         queue2.deliver(false);
+         queue2.deliver();
 
          Thread.sleep(3000);
 
@@ -528,49 +528,49 @@
          
          office1 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(1, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office2 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(2, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office3 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(3, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office4 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(4, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office5 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(5, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
          
          log.trace("Created postoffices");
 
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office3, 3, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office3.bindClusteredQueue(new SimpleCondition("queue1"), queue3);
 
          LocalClusteredQueue queue4 =
             new LocalClusteredQueue(office4, 4, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office4.bindClusteredQueue(new SimpleCondition("queue1"), queue4);
 
          LocalClusteredQueue queue5 =
             new LocalClusteredQueue(office5, 5, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office5.bindClusteredQueue(new SimpleCondition("queue1"), queue5);
          
          log.trace("Created and bound queues");
@@ -625,7 +625,7 @@
          
          log.trace("Added receiver");
 
-         queue1.deliver(false);
+         queue1.deliver();
          
          log.trace("Called deliver");
 
@@ -736,47 +736,47 @@
       {
          office1 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(1, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office2 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(2, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office3 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(3, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office4 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(4, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          office5 = (DefaultClusteredPostOffice)
             createClusteredPostOffice(5, "testgroup", 10000, 10000, new DefaultMessagePullPolicy(),
-                                      sc, ms, pm, tr, pool);
+                                      sc, ms, pm, tr);
 
          LocalClusteredQueue queue1 =
             new LocalClusteredQueue(office1, 1, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office1.bindClusteredQueue(new SimpleCondition("queue1"), queue1);
 
          LocalClusteredQueue queue2 =
             new LocalClusteredQueue(office2, 2, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office2.bindClusteredQueue(new SimpleCondition("queue1"), queue2);
 
          LocalClusteredQueue queue3 =
             new LocalClusteredQueue(office3, 3, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office3.bindClusteredQueue(new SimpleCondition("queue1"), queue3);
 
          LocalClusteredQueue queue4 =
             new LocalClusteredQueue(office4, 4, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office4.bindClusteredQueue(new SimpleCondition("queue1"), queue4);
 
          LocalClusteredQueue queue5 =
             new LocalClusteredQueue(office5, 5, "queue1", channelIDManager.getID(), ms, pm,
-                                    true, recoverable, (QueuedExecutor) pool.get(), -1, null, tr);
+                                    true, recoverable, -1, null, tr);
          office5.bindClusteredQueue(new SimpleCondition("queue1"), queue5);
 
          final int NUM_MESSAGES = 100;
@@ -831,7 +831,7 @@
          queue5.add(receiver5);
 
          receiver1.setMaxRefs(5);
-         queue1.deliver(false);         
+         queue1.deliver();         
          receiver1.waitForHandleInvocations(5, 20000);
          Thread.sleep(1000);
          assertEquals(NUM_MESSAGES - 5, queue1.memoryRefCount());
@@ -842,7 +842,7 @@
          receiver1.setMaxRefs(0);
 
          receiver2.setMaxRefs(10);
-         queue2.deliver(false);         
+         queue2.deliver();         
          receiver2.waitForHandleInvocations(10, 20000);
          Thread.sleep(1000);
          assertEquals(NUM_MESSAGES - 10, queue2.memoryRefCount());
@@ -851,7 +851,7 @@
          receiver2.setMaxRefs(0);
 
          receiver3.setMaxRefs(15);
-         queue3.deliver(false);         
+         queue3.deliver();         
          receiver3.waitForHandleInvocations(15, 20000);
          Thread.sleep(1000);
          assertEquals(NUM_MESSAGES - 15, queue3.memoryRefCount());
@@ -860,7 +860,7 @@
          receiver3.setMaxRefs(0);
 
          receiver4.setMaxRefs(20);
-         queue4.deliver(false);         
+         queue4.deliver();         
          receiver4.waitForHandleInvocations(20, 20000);
          Thread.sleep(1000);
          assertEquals(NUM_MESSAGES - 20, queue4.memoryRefCount());
@@ -869,7 +869,7 @@
          receiver4.setMaxRefs(0);
 
          receiver5.setMaxRefs(25);
-         queue5.deliver(false);         
+         queue5.deliver();         
          receiver5.waitForHandleInvocations(25, 20000);
          Thread.sleep(1000);
          assertEquals(NUM_MESSAGES - 25, queue5.memoryRefCount());
@@ -892,7 +892,7 @@
 
          //Consume the rest from queue 5
          receiver5.setMaxRefs(NUM_MESSAGES - 25);
-         queue5.deliver(false);
+         queue5.deliver();
          receiver5.waitForHandleInvocations(NUM_MESSAGES - 25, 20000);
          
          Thread.sleep(2000);
@@ -942,7 +942,7 @@
          log.trace("Consume 5 more from queue 5");
 
          receiver5.setMaxRefs(5);
-         queue5.deliver(false);
+         queue5.deliver();
          receiver5.waitForHandleInvocations(5, 20000);
          
          Thread.sleep(4000);
@@ -985,7 +985,7 @@
          //Consume 1 more - should pull one from queue2
 
          receiver5.setMaxRefs(1);
-         queue5.deliver(false);
+         queue5.deliver();
          receiver5.waitForHandleInvocations(1, 20000);
          
          Thread.sleep(2000);
@@ -1028,7 +1028,7 @@
 
          int num = NUM_MESSAGES - 15 + NUM_MESSAGES - 20 + NUM_MESSAGES - 11 + NUM_MESSAGES - 11 + 1;
          receiver4.setMaxRefs(num);
-         queue4.deliver(false);
+         queue4.deliver();
          receiver4.waitForHandleInvocations(num, 20000);
          
          Thread.sleep(2000);
@@ -1207,7 +1207,7 @@
 
          full = false;
 
-         queue.deliver(false);
+         queue.deliver();
       }
 
    }

Modified: trunk/tests/src/org/jboss/test/messaging/jms/AcknowledgementTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/AcknowledgementTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/jms/AcknowledgementTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -21,8 +21,8 @@
   */
 package org.jboss.test.messaging.jms;
 
-import EDU.oswego.cs.dl.util.concurrent.Latch;
 import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
 import javax.jms.DeliveryMode;
 import javax.jms.Destination;
 import javax.jms.Message;
@@ -38,10 +38,15 @@
 import javax.jms.TopicSubscriber;
 import javax.management.ObjectName;
 import javax.naming.InitialContext;
+
 import org.jboss.jms.client.JBossConnectionFactory;
+import org.jboss.jms.client.JBossSession;
+import org.jboss.jms.client.delegate.ClientSessionDelegate;
 import org.jboss.test.messaging.MessagingTestCase;
 import org.jboss.test.messaging.tools.ServerManagement;
 
+import EDU.oswego.cs.dl.util.concurrent.Latch;
+
 /**
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  *
@@ -698,8 +703,103 @@
 		conn.close();
 
    }
+   
+   public void testDupsOKBatchDefault() throws Exception
+   {
+      //test default
+      Connection conn = cf.createConnection();
+      
+      JBossSession sess = (JBossSession)conn.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+      
+      ClientSessionDelegate del = (ClientSessionDelegate)sess.getDelegate();
+      
+      assertEquals(1000, del.getDupsOKBatchSize());
+      
+      conn.close();
+   }
+      
+   public void testDupsOKAcknowledge() throws Exception
+   { 
+      
+      final int BATCH_SIZE = 10;
+      
+      String mbeanConfig =
+         "<mbean code=\"org.jboss.jms.server.connectionfactory.ConnectionFactory\"\n" +
+         "       name=\"jboss.messaging.destination:service=MyConnectionFactory\"\n" +
+         "       xmbean-dd=\"xmdesc/ConnectionFactory-xmbean.xml\">\n" +
+         "       <depends optional-attribute-name=\"ServerPeer\">jboss.messaging:service=ServerPeer</depends>\n" +
+         "       <depends optional-attribute-name=\"Connector\">jboss.messaging:service=Connector,transport=bisocket</depends>\n" +
+         "       <attribute name=\"JNDIBindings\">\n" +
+         "          <bindings>\n" +
+         "            <binding>/mycf</binding>\n" +
+         "          </bindings>\n" +
+         "       </attribute>\n" +
+         "       <attribute name=\"DupsOKBatchSize\">" + BATCH_SIZE  + "</attribute>" +
+         " </mbean>";
 
+      ObjectName on = ServerManagement.deploy(mbeanConfig);
+      ServerManagement.invoke(on, "create", new Object[0], new String[0]);
+      ServerManagement.invoke(on, "start", new Object[0], new String[0]);
+      
+      ConnectionFactory myCF = (ConnectionFactory)initialContext.lookup("/mycf");
+      
+      Connection conn = myCF.createConnection();
 
+      Session producerSess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+      MessageProducer producer = producerSess.createProducer(queue);
+
+      Session consumerSess = conn.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+      MessageConsumer consumer = consumerSess.createConsumer(queue);
+      conn.start();
+
+      //Send some messages
+      for (int i = 0; i < 19; i++)
+      {
+         Message m = producerSess.createMessage();
+         producer.send(m);
+      }
+      
+      assertRemainingMessages(19);
+
+      log.trace("Sent messages");
+
+      Message m = null;
+      for (int i = 0; i < 10; i++)
+      {
+         m = consumer.receive(200);
+         
+         assertNotNull(m);
+          
+         if (i == 9)
+         {
+            assertRemainingMessages(9);
+         }
+         else
+         {
+            assertRemainingMessages(19);
+         }
+      }
+      
+      for (int i = 0; i < 9; i++)
+      {
+         m = consumer.receive(200);
+         
+         assertNotNull(m);
+         
+         assertRemainingMessages(9);
+      }
+      
+      //Make sure the last are acked on close
+      
+      consumerSess.close();
+      
+      assertRemainingMessages(0);
+      
+      conn.close();
+
+   }
+
+
 	/*
 	 * Send some messages, consume them and verify the messages are not sent upon recovery
 	 *
@@ -739,9 +839,9 @@
 			count++;
 		}
       
-      assertRemainingMessages(0);
+		assertNotNull(m);
       
-		assertNotNull(m);
+      assertRemainingMessages(NUM_MESSAGES);
 
 		log.trace("Received " + count +  " messages");
 
@@ -809,6 +909,56 @@
       assertFalse(listener.failed);
    }
    
+   public void testMessageListenerDupsOK() throws Exception
+   {
+      Connection conn = cf.createConnection();
+      Session sessSend = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+      MessageProducer prod = sessSend.createProducer(queue);
+      prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+      
+      log.trace("Sending messages");
+      
+      TextMessage tm1 = sessSend.createTextMessage("a");
+      TextMessage tm2 = sessSend.createTextMessage("b");
+      TextMessage tm3 = sessSend.createTextMessage("c");
+      prod.send(tm1);
+      prod.send(tm2);
+      prod.send(tm3);
+      
+      log.trace("Sent messages");
+      
+      sessSend.close();
+      
+      assertRemainingMessages(3);
+   
+      conn.start();
+
+      Session sessReceive = conn.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+      
+      log.trace("Creating consumer");
+      
+      MessageConsumer cons = sessReceive.createConsumer(queue);
+      
+      log.trace("Created consumer");
+      
+      MessageListenerDupsOK listener = new MessageListenerDupsOK(sessReceive);
+      
+      log.trace("Setting message listener");
+      
+      cons.setMessageListener(listener);
+      
+      log.trace("Set message listener");
+
+      listener.waitForMessages();
+      
+      assertRemainingMessages(3);
+      
+      conn.close();
+      
+      assertRemainingMessages(0);
+      assertFalse(listener.failed);
+   }
+   
    public void testMessageListenerClientAck() throws Exception
    {
       Connection conn = cf.createConnection();
@@ -968,7 +1118,94 @@
             
    }
    
+   private class MessageListenerDupsOK implements MessageListener
+   {
+      
+      private Latch latch = new Latch();
+      
+      private Session sess;
+      
+      private int count = 0;
+      
+      boolean failed;
+      
+      MessageListenerDupsOK(Session sess)
+      {
+         this.sess = sess;
+      }
+      
+      public void waitForMessages() throws InterruptedException
+      {
+         latch.acquire();
+         Thread.sleep(500);
+      }
+
+      public void onMessage(Message m)
+      {
+         try
+         {
+            count++;
+                  
+            TextMessage tm = (TextMessage)m;
+            
+            log.info("Got message: " + tm.getText());            
+                      
+            // Receive first three messages then recover() session
+            // Only last message should be redelivered
+            if (count == 1)
+            {
+               assertRemainingMessages(3);
+               
+               if (!"a".equals(tm.getText()))
+               {
+                  failed = true;
+                  latch.release();
+               }
+            }
+            if (count == 2)
+            {
+               assertRemainingMessages(3);
+               
+               if (!"b".equals(tm.getText()))
+               {
+                  failed = true;
+                  latch.release();
+               }
+            }
+            if (count == 3)
+            {
+               assertRemainingMessages(3);
+               
+               if (!"c".equals(tm.getText()))
+               {
+                  failed = true;
+                  latch.release();
+               }
+               sess.recover();
+            }
+            if (count == 4)
+            {
+               assertRemainingMessages(3);
+               
+               if (!"c".equals(tm.getText()))
+               {
+                  failed = true;
+                  latch.release();
+               }               
+               latch.release();
+            }            
+               
+         }
+         catch (Exception e)
+         {
+            failed = true;
+            latch.release();
+         }
+      }
+            
+   }
    
+   
    private class MessageListenerClientAck implements MessageListener
    {
       

Modified: trunk/tests/src/org/jboss/test/messaging/jms/ConnectionFactoryTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/ConnectionFactoryTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/jms/ConnectionFactoryTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -98,7 +98,7 @@
          "           <arg type=\"java.lang.String\" value=\"sofiavergara\"/>\n" +
          "       </constructor>\n" +
          "       <depends optional-attribute-name=\"ServerPeer\">jboss.messaging:service=ServerPeer</depends>\n" +
-         "       <depends optional-attribute-name=\"Connector\">jboss.messaging:service=Connector,transport=socket</depends>\n" +
+         "       <depends optional-attribute-name=\"Connector\">jboss.messaging:service=Connector,transport=bisocket</depends>\n" +
          "       <attribute name=\"JNDIBindings\">\n" +
          "          <bindings>\n" +
          "            <binding>/TestConnectionFactory</binding>\n" +
@@ -136,7 +136,7 @@
          "           <arg type=\"java.lang.String\" value=\"sofiavergara\"/>\n" +
          "       </constructor>\n" +
          "       <depends optional-attribute-name=\"ServerPeer\">jboss.messaging:service=ServerPeer</depends>\n" +
-         "       <depends optional-attribute-name=\"Connector\">jboss.messaging:service=Connector,transport=socket</depends>\n" +
+         "       <depends optional-attribute-name=\"Connector\">jboss.messaging:service=Connector,transport=bisocket</depends>\n" +
          "       <attribute name=\"JNDIBindings\">\n" +
          "          <bindings>\n" +
          "            <binding>/TestConnectionFactory2</binding>\n" +
@@ -177,11 +177,11 @@
    public void testAdministrativelyConfiguredConnectors() throws Exception
    {
       //Deploy a few connectors
-      String name1 = "jboss.messaging:service=Connector1,transport=socket";
+      String name1 = "jboss.messaging:service=Connector1,transport=bisocket";
       
-      String name2 = "jboss.messaging:service=Connector2,transport=socket";
+      String name2 = "jboss.messaging:service=Connector2,transport=bisocket";
       
-      String name3 = "jboss.messaging:service=Connector3,transport=socket";
+      String name3 = "jboss.messaging:service=Connector3,transport=bisocket";
       
       ObjectName c1 = deployConnector(1234, name1);
       ObjectName c2 = deployConnector(1235, name2);

Modified: trunk/tests/src/org/jboss/test/messaging/jms/String64KLimitTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/String64KLimitTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/jms/String64KLimitTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -206,145 +206,162 @@
    
    public void test64KLimitWithTextMessage() throws Exception
    {            
-      Connection conn = cf.createConnection();
-
-      Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+      Connection conn = null;
       
-      MessageProducer prod = sess.createProducer(queue);
-      
-      MessageConsumer cons = sess.createConsumer(queue);
-      
-      conn.start();                  
-            
-      String s1 = genString(16 * 1024);   
-      
-      String s2 = genString(32 * 1024); 
-      
-      String s3 = genString(64 * 1024); 
-      
-      String s4 = genString(10 * 64 * 1024); 
-      
-      TextMessage tm1 = sess.createTextMessage(s1);
-      
-      TextMessage tm2 = sess.createTextMessage(s2);
-      
-      TextMessage tm3 = sess.createTextMessage(s3);
-      
-      TextMessage tm4 = sess.createTextMessage(s4);
-      
-      prod.send(tm1);
-      
-      prod.send(tm2);
-      
-      prod.send(tm3);
-      
-      prod.send(tm4);
-
-      TextMessage rm1 = (TextMessage)cons.receive(1000);
-      
-      assertNotNull(rm1);           
-      
-      TextMessage rm2 = (TextMessage)cons.receive(1000);
-      
-      assertNotNull(rm2);
-      
-      TextMessage rm3 = (TextMessage)cons.receive(1000);
-      
-      assertNotNull(rm3);
-      
-      TextMessage rm4 = (TextMessage)cons.receive(1000);
-      
-      assertNotNull(rm4);
-      
-      assertEquals(s1.length(), rm1.getText().length());
-      
-      assertEquals(s1, rm1.getText());
-      
-      assertEquals(s2.length(), rm2.getText().length());
-      
-      assertEquals(s2, rm2.getText());
-      
-      assertEquals(s3.length(), rm3.getText().length());
-      
-      assertEquals(s3, rm3.getText());
-      
-      assertEquals(s4.length(), rm4.getText().length());
-      
-      assertEquals(s4, rm4.getText());
-            
-      conn.close();
+      try
+      {         
+         conn = cf.createConnection();
+   
+         Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         
+         MessageProducer prod = sess.createProducer(queue);
+         
+         MessageConsumer cons = sess.createConsumer(queue);
+         
+         conn.start();                  
+               
+         String s1 = genString(16 * 1024);   
+         
+         String s2 = genString(32 * 1024); 
+         
+         String s3 = genString(64 * 1024); 
+         
+         String s4 = genString(10 * 64 * 1024); 
+         
+         TextMessage tm1 = sess.createTextMessage(s1);
+         
+         TextMessage tm2 = sess.createTextMessage(s2);
+         
+         TextMessage tm3 = sess.createTextMessage(s3);
+         
+         TextMessage tm4 = sess.createTextMessage(s4);
+         
+         prod.send(tm1);
+         
+         prod.send(tm2);
+         
+         prod.send(tm3);
+         
+         prod.send(tm4);
+   
+         TextMessage rm1 = (TextMessage)cons.receive(1000);
+         
+         assertNotNull(rm1);           
+         
+         TextMessage rm2 = (TextMessage)cons.receive(1000);
+         
+         assertNotNull(rm2);
+         
+         TextMessage rm3 = (TextMessage)cons.receive(1000);
+         
+         assertNotNull(rm3);
+         
+         TextMessage rm4 = (TextMessage)cons.receive(1000);
+         
+         assertNotNull(rm4);
+         
+         assertEquals(s1.length(), rm1.getText().length());
+         
+         assertEquals(s1, rm1.getText());
+         
+         assertEquals(s2.length(), rm2.getText().length());
+         
+         assertEquals(s2, rm2.getText());
+         
+         assertEquals(s3.length(), rm3.getText().length());
+         
+         assertEquals(s3, rm3.getText());
+         
+         assertEquals(s4.length(), rm4.getText().length());
+         
+         assertEquals(s4, rm4.getText());
+      }
+      finally
+      {            
+         if (conn != null)
+         {
+            conn.close();
+         }
+      }
    }
    
    
    
    public void test64KLimitWithObjectMessage() throws Exception
    {            
-      Connection conn = cf.createConnection();
-
-      Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+      Connection conn = null;
       
-      MessageProducer prod = sess.createProducer(queue);
-      
-      MessageConsumer cons = sess.createConsumer(queue);
-      
-      conn.start();
-            
-      String s1 = genString(16 * 1024);   
-      
-      String s2 = genString(32 * 1024); 
-      
-      String s3 = genString(64 * 1024); 
-      
-      String s4 = genString(10 * 64 * 1024);
-      
-      ObjectMessage om1 = sess.createObjectMessage();
-      
-      om1.setObject(s1);
-      
-      ObjectMessage om2 = sess.createObjectMessage();
-      
-      om2.setObject(s2);
-      
-      ObjectMessage om3 = sess.createObjectMessage();
-      
-      om3.setObject(s3);
-      
-      ObjectMessage om4 = sess.createObjectMessage();
-      
-      om4.setObject(s4);
-      
-      prod.send(om1);
-      
-      prod.send(om2);
-      
-      prod.send(om3);
-      
-      prod.send(om4);
-
-      ObjectMessage rm1 = (ObjectMessage)cons.receive(1000);
-      
-      assertNotNull(rm1);
-      
-      ObjectMessage rm2 = (ObjectMessage)cons.receive(1000);
-      
-      assertNotNull(rm2);
-      
-      ObjectMessage rm3 = (ObjectMessage)cons.receive(1000);
-      
-      assertNotNull(rm3);
-      
-      ObjectMessage rm4 = (ObjectMessage)cons.receive(1000);
-      
-      assertNotNull(rm4);
-      
-      assertEquals(s1, rm1.getObject());
-      
-      assertEquals(s2, rm2.getObject());
-      
-      assertEquals(s3, rm3.getObject());
-      
-      assertEquals(s4, rm4.getObject());
-            
-      conn.close();
+      try
+      {         
+         conn = cf.createConnection();
+   
+         Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         
+         MessageProducer prod = sess.createProducer(queue);
+         
+         MessageConsumer cons = sess.createConsumer(queue);
+         
+         conn.start();
+               
+         String s1 = genString(16 * 1024);   
+         
+         String s2 = genString(32 * 1024); 
+         
+         String s3 = genString(64 * 1024); 
+         
+         String s4 = genString(10 * 64 * 1024);
+         
+         ObjectMessage om1 = sess.createObjectMessage();
+         
+         om1.setObject(s1);
+         
+         ObjectMessage om2 = sess.createObjectMessage();
+         
+         om2.setObject(s2);
+         
+         ObjectMessage om3 = sess.createObjectMessage();
+         
+         om3.setObject(s3);
+         
+         ObjectMessage om4 = sess.createObjectMessage();
+         
+         om4.setObject(s4);
+         
+         prod.send(om1);
+         
+         prod.send(om2);
+         
+         prod.send(om3);
+         
+         prod.send(om4);
+   
+         ObjectMessage rm1 = (ObjectMessage)cons.receive(1000);
+         
+         assertNotNull(rm1);
+         
+         ObjectMessage rm2 = (ObjectMessage)cons.receive(1000);
+         
+         assertNotNull(rm2);
+         
+         ObjectMessage rm3 = (ObjectMessage)cons.receive(1000);
+         
+         assertNotNull(rm3);
+         
+         ObjectMessage rm4 = (ObjectMessage)cons.receive(1000);
+         
+         assertNotNull(rm4);
+         
+         assertEquals(s1, rm1.getObject());
+         
+         assertEquals(s2, rm2.getObject());
+         
+         assertEquals(s3, rm3.getObject());
+         
+         assertEquals(s4, rm4.getObject());
+      }
+      finally
+      {            
+         conn.close();
+      }
    }
 }

Modified: trunk/tests/src/org/jboss/test/messaging/jms/WireFormatTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/WireFormatTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/jms/WireFormatTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -755,7 +755,7 @@
       
       public void testConnectionCreateSessionDelegateResponse() throws Exception
       { 
-         ClientSessionDelegate del = new ClientSessionDelegate(786);
+         ClientSessionDelegate del = new ClientSessionDelegate(786, 1000);
          
          ResponseSupport resp =
             new ConnectionCreateSessionDelegateResponse(del);

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/DistributedQueueTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/DistributedQueueTest.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/DistributedQueueTest.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -6,22 +6,22 @@
  */
 package org.jboss.test.messaging.jms.clustering;
 
-import org.jboss.test.messaging.MessagingTestCase;
-import org.jboss.test.messaging.tools.ServerManagement;
-import org.jboss.test.messaging.tools.jmx.ServiceAttributeOverrides;
-import org.jboss.jms.client.JBossConnection;
-
 import javax.jms.Connection;
-import javax.jms.Session;
-import javax.jms.MessageProducer;
+import javax.jms.ConnectionFactory;
 import javax.jms.DeliveryMode;
 import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
 import javax.jms.TextMessage;
-import javax.jms.ConnectionFactory;
-import javax.jms.Queue;
+import javax.management.ObjectName;
 import javax.naming.InitialContext;
-import javax.management.ObjectName;
 
+import org.jboss.jms.client.JBossConnection;
+import org.jboss.test.messaging.MessagingTestCase;
+import org.jboss.test.messaging.tools.ServerManagement;
+import org.jboss.test.messaging.tools.jmx.ServiceAttributeOverrides;
+
 /**
  * Extending MessagingTestCase and not ClusteringTestBase because I want to start the messaging
  * servers (the clustered post offices in this case) configured in a particular way (a specific

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java	2007-02-21 15:04:49 UTC (rev 2385)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java	2007-02-21 18:07:44 UTC (rev 2386)
@@ -177,7 +177,7 @@
          new ObjectName("jboss.jca:service=ConnectionFactoryBinding,name=JCAConnectionFactory");
 
          REMOTING_OBJECT_NAME =
-         new ObjectName("jboss.messaging:service=Connector,transport=socket");
+         new ObjectName("jboss.messaging:service=Connector,transport=bisocket");
 
          HTTP_REMOTING_OBJECT_NAME =
          new ObjectName("jboss.messaging:service=Connector,transport=http");
@@ -1381,6 +1381,9 @@
             dataType = "";
             serializationType = "java";
          }
+         
+         // Note that we DO NOT want the direct thread pool on the server side - since that can lead
+         // to deadlocks
 
          String params =
             "/?" +
@@ -1394,9 +1397,10 @@
             "serverSocketClass=org.jboss.jms.server.remoting.ServerSocketWrapper&" +
             "NumberOfRetries=1&" +
             "NumberOfCallRetries=2&" +
-            "callbackErrorsAllowed=1&" +
-            "onewayThreadPool=org.jboss.jms.server.remoting.DirectThreadPool";
-
+            "callbackErrorsAllowed=1";
+         
+         
+         
          // specific parameters per transport
 
          if ("http".equals(transport))




More information about the jboss-cvs-commits mailing list