[jboss-cvs] JBoss Messaging SVN: r5796 - in trunk: src/config and 37 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Feb 3 08:20:44 EST 2009


Author: ataylor
Date: 2009-02-03 08:20:44 -0500 (Tue, 03 Feb 2009)
New Revision: 5796

Added:
   trunk/examples/jms/src/org/jboss/jms/example/SoloMessageTopicExample.java
   trunk/src/main/org/jboss/messaging/core/deployers/impl/AddressSettingsDeployer.java
   trunk/src/main/org/jboss/messaging/core/server/impl/SoloQueueImpl.java
   trunk/src/main/org/jboss/messaging/core/settings/impl/AddressSettings.java
   trunk/tests/src/org/jboss/messaging/tests/integration/queue/FakeStorageManager.java
   trunk/tests/src/org/jboss/messaging/tests/integration/queue/SoloQueueRecoveryTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/queue/SoloQueueTest.java
Modified:
   trunk/src/config/jbm-cluster-standalone-beans.xml
   trunk/src/config/jbm-jboss-beans.xml
   trunk/src/config/jbm-jms.xml
   trunk/src/config/jbm-queues.xml
   trunk/src/config/jbm-standalone-beans.xml
   trunk/src/main/org/jboss/messaging/core/management/ManagementService.java
   trunk/src/main/org/jboss/messaging/core/management/impl/ManagementServiceImpl.java
   trunk/src/main/org/jboss/messaging/core/management/impl/MessagingServerControl.java
   trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java
   trunk/src/main/org/jboss/messaging/core/message/impl/MessageImpl.java
   trunk/src/main/org/jboss/messaging/core/paging/PagingStoreFactory.java
   trunk/src/main/org/jboss/messaging/core/paging/impl/PagingManagerImpl.java
   trunk/src/main/org/jboss/messaging/core/paging/impl/PagingStoreFactoryNIO.java
   trunk/src/main/org/jboss/messaging/core/paging/impl/PagingStoreImpl.java
   trunk/src/main/org/jboss/messaging/core/persistence/StorageManager.java
   trunk/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java
   trunk/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageManager.java
   trunk/src/main/org/jboss/messaging/core/server/Messaging.java
   trunk/src/main/org/jboss/messaging/core/server/MessagingServer.java
   trunk/src/main/org/jboss/messaging/core/server/QueueFactory.java
   trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterConnectionImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/QueueFactoryImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java
   trunk/src/main/org/jboss/messaging/core/transaction/impl/ResourceManagerImpl.java
   trunk/src/main/org/jboss/messaging/jms/server/impl/JMSServerManagerImpl.java
   trunk/src/main/org/jboss/messaging/jms/server/management/JMSManagementService.java
   trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSManagementServiceImpl.java
   trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSQueueControl.java
   trunk/src/schemas/jbm-queues.xsd
   trunk/tests/jms-tests/src/org/jboss/test/messaging/tools/container/LocalTestServer.java
   trunk/tests/src/org/jboss/messaging/tests/concurrent/server/impl/QueueTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/basic/AutoGroupClientTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/chunkmessage/MessageChunkTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/paging/PageCrashTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/paging/PagingManagerIntegrationTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/paging/PagingServiceIntegrationTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/queue/DeadLetterAddressTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/queue/ExpiryAddressTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/queue/ExpiryRunnerTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/queue/MessageGroupingTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/scheduling/ScheduledMessageTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/xa/BasicXaRecoveryTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/xa/BasicXaTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/xa/XaTimeoutTest.java
   trunk/tests/src/org/jboss/messaging/tests/performance/paging/MeasurePagingMultiThreadTest.java
   trunk/tests/src/org/jboss/messaging/tests/stress/paging/PageStressTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/deployers/impl/QueueSettingsDeployerTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/ManagementServiceImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/MessagingServerControlTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/paging/impl/PagingStoreImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/paging/impl/PagingStoreTestBase.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/MessagingServerImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueFactoryImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/fakes/FakeQueueFactory.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/settings/impl/QueueSettingsTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSManagementServiceImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSQueueControlTest.java
   trunk/tests/src/org/jboss/messaging/tests/util/ServiceTestBase.java
Log:
https://jira.jboss.org/jira/browse/JBMESSAGING-1214 + some refactoring

Copied: trunk/examples/jms/src/org/jboss/jms/example/SoloMessageTopicExample.java (from rev 5772, trunk/examples/jms/src/org/jboss/jms/example/TopicExample.java)
===================================================================
--- trunk/examples/jms/src/org/jboss/jms/example/SoloMessageTopicExample.java	                        (rev 0)
+++ trunk/examples/jms/src/org/jboss/jms/example/SoloMessageTopicExample.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -0,0 +1,120 @@
+/*
+   * JBoss, Home of Professional Open Source
+   * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+   * 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.example;
+
+import java.util.concurrent.CountDownLatch;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+import javax.jms.ObjectMessage;
+import javax.naming.InitialContext;
+
+import org.jboss.messaging.core.logging.Logger;
+
+/**
+ * A simple JMS Topic example that creates a producer and consumer on a queue and sends and receives a message via a
+ * Message Listener..
+ *
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+public class SoloMessageTopicExample
+{
+   final static Logger log = Logger.getLogger(SoloMessageTopicExample.class);
+
+   public static void main(final String[] args)
+   {
+      Connection connection = null;
+      try
+      {
+         //create an initial context, env will be picked up from jndi.properties
+         InitialContext initialContext = new InitialContext();
+         Topic topic = (Topic) initialContext.lookup("/topic/testSoloTopic");
+         ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");
+         connection = cf.createConnection();
+         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         MessageProducer messageProducer = session.createProducer(topic);
+
+         MessageConsumer messageConsumer = session.createConsumer(topic);
+         Message message = session.createObjectMessage(101.10);
+         message.setStringProperty("_JBM_SOLO_MESSAGE", "SHARE_PRICE");
+         Message message2 = session.createObjectMessage(121.10);
+         message2.setStringProperty("_JBM_SOLO_MESSAGE", "SHARE_PRICE");
+         final CountDownLatch latch = new CountDownLatch(1);
+         messageConsumer.setMessageListener(new MessageListener()
+         {
+            public void onMessage(Message message)
+            {
+               try
+               {
+                  log.info("message received from topic");
+                  ObjectMessage textMessage = (ObjectMessage) message;
+                  log.info("Share Price is £" + textMessage.getObject());
+               }
+               catch (JMSException e)
+               {
+                  e.printStackTrace();
+               }
+               latch.countDown();
+            }
+         });
+
+         log.info("publishing message to topic");
+         messageProducer.send(message);
+         messageProducer.send(message2);
+         connection.start();
+         try
+         {
+            latch.await();
+         }
+         catch (InterruptedException e)
+         {
+         }
+      }
+      catch (Exception e)
+      {
+         e.printStackTrace();
+      }
+
+      finally
+      {
+         if (connection != null)
+         {
+            try
+            {
+               connection.close();
+            }
+            catch (JMSException e)
+            {
+               e.printStackTrace();
+            }
+         }
+      }
+   }
+}
\ No newline at end of file


Property changes on: trunk/examples/jms/src/org/jboss/jms/example/SoloMessageTopicExample.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: trunk/src/config/jbm-cluster-standalone-beans.xml
===================================================================
--- trunk/src/config/jbm-cluster-standalone-beans.xml	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/config/jbm-cluster-standalone-beans.xml	2009-02-03 13:20:44 UTC (rev 5796)
@@ -46,7 +46,7 @@
    </bean>
 
    <bean name="MessagingServer" class="org.jboss.messaging.core.server.impl.MessagingServerImpl">
-      <depends>QueueSettingsDeployer</depends>
+      <depends>AddressSettingsDeployer</depends>
       <property name="storageManager">
          <inject bean="StorageManager"/>
       </property>
@@ -95,7 +95,7 @@
             <inject bean="MessagingServer" property="storageManager"/>
          </parameter>
          <parameter>
-            <inject bean="MessagingServer" property="queueSettingsRepository"/>
+            <inject bean="MessagingServer" property="addressSettingsRepository"/>
          </parameter>
          <parameter>
             <inject bean="JMSManagementService"/>
@@ -117,13 +117,13 @@
       </property>
    </bean>
 
-   <bean name="QueueSettingsDeployer" class="org.jboss.messaging.core.deployers.impl.QueueSettingsDeployer">
+   <bean name="AddressSettingsDeployer" class="org.jboss.messaging.core.deployers.impl.AddressSettingsDeployer">
       <constructor>
          <parameter>
             <inject bean="DeploymentManager"/>
          </parameter>
          <parameter>
-            <inject bean="MessagingServer" property="queueSettingsRepository" state="Configured"/>
+            <inject bean="MessagingServer" property="addressSettingsRepository" state="Configured"/>
          </parameter>
       </constructor>
    </bean>

Modified: trunk/src/config/jbm-jboss-beans.xml
===================================================================
--- trunk/src/config/jbm-jboss-beans.xml	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/config/jbm-jboss-beans.xml	2009-02-03 13:20:44 UTC (rev 5796)
@@ -31,7 +31,7 @@
    </bean>-->
 
    <bean name="MessagingServer" class="org.jboss.messaging.core.server.impl.MessagingServerImpl">
-      <depends>QueueSettingsDeployer</depends>
+      <depends>AddressSettingsDeployer</depends>
       <property name="storageManager">
          <inject bean="StorageManager"/>
       </property>
@@ -80,7 +80,7 @@
             <inject bean="MessagingServer" property="storageManager"/>
          </parameter>
          <parameter>
-            <inject bean="MessagingServer" property="queueSettingsRepository"/>
+            <inject bean="MessagingServer" property="addressSettingsRepository"/>
          </parameter>
          <parameter>
             <inject bean="JMSManagementService"/>
@@ -102,13 +102,13 @@
       </property>
    </bean>
 
-   <bean name="QueueSettingsDeployer" class="org.jboss.messaging.core.deployers.impl.QueueSettingsDeployer">
+   <bean name="AddressSettingsDeployer" class="org.jboss.messaging.core.deployers.impl.AddressSettingsDeployer">
       <constructor>
          <parameter>
             <inject bean="JBMDeploymentManager"/>
          </parameter>
          <parameter>
-            <inject bean="MessagingServer" property="queueSettingsRepository" state="Configured"/>
+            <inject bean="MessagingServer" property="addressSettingsRepository" state="Configured"/>
          </parameter>
       </constructor>
    </bean>

Modified: trunk/src/config/jbm-jms.xml
===================================================================
--- trunk/src/config/jbm-jms.xml	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/config/jbm-jms.xml	2009-02-03 13:20:44 UTC (rev 5796)
@@ -115,6 +115,9 @@
    <topic name="testDurableTopic">
       <entry name="/topic/testDurableTopic"/>
    </topic>
+   <topic name="testSoloTopic">
+      <entry name="/topic/testSoloTopic"/>
+   </topic>
    <queue name="testQueue">
       <entry name="/queue/testQueue"/>
    </queue>

Modified: trunk/src/config/jbm-queues.xml
===================================================================
--- trunk/src/config/jbm-queues.xml	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/config/jbm-queues.xml	2009-02-03 13:20:44 UTC (rev 5796)
@@ -65,51 +65,55 @@
       <permission type="write" roles="guest,def"/>
    </security>
 
-   <queue-settings match="queuejms.QueueWithOwnDLQAndExpiryQueue">
+   <address-settings match="queuejms.QueueWithOwnDLQAndExpiryQueue">
       <dead-letter-address>queuejms.PrivateDLQ</dead-letter-address>
       <expiry-address>queuejms.PrivateExpiryQueue</expiry-address>
-   </queue-settings>
+   </address-settings>
 
-   <queue-settings match="topicjms.TopicWithOwnDLQAndExpiryQueue">
+   <address-settings match="topicjms.TopicWithOwnDLQAndExpiryQueue">
       <dead-letter-address>queuejms.PrivateDLQ</dead-letter-address>
       <expiry-address>queuejms.PrivateExpiryQueue</expiry-address>
-   </queue-settings>
+   </address-settings>
 
-   <queue-settings match="queuejms.QueueWithOwnRedeliveryDelay">
+   <address-settings match="queuejms.QueueWithOwnRedeliveryDelay">
       <redelivery-delay>5000</redelivery-delay>
-   </queue-settings>
+   </address-settings>
 
-   <queue-settings match="topicjms.TopicWithOwnRedeliveryDelay">
+   <address-settings match="topicjms.TopicWithOwnRedeliveryDelay">
       <redelivery-delay>5000</redelivery-delay>
-   </queue-settings>
+   </address-settings>
 
-   <queue-settings match="queuejms.testDistributedQueue">
+   <address-settings match="queuejms.testDistributedQueue">
       <clustered>true</clustered>
-   </queue-settings>
+   </address-settings>
 
-   <queue-settings match="topicjms.testDistributedTopic">
+   <address-settings match="topicjms.testDistributedTopic">
       <clustered>true</clustered>
-   </queue-settings>
+   </address-settings>
 
-   <queue-settings match="queuejms.testPerfQueue">
+   <address-settings match="queuejms.testPerfQueue">
       <clustered>false</clustered>
-   </queue-settings>
+   </address-settings>
 
-   <queue-settings match="queuejms.MyQueue">
+   <address-settings match="queuejms.MyQueue">
       <max-size-bytes>-1</max-size-bytes>
       <page-size-bytes>10485760</page-size-bytes>
       <drop-messages-when-full>false</drop-messages-when-full>
-   </queue-settings>
+   </address-settings>
 
-   <queue-settings match="queuejms.testGroupQueue">
+   <address-settings match="queuejms.testGroupQueue">
       <max-size-bytes>-1</max-size-bytes>
       <page-size-bytes>10485760</page-size-bytes>
       <drop-messages-when-full>false</drop-messages-when-full>
       <distribution-policy-class>org.jboss.messaging.core.server.impl.GroupingRoundRobinDistributor</distribution-policy-class>
-   </queue-settings>
+   </address-settings>
 
+   <address-settings match="topicjms.testSoloTopic">
+      <solo-queue>true</solo-queue>
+   </address-settings>
+
    <!--default for catch all-->
-   <queue-settings match="*">
+   <address-settings match="*">
       <clustered>false</clustered>
       <dead-letter-address>queuejms.DLQ</dead-letter-address>
       <expiry-address>queuejms.ExpiryQueue</expiry-address>
@@ -117,5 +121,5 @@
       <max-size-bytes>-1</max-size-bytes>
       <distribution-policy-class>org.jboss.messaging.core.server.impl.RoundRobinDistributor</distribution-policy-class>
       <message-counter-history-day-limit>10</message-counter-history-day-limit>
-   </queue-settings>
+   </address-settings>
 </settings>

Modified: trunk/src/config/jbm-standalone-beans.xml
===================================================================
--- trunk/src/config/jbm-standalone-beans.xml	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/config/jbm-standalone-beans.xml	2009-02-03 13:20:44 UTC (rev 5796)
@@ -44,7 +44,7 @@
    </bean>
 
    <bean name="MessagingServer" class="org.jboss.messaging.core.server.impl.MessagingServerImpl">
-      <depends>QueueSettingsDeployer</depends>
+      <depends>AddressSettingsDeployer</depends>
       <depends>QueueDeployer</depends>
       
       <property name="storageManager">
@@ -95,7 +95,7 @@
             <inject bean="MessagingServer" property="storageManager"/>
          </parameter>
          <parameter>
-            <inject bean="MessagingServer" property="queueSettingsRepository"/>
+            <inject bean="MessagingServer" property="addressSettingsRepository"/>
          </parameter>
          <parameter>
             <inject bean="JMSManagementService"/>
@@ -117,13 +117,13 @@
       </property>
    </bean>
 
-   <bean name="QueueSettingsDeployer" class="org.jboss.messaging.core.deployers.impl.QueueSettingsDeployer">
+   <bean name="AddressSettingsDeployer" class="org.jboss.messaging.core.deployers.impl.AddressSettingsDeployer">
       <constructor>
          <parameter>
             <inject bean="DeploymentManager"/>
          </parameter>
          <parameter>
-            <inject bean="MessagingServer" property="queueSettingsRepository" state="Configured"/>
+            <inject bean="MessagingServer" property="addressSettingsRepository" state="Configured"/>
          </parameter>
       </constructor>
    </bean>

Copied: trunk/src/main/org/jboss/messaging/core/deployers/impl/AddressSettingsDeployer.java (from rev 5794, trunk/src/main/org/jboss/messaging/core/deployers/impl/QueueSettingsDeployer.java)
===================================================================
--- trunk/src/main/org/jboss/messaging/core/deployers/impl/AddressSettingsDeployer.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/deployers/impl/AddressSettingsDeployer.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -0,0 +1,178 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * 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.messaging.core.deployers.impl;
+
+import org.jboss.messaging.core.deployers.DeploymentManager;
+import org.jboss.messaging.core.settings.HierarchicalRepository;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
+import org.jboss.messaging.util.SimpleString;
+import org.jboss.messaging.util.XMLUtil;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * A deployer for creating a set of queue settings and adding them to a repository
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+public class AddressSettingsDeployer extends XmlDeployer
+{   
+   private static final String CLUSTERED_NODE_NAME = "clustered";
+   
+   private static final String DEAD_LETTER_ADDRESS_NODE_NAME = "dead-letter-address";
+   
+   private static final String EXPIRY_ADDRESS_NODE_NAME = "expiry-address";
+   
+   private static final String REDELIVERY_DELAY_NODE_NAME = "redelivery-delay";
+   
+   private static final String MAX_SIZE_BYTES_NODE_NAME = "max-size-bytes";
+   
+   private static final String DROP_MESSAGES_WHEN_FULL_NODE_NAME = "drop-messages-when-full";
+   
+   private static final String PAGE_SIZE_BYTES_NODE_NAME = "page-size-bytes";
+   
+   private static final String DISTRIBUTION_POLICY_CLASS_NODE_NAME = "distribution-policy-class";
+   
+   private static final String MESSAGE_COUNTER_HISTORY_DAY_LIMIT_NODE_NAME = "message-counter-history-day-limit";
+
+   private static final String SOLO_MESSAGE_NODE_NAME = "solo-queue";
+
+   private final HierarchicalRepository<AddressSettings> queueSettingsRepository;
+
+   public AddressSettingsDeployer(final DeploymentManager deploymentManager, final HierarchicalRepository<AddressSettings> queueSettingsRepository)
+   {
+   	super(deploymentManager);
+      this.queueSettingsRepository = queueSettingsRepository;
+   }
+   
+   /**
+    * the names of the elements to deploy
+    * @return the names of the elements todeploy
+    */
+   public String[] getElementTagName()
+   {
+      return new String[]{"address-settings"};
+   }
+
+   @Override
+   public void validate(Node rootNode) throws Exception
+   {
+      if ("deployment".equals(rootNode.getNodeName()))
+      {
+         XMLUtil.validate(rootNode, "jbm-configuration.xsd");
+      } else 
+      {
+         XMLUtil.validate(rootNode, "jbm-queues.xsd");         
+      }
+   }
+
+   /**
+    * deploy an element
+    * @param node the element to deploy
+    * @throws Exception .
+    */
+   public void deploy(Node node) throws Exception
+   {
+      String match = node.getAttributes().getNamedItem(getKeyAttribute()).getNodeValue();
+      
+      NodeList children = node.getChildNodes();
+      
+      AddressSettings addressSettings = new AddressSettings();
+      
+      for (int i = 0; i < children.getLength(); i++)
+      {
+         Node child = children.item(i);
+         
+         if (CLUSTERED_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            addressSettings.setClustered(Boolean.valueOf(child.getTextContent()));
+         }
+         else if (DEAD_LETTER_ADDRESS_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            SimpleString queueName = new SimpleString(child.getTextContent());
+            addressSettings.setDeadLetterAddress(queueName);
+         }
+         else if (EXPIRY_ADDRESS_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+         	SimpleString queueName = new SimpleString(child.getTextContent());
+            addressSettings.setExpiryAddress(queueName);
+         }
+         else if (REDELIVERY_DELAY_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            addressSettings.setRedeliveryDelay(Long.valueOf(child.getTextContent()));
+         }
+         else if (MAX_SIZE_BYTES_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            addressSettings.setMaxSizeBytes(Integer.valueOf(child.getTextContent()));
+         }
+         else if (PAGE_SIZE_BYTES_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            addressSettings.setPageSizeBytes(Integer.valueOf(child.getTextContent()));
+         }
+         else if (DISTRIBUTION_POLICY_CLASS_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            addressSettings.setDistributionPolicyClass(child.getTextContent());
+         }
+         else if (MESSAGE_COUNTER_HISTORY_DAY_LIMIT_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            addressSettings.setMessageCounterHistoryDayLimit(Integer.valueOf(child.getTextContent()));
+         }
+         else if (DROP_MESSAGES_WHEN_FULL_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            addressSettings.setDropMessagesWhenFull(Boolean.valueOf(child.getTextContent().trim()));
+         }
+         else if (SOLO_MESSAGE_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+         {
+            addressSettings.setSoloQueue(Boolean.valueOf(child.getTextContent().trim()));
+         }
+      }
+      
+      queueSettingsRepository.addMatch(match, addressSettings);
+   }
+
+   public String[] getConfigFileNames()
+   {
+      return new String[] {"jbm-configuration", "jbm-queues.xml"};
+   }
+
+   /**
+    * undeploys an element
+    * @param node the element to undeploy
+    * @throws Exception .
+    */
+   public void undeploy(Node node) throws Exception
+   {
+      String match = node.getAttributes().getNamedItem(getKeyAttribute()).getNodeValue();
+      
+      queueSettingsRepository.removeMatch(match);
+   }
+
+   /**
+    * the key attribute for theelement, usually 'name' but can be overridden
+    * @return the key attribute
+    */
+   public String getKeyAttribute()
+   {
+      return "match";
+   }
+
+}

Modified: trunk/src/main/org/jboss/messaging/core/management/ManagementService.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/management/ManagementService.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/management/ManagementService.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -49,7 +49,7 @@
 import org.jboss.messaging.core.server.cluster.BroadcastGroup;
 import org.jboss.messaging.core.server.cluster.ClusterConnection;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.util.SimpleString;
 
@@ -66,7 +66,7 @@
    MessagingServerControlMBean registerServer(PostOffice postOffice,
                                               StorageManager storageManager,
                                               Configuration configuration,                                            
-                                              HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                                              HierarchicalRepository<AddressSettings> queueSettingsRepository,
                                               HierarchicalRepository<Set<Role>> securityRepository,
                                               ResourceManager resourceManager,
                                               RemotingService remotingService,

Modified: trunk/src/main/org/jboss/messaging/core/management/impl/ManagementServiceImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/management/impl/ManagementServiceImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/management/impl/ManagementServiceImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -80,7 +80,7 @@
 import org.jboss.messaging.core.server.cluster.ClusterConnection;
 import org.jboss.messaging.core.server.impl.ServerMessageImpl;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.util.ConcurrentHashSet;
 import org.jboss.messaging.util.SimpleString;
@@ -116,7 +116,7 @@
 
    private HierarchicalRepository<Set<Role>> securityRepository;
 
-   private HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private MessagingServerControl managedServer;
 
@@ -200,7 +200,7 @@
    public MessagingServerControlMBean registerServer(final PostOffice postOffice,
                                                      final StorageManager storageManager,
                                                      final Configuration configuration,
-                                                     final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                                                     final HierarchicalRepository<AddressSettings> queueSettingsRepository,
                                                      final HierarchicalRepository<Set<Role>> securityRepository,
                                                      final ResourceManager resourceManager,
                                                      final RemotingService remotingService,

Modified: trunk/src/main/org/jboss/messaging/core/management/impl/MessagingServerControl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/management/impl/MessagingServerControl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/management/impl/MessagingServerControl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -295,7 +295,7 @@
       SimpleString sName = new SimpleString(name);
       if (postOffice.getBinding(sName) == null)
       {
-         Queue queue = queueFactory.createQueue(-1, sName, null, true, false);
+         Queue queue = queueFactory.createQueue(-1, sAddress, sName, null, true, false);
          Binding binding = new LocalQueueBinding(sAddress, queue);
          storageManager.addQueueBinding(binding);
          postOffice.addBinding(binding);
@@ -314,7 +314,7 @@
       }
       if (postOffice.getBinding(sName) == null)
       {
-         Queue queue = queueFactory.createQueue(-1, sName, filter, durable, false);
+         Queue queue = queueFactory.createQueue(-1, sAddress, sName, filter, durable, false);
          Binding binding = new LocalQueueBinding(sAddress, queue);
          if (durable)
          {

Modified: trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -46,7 +46,7 @@
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.util.SimpleString;
 
 /**
@@ -68,7 +68,7 @@
 
    private final PostOffice postOffice;
 
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private final HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private final MessageCounter counter;
 
@@ -79,7 +79,7 @@
    public QueueControl(final Queue queue,
                        final StorageManager storageManager,
                        final PostOffice postOffice,
-                       final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                       final HierarchicalRepository<AddressSettings> queueSettingsRepository,
                        final MessageCounter counter)
    {
       this.queue = queue;
@@ -152,10 +152,10 @@
 
    public String getDeadLetterAddress()
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(getName());
-      if (queueSettings != null && queueSettings.getDeadLetterAddress() != null)
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(getName());
+      if (addressSettings != null && addressSettings.getDeadLetterAddress() != null)
       {
-         return queueSettings.getDeadLetterAddress().toString();
+         return addressSettings.getDeadLetterAddress().toString();
       }
       else
       {
@@ -165,20 +165,20 @@
 
    public void setDeadLetterAddress(String deadLetterAddress) throws Exception
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(getName());
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(getName());
 
       if (deadLetterAddress != null)
       {
-         queueSettings.setDeadLetterAddress(new SimpleString(deadLetterAddress));
+         addressSettings.setDeadLetterAddress(new SimpleString(deadLetterAddress));
       }
    }
 
    public String getExpiryAddress()
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(getName());
-      if (queueSettings != null && queueSettings.getExpiryAddress() != null)
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(getName());
+      if (addressSettings != null && addressSettings.getExpiryAddress() != null)
       {
-         return queueSettings.getExpiryAddress().toString();
+         return addressSettings.getExpiryAddress().toString();
       }
       else
       {
@@ -188,11 +188,11 @@
 
    public void setExpiryAddress(String expiryAddres) throws Exception
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(getName());
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(getName());
 
       if (expiryAddres != null)
       {
-         queueSettings.setExpiryAddress(new SimpleString(expiryAddres));
+         addressSettings.setExpiryAddress(new SimpleString(expiryAddres));
       }
    }
 

Modified: trunk/src/main/org/jboss/messaging/core/message/impl/MessageImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/message/impl/MessageImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/message/impl/MessageImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -70,6 +70,8 @@
    public static final SimpleString HDR_ROUTE_TO_IDS = new SimpleString("_JBM_ROUTE_TO");
    
    public static final SimpleString HDR_FROM_CLUSTER = new SimpleString("_JBM_FROM_CLUSTER");
+
+   public static final SimpleString HDR_SOLE_MESSAGE = new SimpleString("_JBM_SOLO_MESSAGE");
       
    // Attributes ----------------------------------------------------
 

Modified: trunk/src/main/org/jboss/messaging/core/paging/PagingStoreFactory.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/paging/PagingStoreFactory.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/paging/PagingStoreFactory.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -29,7 +29,7 @@
 import org.jboss.messaging.core.persistence.StorageManager;
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.util.SimpleString;
 
 /**
@@ -40,7 +40,7 @@
  */
 public interface PagingStoreFactory
 {
-   PagingStore newStore(SimpleString destinationName, QueueSettings queueSettings) throws Exception;
+   PagingStore newStore(SimpleString destinationName, AddressSettings addressSettings) throws Exception;
 
    Executor getGlobalDepagerExecutor();
 
@@ -52,7 +52,7 @@
 
    void setPostOffice(PostOffice office);
 
-   List<PagingStore> reloadStores(HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+   List<PagingStore> reloadStores(HierarchicalRepository<AddressSettings> queueSettingsRepository) throws Exception;
 
    /**
     * @param storeName

Modified: trunk/src/main/org/jboss/messaging/core/paging/impl/PagingManagerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/paging/impl/PagingManagerImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/paging/impl/PagingManagerImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -38,7 +38,7 @@
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.util.SimpleString;
 
 /**
@@ -67,7 +67,7 @@
 
    private final ConcurrentMap<SimpleString, PagingStore> stores = new ConcurrentHashMap<SimpleString, PagingStore>();
 
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private final HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private final PagingStoreFactory pagingStoreFactory;
 
@@ -89,7 +89,7 @@
 
    public PagingManagerImpl(final PagingStoreFactory pagingSPI,
                             final StorageManager storageManager,
-                            final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                            final HierarchicalRepository<AddressSettings> queueSettingsRepository,
                             final long maxGlobalSize,
                             final long defaultPageSize,
                             final boolean syncNonTransactional,

Modified: trunk/src/main/org/jboss/messaging/core/paging/impl/PagingStoreFactoryNIO.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/paging/impl/PagingStoreFactoryNIO.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/paging/impl/PagingStoreFactoryNIO.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -46,7 +46,7 @@
 import org.jboss.messaging.core.persistence.StorageManager;
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.util.JBMThreadFactory;
 import org.jboss.messaging.util.OrderedExecutorFactory;
 import org.jboss.messaging.util.SimpleString;
@@ -111,7 +111,7 @@
       parentExecutor.awaitTermination(30, TimeUnit.SECONDS);
    }
 
-   public synchronized PagingStore newStore(final SimpleString destinationName, final QueueSettings settings) throws Exception
+   public synchronized PagingStore newStore(final SimpleString destinationName, final AddressSettings settings) throws Exception
    {
 
       return new PagingStoreImpl(pagingManager,
@@ -169,7 +169,7 @@
       this.postOffice = postOffice;
    }
 
-   public List<PagingStore> reloadStores(final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+   public List<PagingStore> reloadStores(final HierarchicalRepository<AddressSettings> queueSettingsRepository) throws Exception
    {
       File pageDirectory = new File(directory);
 
@@ -213,7 +213,7 @@
 
             SequentialFileFactory factory = newFileFactory(guid);
 
-            QueueSettings settings = queueSettingsRepository.getMatch(destinationName.toString());
+            AddressSettings settings = queueSettingsRepository.getMatch(destinationName.toString());
 
             PagingStore store = new PagingStoreImpl(pagingManager,
                                                     storageManager,

Modified: trunk/src/main/org/jboss/messaging/core/paging/impl/PagingStoreImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/paging/impl/PagingStoreImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/paging/impl/PagingStoreImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -48,7 +48,7 @@
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.SendLock;
 import org.jboss.messaging.core.server.ServerMessage;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.Transaction;
 import org.jboss.messaging.core.transaction.TransactionPropertyIndexes;
 import org.jboss.messaging.core.transaction.impl.TransactionImpl;
@@ -138,7 +138,7 @@
                           final SequentialFileFactory fileFactory,
                           final PagingStoreFactory storeFactory,
                           final SimpleString storeName,
-                          final QueueSettings queueSettings,
+                          final AddressSettings addressSettings,
                           final Executor executor)
    {
       if (pagingManager == null)
@@ -152,18 +152,18 @@
 
       this.storeName = storeName;
 
-      maxSize = queueSettings.getMaxSizeBytes();
+      maxSize = addressSettings.getMaxSizeBytes();
 
-      if (queueSettings.getPageSizeBytes() != null)
+      if (addressSettings.getPageSizeBytes() != null)
       {
-         pageSize = queueSettings.getPageSizeBytes();
+         pageSize = addressSettings.getPageSizeBytes();
       }
       else
       {
          pageSize = pagingManager.getDefaultPageSize();
       }
 
-      dropMessagesWhenFull = queueSettings.isDropMessagesWhenFull();
+      dropMessagesWhenFull = addressSettings.isDropMessagesWhenFull();
 
       this.executor = executor;
 

Modified: trunk/src/main/org/jboss/messaging/core/persistence/StorageManager.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/persistence/StorageManager.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/persistence/StorageManager.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -36,7 +36,7 @@
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.util.Pair;
 import org.jboss.messaging.util.SimpleString;
@@ -103,7 +103,7 @@
 
    void loadMessageJournal(PostOffice postOffice,
                            StorageManager storageManager,
-                           HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                           HierarchicalRepository<AddressSettings> queueSettingsRepository,
                            Map<Long, Queue> queues,
                            ResourceManager resourceManager,
                            Map<SimpleString, List<Pair<byte[], Long>>> duplicateIDMap) throws Exception;

Modified: trunk/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -72,7 +72,7 @@
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.server.impl.ServerMessageImpl;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.core.transaction.Transaction;
 import org.jboss.messaging.core.transaction.TransactionOperation;
@@ -436,7 +436,7 @@
 
    public void loadMessageJournal(final PostOffice postOffice,
                                   final StorageManager storageManager,
-                                  final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                                  final HierarchicalRepository<AddressSettings> queueSettingsRepository,
                                   final Map<Long, Queue> queues,
                                   final ResourceManager resourceManager,
                                   final Map<SimpleString, List<Pair<byte[], Long>>> duplicateIDMap) throws Exception
@@ -668,7 +668,7 @@
    
    private void loadPreparedTransactions(final PostOffice postOffice,
                                          final StorageManager storageManager,
-                                         final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                                         final HierarchicalRepository<AddressSettings> queueSettingsRepository,
                                          final Map<Long, Queue> queues,
                                          final ResourceManager resourceManager,
                                          final List<PreparedTransactionInfo> preparedTransactions,
@@ -843,12 +843,11 @@
 
             MessageReference removed = queue.removeReferenceWithID(messageID);
 
-            referencesToAck.add(removed);
-
-            if (removed == null)
+            if (removed != null)
             {
-               throw new IllegalStateException("Failed to remove reference for " + messageID);
+               referencesToAck.add(removed);
             }
+
          }
 
          for (MessageReference ack : referencesToAck)

Modified: trunk/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageManager.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageManager.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageManager.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -37,7 +37,7 @@
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.util.IDGenerator;
 import org.jboss.messaging.util.Pair;
@@ -215,7 +215,7 @@
 
    public void loadMessageJournal(PostOffice postOffice,
                                   StorageManager storageManager,
-                                  HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                                  HierarchicalRepository<AddressSettings> queueSettingsRepository,
                                   Map<Long, Queue> queues,
                                   ResourceManager resourceManager,
                                   Map<SimpleString, List<Pair<byte[], Long>>> duplicateIDMap) throws Exception

Modified: trunk/src/main/org/jboss/messaging/core/server/Messaging.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/Messaging.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/server/Messaging.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -84,7 +84,33 @@
 
       return new MessagingServiceImpl(server, storageManager, remotingService);
    }
-   
+
+   public static MessagingServiceImpl newMessagingService(final Configuration config, StorageManager storageManager)
+   {
+      RemotingService remotingService = new RemotingServiceImpl(config);
+
+      JBMSecurityManager securityManager = new JBMSecurityManagerImpl(true);
+
+      ManagementService managementService = new ManagementServiceImpl(ManagementFactory.getPlatformMBeanServer(),
+                                                                      config.isJMXManagementEnabled());
+
+      remotingService.setManagementService(managementService);
+
+      MessagingServer server = new MessagingServerImpl();
+
+      server.setConfiguration(config);
+
+      server.setStorageManager(storageManager);
+
+      server.setRemotingService(remotingService);
+
+      server.setSecurityManager(securityManager);
+
+      server.setManagementService(managementService);
+
+      return new MessagingServiceImpl(server, storageManager, remotingService);
+   }
+
    public static MessagingServiceImpl newNullStorageMessagingService(final Configuration config, MBeanServer mbeanServer)
    {
       StorageManager storageManager = new NullStorageManager();

Modified: trunk/src/main/org/jboss/messaging/core/server/MessagingServer.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/MessagingServer.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/server/MessagingServer.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -28,7 +28,7 @@
 import org.jboss.messaging.core.security.Role;
 import org.jboss.messaging.core.server.cluster.ClusterManager;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.core.version.Version;
 
@@ -100,7 +100,7 @@
 
    HierarchicalRepository<Set<Role>> getSecurityRepository();
 
-   HierarchicalRepository<QueueSettings> getQueueSettingsRepository();
+   HierarchicalRepository<AddressSettings> getAddressSettingsRepository();
 
    int getConnectionCount();
 

Modified: trunk/src/main/org/jboss/messaging/core/server/QueueFactory.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/QueueFactory.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/server/QueueFactory.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -38,7 +38,7 @@
  */
 public interface QueueFactory
 {
-   Queue createQueue(long persistenceID, SimpleString name, Filter filter, boolean durable, boolean temporary);
+   Queue createQueue(long persistenceID, final SimpleString address, SimpleString name, Filter filter, boolean durable, boolean temporary);
 
    /**
     * This is required for delete-all-reference to work correctly with paging

Modified: trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterConnectionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterConnectionImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterConnectionImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -277,7 +277,7 @@
             }
             else
             {
-               queue = queueFactory.createQueue(-1, name, null, true, false);
+               queue = queueFactory.createQueue(-1, name, name, null, true, false);
 
                // Add binding in storage so the queue will get reloaded on startup and we can find it - it's never
                // actually routed to at that address though

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -72,7 +72,7 @@
 import org.jboss.messaging.core.server.cluster.impl.ClusterManagerImpl;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
 import org.jboss.messaging.core.settings.impl.HierarchicalObjectRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.core.transaction.impl.ResourceManagerImpl;
 import org.jboss.messaging.core.version.Version;
@@ -111,7 +111,7 @@
 
    private SecurityStore securityStore;
 
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository = new HierarchicalObjectRepository<QueueSettings>();
+   private final HierarchicalRepository<AddressSettings> addressSettingsRepository = new HierarchicalObjectRepository<AddressSettings>();
 
    private ScheduledExecutorService scheduledExecutor;
 
@@ -220,10 +220,10 @@
 
       securityStore = new SecurityStoreImpl(configuration.getSecurityInvalidationInterval(),
                                             configuration.isSecurityEnabled());
-      queueSettingsRepository.setDefault(new QueueSettings());
+      addressSettingsRepository.setDefault(new AddressSettings());
       scheduledExecutor = new ScheduledThreadPoolExecutor(configuration.getScheduledThreadPoolMaxSize(),
                                                           new JBMThreadFactory("JBM-scheduled-threads"));
-      queueFactory = new QueueFactoryImpl(scheduledExecutor, queueSettingsRepository, storageManager);
+      queueFactory = new QueueFactoryImpl(scheduledExecutor, addressSettingsRepository, storageManager);
 
       pagingManager = createPagingManager();
 
@@ -253,7 +253,7 @@
       serverManagement = managementService.registerServer(postOffice,
                                                           storageManager,
                                                           configuration,
-                                                          queueSettingsRepository,
+                                                          addressSettingsRepository,
                                                           securityRepository,
                                                           resourceManager,
                                                           remotingService,
@@ -284,6 +284,7 @@
          }
 
          Queue queue = queueFactory.createQueue(queueBindingInfo.getPersistenceID(),
+                                                queueBindingInfo.getAddress(),
                                                 queueBindingInfo.getQueueName(),
                                                 filter,
                                                 true,
@@ -301,7 +302,7 @@
 
       storageManager.loadMessageJournal(postOffice,
                                         storageManager,
-                                        queueSettingsRepository,
+                                        addressSettingsRepository,
                                         queues,
                                         resourceManager,
                                         duplicateIDMap);
@@ -421,7 +422,7 @@
       postOffice = null;
       securityRepository = null;
       securityStore = null;
-      queueSettingsRepository.clear();
+      addressSettingsRepository.clear();
       scheduledExecutor.shutdown();
       queueFactory = null;
       resourceManager = null;
@@ -515,9 +516,9 @@
    }
 
    // This is needed for the queue settings deployer
-   public HierarchicalRepository<QueueSettings> getQueueSettingsRepository()
+   public HierarchicalRepository<AddressSettings> getAddressSettingsRepository()
    {
-      return queueSettingsRepository;
+      return addressSettingsRepository;
    }
 
    public ResourceManager getResourceManager()
@@ -757,7 +758,7 @@
       return new PagingManagerImpl(new PagingStoreFactoryNIO(configuration.getPagingDirectory(),
                                                              configuration.getPagingMaxThreads()),
                                    storageManager,
-                                   queueSettingsRepository,
+                                   addressSettingsRepository,
                                    configuration.getPagingMaxGlobalSizeBytes(),
                                    configuration.getPagingDefaultSize(),
                                    configuration.isJournalSyncNonTransactional(),
@@ -787,6 +788,8 @@
 
          SimpleString name = new SimpleString(config.getName());
 
+         SimpleString address = new SimpleString(config.getAddress());
+
          Binding binding = postOffice.getBinding(name);
 
          if (binding == null)
@@ -798,7 +801,7 @@
                filter = new FilterImpl(new SimpleString(config.getFilterString()));
             }
 
-            Queue queue = queueFactory.createQueue(-1, name, filter, config.isDurable(), false);
+            Queue queue = queueFactory.createQueue(-1, address, name, filter, config.isDurable(), false);
 
             Binding queueBinding = new LocalQueueBinding(new SimpleString(config.getAddress()), queue);
             
@@ -930,7 +933,7 @@
                                                               connection,
                                                               storageManager,
                                                               postOffice,
-                                                              queueSettingsRepository,
+                                                              addressSettingsRepository,
                                                               resourceManager,
                                                               securityStore,
                                                               executorFactory.getExecutor(),

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/QueueFactoryImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/QueueFactoryImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/QueueFactoryImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -30,7 +30,7 @@
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.QueueFactory;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.util.SimpleString;
 
 /**
@@ -43,7 +43,7 @@
  */
 public class QueueFactoryImpl implements QueueFactory
 {
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private final HierarchicalRepository<AddressSettings> addressSettingsRepository;
 
    private final ScheduledExecutorService scheduledExecutor;
 
@@ -53,10 +53,10 @@
    private final StorageManager storageManager;
       
    public QueueFactoryImpl(final ScheduledExecutorService scheduledExecutor,
-                           final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                           final HierarchicalRepository<AddressSettings> addressSettingsRepository,
                            final StorageManager storageManager)
    {
-      this.queueSettingsRepository = queueSettingsRepository;
+      this.addressSettingsRepository = addressSettingsRepository;
 
       this.scheduledExecutor = scheduledExecutor;
 
@@ -69,25 +69,41 @@
    }
 
    public Queue createQueue(final long persistenceID,
+                            final SimpleString address,
                             final SimpleString name,
                             final Filter filter,
                             final boolean durable,
                             final boolean temporary)
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(name.toString());
+      AddressSettings addressSettings = addressSettingsRepository.getMatch(address.toString());
       
-      Queue queue = new QueueImpl(persistenceID,
-                                  name,
-                                  filter,                                  
+      Queue queue;
+      if(addressSettings.isSoloQueue())
+      {
+         queue = new SoloQueueImpl(persistenceID,name,
+                                  filter,
                                   durable,
                                   temporary,
                                   scheduledExecutor,
                                   postOffice,
                                   storageManager,
-                                  queueSettingsRepository);
+                                  addressSettingsRepository);
+      }
+      else
+      {
+         queue = new QueueImpl(persistenceID,name,
+                                  filter,
+                                  durable,
+                                  temporary,
+                                  scheduledExecutor,
+                                  postOffice,
+                                  storageManager,
+                                  addressSettingsRepository);
+      }
 
-      queue.setDistributionPolicy(queueSettings.getDistributionPolicy());
 
+      queue.setDistributionPolicy(addressSettings.getDistributionPolicy());
+
       return queue;
    }
 }

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -12,28 +12,14 @@
 
 package org.jboss.messaging.core.server.impl;
 
-import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ACTUAL_EXPIRY_TIME;
-import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ORIGINAL_DESTINATION;
-import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ORIG_MESSAGE_ID;
-
-import java.util.ArrayList;
-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.Set;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
 import org.jboss.messaging.core.filter.Filter;
 import org.jboss.messaging.core.list.PriorityLinkedList;
 import org.jboss.messaging.core.list.impl.PriorityLinkedListImpl;
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.message.impl.MessageImpl;
+import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ACTUAL_EXPIRY_TIME;
+import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ORIGINAL_DESTINATION;
+import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ORIG_MESSAGE_ID;
 import org.jboss.messaging.core.paging.PagingManager;
 import org.jboss.messaging.core.paging.PagingStore;
 import org.jboss.messaging.core.persistence.StorageManager;
@@ -47,7 +33,7 @@
 import org.jboss.messaging.core.server.ScheduledDeliveryHandler;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.Transaction;
 import org.jboss.messaging.core.transaction.TransactionOperation;
 import org.jboss.messaging.core.transaction.TransactionPropertyIndexes;
@@ -56,6 +42,19 @@
 import org.jboss.messaging.util.ConcurrentSet;
 import org.jboss.messaging.util.SimpleString;
 
+import java.util.ArrayList;
+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.Set;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
 /**
  * Implementation of a Queue TODO use Java 5 concurrent queue
  *
@@ -73,7 +72,7 @@
    public static final int NUM_PRIORITIES = 10;
 
    private volatile long persistenceID = -1;
-   
+
    private final SimpleString name;
 
    private volatile Filter filter;
@@ -110,13 +109,13 @@
 
    private final StorageManager storageManager;
 
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private final HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private volatile boolean backup;
 
    private int consumersToFailover = -1;
 
-   public QueueImpl(final long persistenceID,                   
+   public QueueImpl(final long persistenceID,
                     final SimpleString name,
                     final Filter filter,
                     final boolean durable,
@@ -124,10 +123,10 @@
                     final ScheduledExecutorService scheduledExecutor,
                     final PostOffice postOffice,
                     final StorageManager storageManager,
-                    final HierarchicalRepository<QueueSettings> queueSettingsRepository)
+                    final HierarchicalRepository<AddressSettings> queueSettingsRepository)
    {
       this.persistenceID = persistenceID;
-      
+
       this.name = name;
 
       this.filter = filter;
@@ -157,7 +156,7 @@
    }
 
    // Bindable implementation -------------------------------------------------------------------------------------
-  
+
    public SimpleString getRoutingName()
    {
       return name;
@@ -189,9 +188,9 @@
       if (durableRef)
       {
          message.incrementDurableRefCount();
-      }      
+      }
    }
-   
+
    public void route(final ServerMessage message, final Transaction tx) throws Exception
    {
       boolean durableRef = message.isDurable() && durable;
@@ -203,7 +202,7 @@
 
       store.addSize(ref.getMemoryEstimate());
 
-      Long scheduledDeliveryTime = (Long)message.getProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
+      Long scheduledDeliveryTime = (Long) message.getProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
 
       if (scheduledDeliveryTime != null)
       {
@@ -280,7 +279,7 @@
          message.incrementDurableRefCount();
       }
 
-      Long scheduledDeliveryTime = (Long)message.getProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
+      Long scheduledDeliveryTime = (Long) message.getProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
 
       if (scheduledDeliveryTime != null)
       {
@@ -327,7 +326,7 @@
    {
       persistenceID = id;
    }
-   
+
    public Filter getFilter()
    {
       return filter;
@@ -523,9 +522,9 @@
       getRefsOperation(tx).addAck(ref);
    }
 
-   private final RefsOperation getRefsOperation(final Transaction tx)
+   final RefsOperation getRefsOperation(final Transaction tx)
    {
-      RefsOperation oper = (RefsOperation)tx.getProperty(TransactionPropertyIndexes.REFS_OPERATION);
+      RefsOperation oper = (RefsOperation) tx.getProperty(TransactionPropertyIndexes.REFS_OPERATION);
 
       if (oper == null)
       {
@@ -1021,9 +1020,9 @@
          storageManager.updateDeliveryCount(reference);
       }
 
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(name.toString());
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(name.toString());
 
-      int maxDeliveries = queueSettings.getMaxDeliveryAttempts();
+      int maxDeliveries = addressSettings.getMaxDeliveryAttempts();
 
       if (maxDeliveries > 0 && reference.getDeliveryCount() >= maxDeliveries)
       {
@@ -1035,7 +1034,7 @@
       }
       else
       {
-         long redeliveryDelay = queueSettings.getRedeliveryDelay();
+         long redeliveryDelay = addressSettings.getRedeliveryDelay();
 
          if (redeliveryDelay > 0)
          {
@@ -1248,7 +1247,7 @@
    {
       ServerMessage message = ref.getMessage();
 
-      QueueImpl queue = (QueueImpl)ref.getQueue();
+      QueueImpl queue = (QueueImpl) ref.getQueue();
 
       boolean durableRef = message.isDurable() && queue.durable;
 
@@ -1294,6 +1293,95 @@
       }
    }
 
+   void postRollback(LinkedList<MessageReference> refs) throws Exception
+   {
+      synchronized (this)
+      {
+         for (MessageReference ref : refs)
+         {
+            ServerMessage msg = ref.getMessage();
+
+            if (!scheduledDeliveryHandler.checkAndSchedule(ref, backup))
+            {
+               messageReferences.addFirst(ref, msg.getPriority());
+            }
+         }
+
+         deliver();
+      }
+   }
+
+   final void discardMessage(MessageReference ref, Transaction tx) throws Exception
+   {
+      deliveringCount.decrementAndGet();
+      PagingStore store = pagingManager.getPageStore(ref.getMessage().getDestination());
+      store.addSize(-ref.getMemoryEstimate());
+      QueueImpl queue = (QueueImpl) ref.getQueue();
+      ServerMessage msg = ref.getMessage();
+      boolean durableRef = msg.isDurable() && queue.isDurable();
+
+      if (durableRef)
+      {
+         int count = msg.decrementDurableRefCount();
+
+         if (count == 0)
+         {
+            if (tx == null)
+            {
+               storageManager.deleteMessage(msg.getMessageID());
+            }
+            else
+            {
+               storageManager.deleteMessageTransactional(tx.getID(), getPersistenceID(), msg.getMessageID());
+            }
+         }
+      }
+   }
+
+   final void discardMessage(Long id, Transaction tx) throws Exception
+   {
+      RefsOperation oper = getRefsOperation(tx);
+      Iterator<MessageReference> iterator = oper.refsToAdd.iterator();
+
+      while (iterator.hasNext())
+      {
+         MessageReference ref = iterator.next();
+
+         if (ref.getMessage().getMessageID() == id)
+         {
+            iterator.remove();
+            discardMessage(ref, tx);
+            break;
+         }
+      }
+
+   }
+
+
+   final void rediscardMessage(long id, Transaction tx) throws Exception
+   {
+      RefsOperation oper = getRefsOperation(tx);
+      Iterator<MessageReference> iterator = oper.refsToAdd.iterator();
+
+      while (iterator.hasNext())
+      {
+         MessageReference ref = iterator.next();
+
+         if (ref.getMessage().getMessageID() == id)
+         {
+            iterator.remove();
+            rediscardMessage(ref);
+            break;
+         }
+      }
+   }
+
+   final void rediscardMessage(MessageReference ref) throws Exception
+   {
+      deliveringCount.decrementAndGet();
+      PagingStore store = pagingManager.getPageStore(ref.getMessage().getDestination());
+      store.addSize(-ref.getMemoryEstimate());
+   }
    // Inner classes
    // --------------------------------------------------------------------------
 
@@ -1349,7 +1437,7 @@
                {
                   toCancel = new LinkedList<MessageReference>();
 
-                  queueMap.put((QueueImpl)ref.getQueue(), toCancel);
+                  queueMap.put((QueueImpl) ref.getQueue(), toCancel);
                }
 
                toCancel.addFirst(ref);
@@ -1364,17 +1452,7 @@
 
             synchronized (queue)
             {
-               for (MessageReference ref : refs)
-               {
-                  ServerMessage msg = ref.getMessage();
-
-                  if (!scheduledDeliveryHandler.checkAndSchedule(ref, backup))
-                  {
-                     queue.messageReferences.addFirst(ref, msg.getPriority());
-                  }
-               }
-
-               queue.deliver();
+               queue.postRollback(refs);
             }
          }
       }

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -91,7 +91,7 @@
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.server.ServerSession;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.core.transaction.Transaction;
 import org.jboss.messaging.core.transaction.impl.TransactionImpl;
@@ -149,7 +149,7 @@
 
    private final StorageManager storageManager;
 
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private final HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private final ResourceManager resourceManager;
 
@@ -199,7 +199,7 @@
                             final RemotingConnection remotingConnection,
                             final StorageManager storageManager,
                             final PostOffice postOffice,
-                            final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                            final HierarchicalRepository<AddressSettings> queueSettingsRepository,
                             final ResourceManager resourceManager,
                             final SecurityStore securityStore,
                             final Executor executor,
@@ -1386,7 +1386,7 @@
             // We consume a copy of the queue - TODO - this is a temporary measure
             // and will disappear once we can provide a proper iterator on the queue
 
-            theQueue = queueFactory.createQueue(-1, name, filter, false, true);
+            theQueue = queueFactory.createQueue(-1, binding.getAddress(), name, filter, false, true);
 
             // There's no need for any special locking since the list method is synchronized
             List<MessageReference> refs = ((Queue)binding.getBindable()).list(filter);
@@ -1490,7 +1490,7 @@
             filter = new FilterImpl(filterString);
          }
 
-         final Queue queue = queueFactory.createQueue(-1, name, filter, durable, temporary);
+         final Queue queue = queueFactory.createQueue(-1, address, name, filter, durable, temporary);
 
          binding = new LocalQueueBinding(address, queue);
 

Added: trunk/src/main/org/jboss/messaging/core/server/impl/SoloQueueImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/SoloQueueImpl.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/SoloQueueImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -0,0 +1,195 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * 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.messaging.core.server.impl;
+
+import org.jboss.messaging.core.filter.Filter;
+import org.jboss.messaging.core.message.impl.MessageImpl;
+import org.jboss.messaging.core.persistence.StorageManager;
+import org.jboss.messaging.core.postoffice.PostOffice;
+import org.jboss.messaging.core.server.MessageReference;
+import org.jboss.messaging.core.server.ServerMessage;
+import org.jboss.messaging.core.settings.HierarchicalRepository;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
+import org.jboss.messaging.core.transaction.Transaction;
+import org.jboss.messaging.util.SimpleString;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ScheduledExecutorService;
+
+/**
+ * A queue that will discard messages if a newer message with the same MessageImpl.HDR_SOLE_MESSAGE property value.
+ * @author <a href="mailto:andy.taylor at jboss.org">Andy Taylor</a>
+ */
+public class SoloQueueImpl extends QueueImpl
+{
+   private final Map<SimpleString, ServerMessage> map = new HashMap<SimpleString, ServerMessage>();
+
+   public SoloQueueImpl(long persistenceID, SimpleString name, Filter filter, boolean durable, boolean temporary, ScheduledExecutorService scheduledExecutor, PostOffice postOffice, StorageManager storageManager, HierarchicalRepository<AddressSettings> queueSettingsRepository)
+   {
+      super(persistenceID, name, filter, durable, temporary, scheduledExecutor, postOffice, storageManager, queueSettingsRepository);
+   }
+
+   public void route(ServerMessage message, Transaction tx) throws Exception
+   {
+      SimpleString prop = (SimpleString) message.getProperty(MessageImpl.HDR_SOLE_MESSAGE);
+      if (prop != null)
+      {
+         synchronized (map)
+         {
+            ServerMessage msg = map.put(prop, message);
+            //if an older message existed then we discard it
+            if (msg != null)
+            {
+               MessageReference ref;
+               if (tx != null)
+               {
+                  discardMessage(msg.getMessageID(), tx);
+               }
+               else
+               {
+                  ref = removeReferenceWithID(msg.getMessageID());
+                  if (ref != null)
+                  {
+                     QueueImpl queue = (QueueImpl) ref.getQueue();
+                     queue.discardMessage(ref, tx);
+                  }
+               }
+
+            }
+         }
+      }
+      super.route(message, tx);
+   }
+
+   public MessageReference reroute(ServerMessage message, Transaction tx) throws Exception
+   {
+      SimpleString prop = (SimpleString) message.getProperty(MessageImpl.HDR_SOLE_MESSAGE);
+      if (prop != null)
+      {
+         synchronized (map)
+         {
+            ServerMessage msg = map.put(prop, message);
+            if (msg != null)
+            {
+               if (tx != null)
+               {
+                  rediscardMessage(msg.getMessageID(), tx);
+               }
+               else
+               {
+                  MessageReference ref = removeReferenceWithID(msg.getMessageID());
+                  rediscardMessage(ref);
+               }
+            }
+         }
+      }
+      return super.reroute(message, tx);
+   }
+
+
+
+   public void acknowledge(MessageReference ref) throws Exception
+   {
+      super.acknowledge(ref);
+      SimpleString prop = (SimpleString) ref.getMessage().getProperty(MessageImpl.HDR_SOLE_MESSAGE);
+      if (prop != null)
+      {
+         synchronized (map)
+         {
+            ServerMessage serverMessage = map.get(prop);
+            if (serverMessage != null && ref.getMessage().getMessageID() == serverMessage.getMessageID())
+            {
+               map.remove(prop);
+            }
+         }
+      }
+   }
+
+
+   public void cancel(Transaction tx, MessageReference ref) throws Exception
+   {
+      SimpleString prop = (SimpleString) ref.getMessage().getProperty(MessageImpl.HDR_SOLE_MESSAGE);
+      if (prop != null)
+      {
+         synchronized (map)
+         {
+            ServerMessage msg = map.get(prop);
+            if (msg.getMessageID() == ref.getMessage().getMessageID())
+            {
+               super.cancel(tx, ref);
+            }
+            else
+            {
+               discardMessage(ref, tx);
+            }
+         }
+      }
+      else
+      {
+         super.cancel(tx, ref);
+      }
+   }
+
+   void postRollback(LinkedList<MessageReference> refs) throws Exception
+   {
+      List<MessageReference> refsToDiscard = new ArrayList<MessageReference>();
+      List<SimpleString> refsToClear = new ArrayList<SimpleString>();
+      synchronized (map)
+      {
+         for (MessageReference ref : refs)
+         {
+            SimpleString prop = (SimpleString) ref.getMessage().getProperty(MessageImpl.HDR_SOLE_MESSAGE);
+            if (prop != null)
+            {
+               ServerMessage msg = map.get(prop);
+               if (msg != null)
+               {
+                  if (msg.getMessageID() != ref.getMessage().getMessageID())
+                  {
+                     refsToDiscard.add(ref);
+                  }
+                  else
+                  {
+                     refsToClear.add(prop);
+                  }
+               }
+            }
+         }
+         for (SimpleString simpleString : refsToClear)
+         {
+            map.remove(simpleString);
+         }
+      }
+      for (MessageReference ref : refsToDiscard)
+      {
+         refs.remove(ref);
+         discardMessage(ref, null);
+      }
+      super.postRollback(refs);
+   }
+
+
+}

Copied: trunk/src/main/org/jboss/messaging/core/settings/impl/AddressSettings.java (from rev 5794, trunk/src/main/org/jboss/messaging/core/settings/impl/QueueSettings.java)
===================================================================
--- trunk/src/main/org/jboss/messaging/core/settings/impl/AddressSettings.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/settings/impl/AddressSettings.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -0,0 +1,260 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * 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.messaging.core.settings.impl;
+
+import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.server.Distributor;
+import org.jboss.messaging.core.server.impl.RoundRobinDistributor;
+import org.jboss.messaging.core.settings.Mergeable;
+import org.jboss.messaging.util.SimpleString;
+
+/**
+ * Configuration settings that are applied on the address level
+ * 
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ * @author <a href="tim.fox at jboss.com">Tim Fox</a>
+ */
+public class AddressSettings implements Mergeable<AddressSettings>
+{
+   private static Logger log = Logger.getLogger(AddressSettings.class);
+
+   /**
+    * defaults used if null, this allows merging
+    */
+   public static final Class<?> DEFAULT_DISTRIBUTION_POLICY_CLASS = new RoundRobinDistributor().getClass();
+
+   public static final Boolean DEFAULT_CLUSTERED = false;
+
+   public static final Integer DEFAULT_MAX_SIZE_BYTES = -1;
+
+   public static final Boolean DEFAULT_DROP_MESSAGES_WHEN_FULL = Boolean.FALSE;
+
+   public static final Integer DEFAULT_MAX_DELIVERY_ATTEMPTS = 10;
+
+   public static final Integer DEFAULT_MESSAGE_COUNTER_HISTORY_DAY_LIMIT = 0;
+
+   public static final Long DEFAULT_REDELIVER_DELAY = 0L;
+
+   public static final Boolean DEFAULT_SOLOQUEUE = false;
+
+   private Boolean clustered = null;
+
+   private Integer maxSizeBytes = null;
+
+   private Integer pageSizeBytes = null;
+
+   private Boolean dropMessagesWhenFull = null;
+
+   private String distributionPolicyClass = null;
+
+   private Integer maxDeliveryAttempts = null;
+
+   private Integer messageCounterHistoryDayLimit = null;
+
+   private Long redeliveryDelay = null;
+
+   private SimpleString deadLetterAddress = null;
+
+   private SimpleString ExpiryAddress = null;
+
+   private Boolean soloQueue = null;
+
+   public Boolean isSoloQueue()
+   {
+      return soloQueue != null?soloQueue:DEFAULT_SOLOQUEUE;
+   }
+
+   public void setSoloQueue(Boolean soloQueue)
+   {
+      this.soloQueue = soloQueue;
+   }
+
+   public Boolean isClustered()
+   {
+      return clustered != null ? clustered : DEFAULT_CLUSTERED;
+   }
+
+   public void setClustered(Boolean clustered)
+   {
+      this.clustered = clustered;
+   }
+
+   public Integer getPageSizeBytes()
+   {
+      return pageSizeBytes;
+   }
+
+   public Boolean isDropMessagesWhenFull()
+   {
+      return dropMessagesWhenFull != null ? this.dropMessagesWhenFull : DEFAULT_DROP_MESSAGES_WHEN_FULL;
+   }
+
+   public void setDropMessagesWhenFull(Boolean value)
+   {
+      this.dropMessagesWhenFull = value;
+   }
+
+   public void setPageSizeBytes(Integer pageSize)
+   {
+      this.pageSizeBytes = pageSize;
+   }
+
+   public Integer getMaxSizeBytes()
+   {
+      return maxSizeBytes != null ? maxSizeBytes : DEFAULT_MAX_SIZE_BYTES;
+   }
+
+   public void setMaxSizeBytes(Integer maxSizeBytes)
+   {
+      this.maxSizeBytes = maxSizeBytes;
+   }
+
+   public Integer getMaxDeliveryAttempts()
+   {
+      return maxDeliveryAttempts != null ? maxDeliveryAttempts : DEFAULT_MAX_DELIVERY_ATTEMPTS;
+   }
+
+   public void setMaxDeliveryAttempts(Integer maxDeliveryAttempts)
+   {
+      this.maxDeliveryAttempts = maxDeliveryAttempts;
+   }
+
+   public Integer getMessageCounterHistoryDayLimit()
+   {
+      return messageCounterHistoryDayLimit != null ? messageCounterHistoryDayLimit
+                                                  : DEFAULT_MESSAGE_COUNTER_HISTORY_DAY_LIMIT;
+   }
+
+   public void setMessageCounterHistoryDayLimit(Integer messageCounterHistoryDayLimit)
+   {
+      this.messageCounterHistoryDayLimit = messageCounterHistoryDayLimit;
+   }
+
+   public Long getRedeliveryDelay()
+   {
+      return redeliveryDelay != null ? redeliveryDelay : DEFAULT_REDELIVER_DELAY;
+   }
+
+   public void setRedeliveryDelay(Long redeliveryDelay)
+   {
+      this.redeliveryDelay = redeliveryDelay;
+   }
+
+   public String getDistributionPolicyClass()
+   {
+      return distributionPolicyClass;
+   }
+
+   public void setDistributionPolicyClass(String distributionPolicyClass)
+   {
+      this.distributionPolicyClass = distributionPolicyClass;
+   }
+
+   public SimpleString getDeadLetterAddress()
+   {
+      return deadLetterAddress;
+   }
+
+   public void setDeadLetterAddress(SimpleString deadLetterAddress)
+   {
+      this.deadLetterAddress = deadLetterAddress;
+   }
+
+   public SimpleString getExpiryAddress()
+   {
+      return ExpiryAddress;
+   }
+
+   public void setExpiryAddress(SimpleString expiryAddress)
+   {
+      ExpiryAddress = expiryAddress;
+   }
+
+   public Distributor getDistributionPolicy()
+   {
+      try
+      {
+         if (distributionPolicyClass != null)
+         {
+            return (Distributor)getClass().getClassLoader().loadClass(distributionPolicyClass).newInstance();
+         }
+         else
+         {
+            return (Distributor)DEFAULT_DISTRIBUTION_POLICY_CLASS.newInstance();
+         }
+      }
+      catch (Exception e)
+      {
+         throw new IllegalArgumentException("Error instantiating distribution policy '" + e + " '");
+      }
+   }
+
+   /**
+    * merge 2 objects in to 1
+    * @param merged
+    */
+   public void merge(AddressSettings merged)
+   {
+      if (clustered == null)
+      {
+         clustered = merged.clustered;
+      }
+      if (maxDeliveryAttempts == null)
+      {
+         maxDeliveryAttempts = merged.maxDeliveryAttempts;
+      }
+      if (dropMessagesWhenFull == null)
+      {
+         dropMessagesWhenFull = merged.dropMessagesWhenFull;
+      }
+      if (maxSizeBytes == null)
+      {
+         maxSizeBytes = merged.maxSizeBytes;
+      }
+      if (pageSizeBytes == null)
+      {
+         pageSizeBytes = merged.getPageSizeBytes();
+      }
+      if (messageCounterHistoryDayLimit == null)
+      {
+         messageCounterHistoryDayLimit = merged.messageCounterHistoryDayLimit;
+      }
+      if (redeliveryDelay == null)
+      {
+         redeliveryDelay = merged.redeliveryDelay;
+      }
+      if (distributionPolicyClass == null)
+      {
+         distributionPolicyClass = merged.distributionPolicyClass;
+      }
+      if (deadLetterAddress == null)
+      {
+         deadLetterAddress = merged.deadLetterAddress;
+      }
+      if (ExpiryAddress == null)
+      {
+         ExpiryAddress = merged.ExpiryAddress;
+      }
+   }
+
+}

Modified: trunk/src/main/org/jboss/messaging/core/transaction/impl/ResourceManagerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/transaction/impl/ResourceManagerImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/core/transaction/impl/ResourceManagerImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -36,11 +36,7 @@
 import javax.transaction.xa.Xid;
 
 import org.jboss.messaging.core.logging.Logger;
-import org.jboss.messaging.core.persistence.StorageManager;
-import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.MessagingComponent;
-import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.core.transaction.Transaction;
 

Modified: trunk/src/main/org/jboss/messaging/jms/server/impl/JMSServerManagerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/server/impl/JMSServerManagerImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/jms/server/impl/JMSServerManagerImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -44,7 +44,7 @@
 import org.jboss.messaging.core.server.MessagingServer;
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.jms.JBossQueue;
 import org.jboss.messaging.jms.JBossTopic;
 import org.jboss.messaging.jms.client.JBossConnectionFactory;
@@ -82,7 +82,7 @@
 
    private final StorageManager storageManager;
 
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private final HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private final JMSManagementService managementService;
 
@@ -101,14 +101,14 @@
       return new JMSServerManagerImpl(control,
                                       server.getPostOffice(),
                                       server.getStorageManager(),
-                                      server.getQueueSettingsRepository(),
+                                      server.getAddressSettingsRepository(),
                                       jmsManagementService);
    }
 
    public JMSServerManagerImpl(final MessagingServerControlMBean server,
                                final PostOffice postOffice,
                                final StorageManager storageManager,
-                               final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                               final HierarchicalRepository<AddressSettings> queueSettingsRepository,
                                final JMSManagementService managementService)
    {
       messagingServer = server;

Modified: trunk/src/main/org/jboss/messaging/jms/server/management/JMSManagementService.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/server/management/JMSManagementService.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/jms/server/management/JMSManagementService.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -28,7 +28,7 @@
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.jms.JBossQueue;
 import org.jboss.messaging.jms.JBossTopic;
 import org.jboss.messaging.jms.client.JBossConnectionFactory;
@@ -51,7 +51,7 @@
                       String jndiBinding,
                       PostOffice postOffice,
                       StorageManager storageManager,
-                      HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+                      HierarchicalRepository<AddressSettings> queueSettingsRepository) throws Exception;
 
    void unregisterQueue(String name) throws Exception;
 
@@ -59,7 +59,7 @@
                       String jndiBinding,
                       PostOffice postOffice,
                       StorageManager storageManager,
-                      HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+                      HierarchicalRepository<AddressSettings> queueSettingsRepository) throws Exception;
 
    void unregisterTopic(String name) throws Exception;
 

Modified: trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSManagementServiceImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSManagementServiceImpl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSManagementServiceImpl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -36,7 +36,7 @@
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.jms.JBossQueue;
 import org.jboss.messaging.jms.JBossTopic;
 import org.jboss.messaging.jms.client.JBossConnectionFactory;
@@ -117,7 +117,7 @@
                              final String jndiBinding,
                              final PostOffice postOffice,
                              final StorageManager storageManager,
-                             HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+                             HierarchicalRepository<AddressSettings> queueSettingsRepository) throws Exception
    {
       MessageCounterManager messageCounterManager = managementService.getMessageCounterManager();
       MessageCounter counter = new MessageCounter(queue.getName(),
@@ -149,7 +149,7 @@
                              final String jndiBinding,
                              final PostOffice postOffice,
                              final StorageManager storageManager,
-                             final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+                             final HierarchicalRepository<AddressSettings> queueSettingsRepository) throws Exception
    {
       ObjectName objectName = getJMSTopicObjectName(topic.getTopicName());
       TopicControl control = new TopicControl(topic, jndiBinding, postOffice);

Modified: trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSQueueControl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSQueueControl.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSQueueControl.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -45,7 +45,7 @@
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.jms.JBossQueue;
 import org.jboss.messaging.jms.client.JBossMessage;
 import org.jboss.messaging.jms.client.SelectorTranslator;
@@ -75,7 +75,7 @@
 
    private final PostOffice postOffice;
 
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private final HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private final MessageCounter counter;
 
@@ -98,7 +98,7 @@
                           final Queue coreQueue,
                           final String jndiBinding,
                           final PostOffice postOffice,                          
-                          final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                          final HierarchicalRepository<AddressSettings> queueSettingsRepository,
                           final MessageCounter counter)
    {
       this.managedQueue = queue;
@@ -165,10 +165,10 @@
 
    public String getDeadLetterAddress()
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(getName());
-      if (queueSettings != null && queueSettings.getDeadLetterAddress() != null)
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(getName());
+      if (addressSettings != null && addressSettings.getDeadLetterAddress() != null)
       {
-         return queueSettings.getDeadLetterAddress().toString();
+         return addressSettings.getDeadLetterAddress().toString();
       }
       else
       {
@@ -178,20 +178,20 @@
 
    public void setDeadLetterAddress(String deadLetterAddress) throws Exception
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(getName());
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(getName());
 
       if (deadLetterAddress != null)
       {
-         queueSettings.setDeadLetterAddress(new SimpleString(deadLetterAddress));
+         addressSettings.setDeadLetterAddress(new SimpleString(deadLetterAddress));
       }
    }
 
    public String getExpiryAddress()
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(getName());
-      if (queueSettings != null && queueSettings.getExpiryAddress() != null)
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(getName());
+      if (addressSettings != null && addressSettings.getExpiryAddress() != null)
       {
-         return queueSettings.getExpiryAddress().toString();
+         return addressSettings.getExpiryAddress().toString();
       }
       else
       {
@@ -201,11 +201,11 @@
 
    public void setExpiryAddress(String expiryQueueName)
    {
-      QueueSettings queueSettings = queueSettingsRepository.getMatch(getName());
+      AddressSettings addressSettings = queueSettingsRepository.getMatch(getName());
 
       if (expiryQueueName != null)
       {
-         queueSettings.setExpiryAddress(new SimpleString(expiryQueueName));
+         addressSettings.setExpiryAddress(new SimpleString(expiryQueueName));
       }
    }
 

Modified: trunk/src/schemas/jbm-queues.xsd
===================================================================
--- trunk/src/schemas/jbm-queues.xsd	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/src/schemas/jbm-queues.xsd	2009-02-03 13:20:44 UTC (rev 5796)
@@ -13,7 +13,7 @@
    			<xsd:element ref="security" maxOccurs="unbounded"
    				minOccurs="0">
    			</xsd:element>
-   			<xsd:element ref="queue-settings" maxOccurs="unbounded"
+   			<xsd:element ref="address-settings" maxOccurs="unbounded"
    				minOccurs="0">
    			</xsd:element>
             <xsd:element ref="queue" maxOccurs="unbounded"
@@ -39,9 +39,9 @@
         </xsd:complexType>
    </xsd:element>
 
-   <xsd:element name="queue-settings" type="queue-settingsType"></xsd:element>
+   <xsd:element name="address-settings" type="address-settingsType"></xsd:element>
 
-   <xsd:complexType name="queue-settingsType">
+   <xsd:complexType name="address-settingsType">
    	<xsd:sequence>
         <xsd:element name="clustered" type="xsd:boolean"
             maxOccurs="1" minOccurs="0">
@@ -70,7 +70,10 @@
         <xsd:element name="message-counter-history-day-limit" type="xsd:int"
             maxOccurs="1" minOccurs="0">
         </xsd:element>
-   	</xsd:sequence>
+         <xsd:element name="solo-queue" type="xsd:boolean"
+            maxOccurs="1" minOccurs="0">
+        </xsd:element>
+      </xsd:sequence>
    	<xsd:attribute name="match" type="xsd:string" use="required"></xsd:attribute>
    </xsd:complexType>   
    

Modified: trunk/tests/jms-tests/src/org/jboss/test/messaging/tools/container/LocalTestServer.java
===================================================================
--- trunk/tests/jms-tests/src/org/jboss/test/messaging/tools/container/LocalTestServer.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/jms-tests/src/org/jboss/test/messaging/tools/container/LocalTestServer.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -53,11 +53,10 @@
 import org.jboss.messaging.core.config.TransportConfiguration;
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.postoffice.Binding;
-import org.jboss.messaging.core.postoffice.BindingType;
 import org.jboss.messaging.core.security.Role;
 import org.jboss.messaging.core.server.MessagingServer;
 import org.jboss.messaging.core.server.Queue;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.integration.bootstrap.JBMBootstrapServer;
 import org.jboss.messaging.jms.JBossDestination;
 import org.jboss.messaging.jms.server.JMSServerManager;
@@ -654,16 +653,16 @@
 
    public void addQueueSettings(String name, long redeliveryDelay)
    {
-      QueueSettings qs = getMessagingServer().getQueueSettingsRepository().getMatch("*");
-      QueueSettings newSets = new QueueSettings();
+      AddressSettings qs = getMessagingServer().getAddressSettingsRepository().getMatch("*");
+      AddressSettings newSets = new AddressSettings();
       newSets.setRedeliveryDelay(redeliveryDelay);
       newSets.merge(qs);
-      getMessagingServer().getQueueSettingsRepository().addMatch(name, newSets);
+      getMessagingServer().getAddressSettingsRepository().addMatch(name, newSets);
    }
 
    public void removeQueueSettings(String name)
    {
-      getMessagingServer().getQueueSettingsRepository().removeMatch(name);
+      getMessagingServer().getAddressSettingsRepository().removeMatch(name);
    }
 
    public InitialContext getInitialContext() throws Exception
@@ -745,8 +744,8 @@
    public void setRedeliveryDelayOnDestination(String dest, boolean queue, long delay) throws Exception
    {
       SimpleString condition = new SimpleString((queue ? "queuejms." : "topicjms.") + dest);
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setRedeliveryDelay(delay);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setRedeliveryDelay(delay);
       // FIXME we need to expose queue attributes in another way
       // getMessagingServer().getServerManagement().setQueueAttributes(condition, queueSettings);
    }

Modified: trunk/tests/src/org/jboss/messaging/tests/concurrent/server/impl/QueueTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/concurrent/server/impl/QueueTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/concurrent/server/impl/QueueTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -56,7 +56,7 @@
     */
    public void testConcurrentAddsDeliver() throws Exception
    {
-      Queue queue = queueFactory.createQueue(1, new SimpleString("queue1"), null, false, false);
+      Queue queue = queueFactory.createQueue(1, new SimpleString("address1"), new SimpleString("queue1"), null, false, false);
       
       FakeConsumer consumer = new FakeConsumer();
       

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/basic/AutoGroupClientTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/basic/AutoGroupClientTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/basic/AutoGroupClientTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -40,7 +40,7 @@
 import org.jboss.messaging.core.server.Messaging;
 import org.jboss.messaging.core.server.MessagingService;
 import org.jboss.messaging.core.server.impl.GroupingRoundRobinDistributor;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.jms.client.JBossTextMessage;
 import org.jboss.messaging.util.SimpleString;
 
@@ -54,7 +54,7 @@
    public void testGroupIdAutomaticallySet() throws Exception
    {
       final SimpleString QUEUE = new SimpleString("testGroupQueue");
-      QueueSettings qs = new QueueSettings();
+      AddressSettings qs = new AddressSettings();
       qs.setDistributionPolicyClass(GroupingRoundRobinDistributor.class.getName());
 
       Configuration conf = new ConfigurationImpl();
@@ -65,7 +65,7 @@
 
       MessagingService messagingService = Messaging.newNullStorageMessagingService(conf);
 
-      messagingService.getServer().getQueueSettingsRepository().addMatch("testGroupQueue", qs);
+      messagingService.getServer().getAddressSettingsRepository().addMatch("testGroupQueue", qs);
       messagingService.start();
 
       ClientSessionFactory sf = new ClientSessionFactoryImpl(new TransportConfiguration("org.jboss.messaging.core.remoting.impl.invm.InVMConnectorFactory"));
@@ -115,7 +115,7 @@
    public void testGroupIdAutomaticallySetMultipleProducers() throws Exception
    {
       final SimpleString QUEUE = new SimpleString("testGroupQueue");
-      QueueSettings qs = new QueueSettings();
+      AddressSettings qs = new AddressSettings();
       qs.setDistributionPolicyClass(GroupingRoundRobinDistributor.class.getName());
 
       Configuration conf = new ConfigurationImpl();
@@ -126,7 +126,7 @@
 
       MessagingService messagingService = Messaging.newNullStorageMessagingService(conf);
 
-      messagingService.getServer().getQueueSettingsRepository().addMatch("testGroupQueue", qs);
+      messagingService.getServer().getAddressSettingsRepository().addMatch("testGroupQueue", qs);
       messagingService.start();
 
       ClientSessionFactory sf = new ClientSessionFactoryImpl(new TransportConfiguration("org.jboss.messaging.core.remoting.impl.invm.InVMConnectorFactory"));
@@ -185,7 +185,7 @@
    public void testGroupIdAutomaticallyNotSet() throws Exception
    {
       final SimpleString QUEUE = new SimpleString("testGroupQueue");
-      QueueSettings qs = new QueueSettings();
+      AddressSettings qs = new AddressSettings();
       qs.setDistributionPolicyClass(GroupingRoundRobinDistributor.class.getName());
       Configuration conf = new ConfigurationImpl();
 
@@ -194,7 +194,7 @@
       conf.getAcceptorConfigurations().add(new TransportConfiguration("org.jboss.messaging.core.remoting.impl.invm.InVMAcceptorFactory"));
 
       MessagingService messagingService = Messaging.newNullStorageMessagingService(conf);
-      messagingService.getServer().getQueueSettingsRepository().addMatch("testGroupQueue", qs);
+      messagingService.getServer().getAddressSettingsRepository().addMatch("testGroupQueue", qs);
       messagingService.start();
 
       ClientSessionFactory sf = new ClientSessionFactoryImpl(new TransportConfiguration("org.jboss.messaging.core.remoting.impl.invm.InVMConnectorFactory"));

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/chunkmessage/MessageChunkTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/chunkmessage/MessageChunkTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/chunkmessage/MessageChunkTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -46,7 +46,7 @@
 import org.jboss.messaging.core.remoting.impl.RemotingConnectionImpl;
 import org.jboss.messaging.core.remoting.impl.RemotingServiceImpl;
 import org.jboss.messaging.core.remoting.spi.MessagingBuffer;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.integration.chunkmessage.mock.MockConnector;
 import org.jboss.messaging.tests.integration.chunkmessage.mock.MockConnectorFactory;
 import org.jboss.messaging.util.DataConstants;
@@ -87,7 +87,7 @@
 
       Configuration config = createDefaultConfig();
 
-      messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -113,7 +113,7 @@
       config.setPagingMaxGlobalSizeBytes(20 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -631,7 +631,7 @@
       config.setPagingMaxGlobalSizeBytes(20 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      messagingService = createService(realFiles, config, new HashMap<String, QueueSettings>());
+      messagingService = createService(realFiles, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -695,7 +695,7 @@
          {
             messagingService.stop();
 
-            messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+            messagingService = createService(true, config, new HashMap<String, AddressSettings>());
             messagingService.start();
 
             sf = createInVMFactory();

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/paging/PageCrashTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/paging/PageCrashTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/paging/PageCrashTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -57,7 +57,7 @@
 import org.jboss.messaging.core.server.MessagingService;
 import org.jboss.messaging.core.server.impl.MessagingServerImpl;
 import org.jboss.messaging.core.server.impl.MessagingServiceImpl;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.ServiceTestBase;
 import org.jboss.messaging.util.OrderedExecutorFactory;
 import org.jboss.messaging.util.SimpleString;
@@ -107,7 +107,7 @@
       config.setPagingMaxGlobalSizeBytes(100 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      MessagingService messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      MessagingService messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -285,7 +285,7 @@
          return new PagingManagerImpl(new FailurePagingStoreFactoryNIO(super.getConfiguration().getPagingDirectory(),
                                                                        super.getConfiguration().getPagingMaxThreads()),
                                       super.getStorageManager(),
-                                      super.getQueueSettingsRepository(),
+                                      super.getAddressSettingsRepository(),
                                       super.getConfiguration().getPagingMaxGlobalSizeBytes(),
                                       super.getConfiguration().getPagingDefaultSize(),
                                       super.getConfiguration().isJournalSyncNonTransactional(),
@@ -315,7 +315,7 @@
          // Public --------------------------------------------------------
 
          @Override
-         public synchronized PagingStore newStore(final SimpleString destinationName, final QueueSettings settings) throws Exception
+         public synchronized PagingStore newStore(final SimpleString destinationName, final AddressSettings settings) throws Exception
          {
             Field factoryField = PagingStoreFactoryNIO.class.getDeclaredField("executorFactory");
             factoryField.setAccessible(true);
@@ -341,11 +341,11 @@
              * @param fileFactory
              * @param storeFactory
              * @param storeName
-             * @param queueSettings
+             * @param addressSettings
              * @param executor
              */
             public FailingPagingStore(final SimpleString storeName,
-                                      final QueueSettings queueSettings,
+                                      final AddressSettings addressSettings,
                                       final Executor executor)
             {
                super(getPostOffice().getPagingManager(),
@@ -354,7 +354,7 @@
                      null,
                      FailurePagingStoreFactoryNIO.this,
                      storeName,
-                     queueSettings,
+                     addressSettings,
                      executor);
             }
 

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/paging/PagingManagerIntegrationTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/paging/PagingManagerIntegrationTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/paging/PagingManagerIntegrationTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -38,7 +38,7 @@
 import org.jboss.messaging.core.server.impl.ServerMessageImpl;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
 import org.jboss.messaging.core.settings.impl.HierarchicalObjectRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.RandomUtil;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
@@ -64,8 +64,8 @@
    public void testPagingManager() throws Exception
    {
       
-      HierarchicalRepository<QueueSettings> queueSettings = new HierarchicalObjectRepository<QueueSettings>();
-      queueSettings.setDefault(new QueueSettings());
+      HierarchicalRepository<AddressSettings> queueSettings = new HierarchicalObjectRepository<AddressSettings>();
+      queueSettings.setDefault(new AddressSettings());
       
       PagingManagerImpl managerImpl = new PagingManagerImpl(new PagingStoreFactoryNIO(getPageDir(), 10),
                                                             new NullStorageManager(),

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/paging/PagingServiceIntegrationTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/paging/PagingServiceIntegrationTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/paging/PagingServiceIntegrationTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -39,7 +39,7 @@
 import org.jboss.messaging.core.remoting.spi.MessagingBuffer;
 import org.jboss.messaging.core.server.MessagingService;
 import org.jboss.messaging.core.server.Queue;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.ServiceTestBase;
 import org.jboss.messaging.util.DataConstants;
 import org.jboss.messaging.util.SimpleString;
@@ -84,7 +84,7 @@
       config.setPagingMaxGlobalSizeBytes(100 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      MessagingService messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      MessagingService messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -138,7 +138,7 @@
 
          messagingService.stop();
 
-         messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+         messagingService = createService(true, config, new HashMap<String, AddressSettings>());
          messagingService.start();
 
          sf = createInVMFactory();
@@ -212,7 +212,7 @@
       config.setPagingMaxGlobalSizeBytes(100 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      MessagingService messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      MessagingService messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -352,7 +352,7 @@
       config.setPagingMaxGlobalSizeBytes(100 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      MessagingService messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      MessagingService messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -415,7 +415,7 @@
 
             messagingService.stop();
 
-            messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+            messagingService = createService(true, config, new HashMap<String, AddressSettings>());
             messagingService.start();
 
             sf = createInVMFactory();
@@ -484,7 +484,7 @@
       config.setPagingMaxGlobalSizeBytes(100 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      MessagingService messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      MessagingService messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -563,7 +563,7 @@
       config.setPagingMaxGlobalSizeBytes(100 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      MessagingService messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      MessagingService messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -676,9 +676,9 @@
 
       config.setPagingDefaultSize(10 * 1024);
 
-      HashMap<String, QueueSettings> settings = new HashMap<String, QueueSettings>();
+      HashMap<String, AddressSettings> settings = new HashMap<String, AddressSettings>();
 
-      QueueSettings set = new QueueSettings();
+      AddressSettings set = new AddressSettings();
       set.setDropMessagesWhenFull(true);
       if (!global)
       {
@@ -842,7 +842,7 @@
       config.setPagingMaxGlobalSizeBytes(100 * 1024);
       config.setPagingDefaultSize(10 * 1024);
 
-      MessagingService messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+      MessagingService messagingService = createService(true, config, new HashMap<String, AddressSettings>());
 
       messagingService.start();
 
@@ -886,7 +886,7 @@
 
          messagingService.stop();
 
-         messagingService = createService(true, config, new HashMap<String, QueueSettings>());
+         messagingService = createService(true, config, new HashMap<String, AddressSettings>());
          messagingService.start();
 
          sf = createInVMFactory();

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/queue/DeadLetterAddressTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/queue/DeadLetterAddressTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/queue/DeadLetterAddressTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -40,7 +40,7 @@
 import org.jboss.messaging.core.server.Messaging;
 import org.jboss.messaging.core.server.MessagingService;
 import org.jboss.messaging.core.server.Queue;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.impl.XidImpl;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
@@ -59,10 +59,10 @@
       Xid xid = new XidImpl("bq".getBytes(), 0, "gt".getBytes());
       SimpleString dla = new SimpleString("DLA");
       SimpleString qName = new SimpleString("q1");
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setMaxDeliveryAttempts(1);
-      queueSettings.setDeadLetterAddress(dla);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setMaxDeliveryAttempts(1);
+      addressSettings.setDeadLetterAddress(dla);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), addressSettings);
       SimpleString dlq = new SimpleString("DLQ1");
       clientSession.createQueue(dla, dlq, null, false, false);
       clientSession.createQueue(qName, qName, null, false, false);
@@ -92,10 +92,10 @@
       Xid xid = new XidImpl("bq".getBytes(), 0, "gt".getBytes());
       SimpleString dla = new SimpleString("DLA");
       SimpleString qName = new SimpleString("q1");
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setMaxDeliveryAttempts(1);
-      queueSettings.setDeadLetterAddress(dla);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setMaxDeliveryAttempts(1);
+      addressSettings.setDeadLetterAddress(dla);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), addressSettings);
       SimpleString dlq = new SimpleString("DLQ1");
       SimpleString dlq2 = new SimpleString("DLQ2");
       clientSession.createQueue(dla, dlq, null, false, false);
@@ -135,9 +135,9 @@
    {
       Xid xid = new XidImpl("bq".getBytes(), 0, "gt".getBytes());
       SimpleString qName = new SimpleString("q1");
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setMaxDeliveryAttempts(1);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setMaxDeliveryAttempts(1);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), addressSettings);
       clientSession.createQueue(qName, qName, null, false, false);
       ClientProducer producer = clientSession.createProducer(qName);
       producer.send(createTextMessage("heyho!", clientSession));
@@ -163,10 +163,10 @@
       Xid xid = new XidImpl("bq".getBytes(), 0, "gt".getBytes());
       SimpleString dla = new SimpleString("DLA");
       SimpleString qName = new SimpleString("q1");
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setMaxDeliveryAttempts(MAX_DELIVERIES);
-      queueSettings.setDeadLetterAddress(dla);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setMaxDeliveryAttempts(MAX_DELIVERIES);
+      addressSettings.setDeadLetterAddress(dla);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), addressSettings);
       SimpleString dlq = new SimpleString("DLQ1");
       clientSession.createQueue(dla, dlq, null, false, false);
       clientSession.createQueue(qName, qName, null, false, false);

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/queue/ExpiryAddressTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/queue/ExpiryAddressTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/queue/ExpiryAddressTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -35,7 +35,7 @@
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.server.Messaging;
 import org.jboss.messaging.core.server.MessagingService;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
 
@@ -55,9 +55,9 @@
       SimpleString ea = new SimpleString("EA");
       SimpleString qName = new SimpleString("q1");
       SimpleString eq = new SimpleString("EA1");
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setExpiryAddress(ea);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setExpiryAddress(ea);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), addressSettings);
       clientSession.createQueue(ea, eq, null, false, false);
       clientSession.createQueue(qName, qName, null, false, false);
       
@@ -90,9 +90,9 @@
       SimpleString qName = new SimpleString("q1");
       SimpleString eq = new SimpleString("EQ1");
       SimpleString eq2 = new SimpleString("EQ2");
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setExpiryAddress(ea);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setExpiryAddress(ea);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), addressSettings);
       clientSession.createQueue(ea, eq, null, false, false);
       clientSession.createQueue(ea, eq2, null, false, false);
       clientSession.createQueue(qName, qName, null, false, false);
@@ -173,9 +173,9 @@
       final int NUM_MESSAGES = 5;
       SimpleString ea = new SimpleString("DLA");
       SimpleString qName = new SimpleString("q1");
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setExpiryAddress(ea);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setExpiryAddress(ea);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), addressSettings);
       SimpleString eq = new SimpleString("EA1");
       clientSession.createQueue(ea, eq, null, false, false);
       clientSession.createQueue(qName, qName, null, false, false);

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/queue/ExpiryRunnerTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/queue/ExpiryRunnerTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/queue/ExpiryRunnerTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -42,7 +42,7 @@
 import org.jboss.messaging.core.server.Messaging;
 import org.jboss.messaging.core.server.MessagingService;
 import org.jboss.messaging.core.server.Queue;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
 
@@ -93,9 +93,9 @@
    {
       ClientProducer producer = clientSession.createProducer(qName);
       clientSession.createQueue(qName2, qName2, null, false, false);
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setExpiryAddress(expiryAddress);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName2.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setExpiryAddress(expiryAddress);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName2.toString(), addressSettings);
       ClientProducer producer2 = clientSession.createProducer(qName2);
       int numMessages = 100;
       long expiration = System.currentTimeMillis();
@@ -191,9 +191,9 @@
    public void testExpireToMultipleQueues() throws Exception
    {
       clientSession.createQueue(qName, qName2, null, false, false);
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setExpiryAddress(expiryAddress);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName2.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setExpiryAddress(expiryAddress);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName2.toString(), addressSettings);
       ClientProducer producer = clientSession.createProducer(qName);
       int numMessages = 100;
       long expiration = System.currentTimeMillis();
@@ -303,10 +303,10 @@
       clientSession.createQueue(qName, qName, null, false, false);
       expiryAddress = new SimpleString("EA");
       expiryQueue = new SimpleString("expiryQ");
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setExpiryAddress(expiryAddress);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), queueSettings);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName2.toString(), queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setExpiryAddress(expiryAddress);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), addressSettings);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName2.toString(), addressSettings);
       clientSession.createQueue(expiryAddress, expiryQueue, null, false, false);
    }
 

Added: trunk/tests/src/org/jboss/messaging/tests/integration/queue/FakeStorageManager.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/queue/FakeStorageManager.java	                        (rev 0)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/queue/FakeStorageManager.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -0,0 +1,68 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * 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.messaging.tests.integration.queue;
+
+import org.jboss.messaging.core.persistence.impl.nullpm.NullStorageManager;
+import org.jboss.messaging.core.server.ServerMessage;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:andy.taylor at jboss.org">Andy Taylor</a>
+ */
+public class FakeStorageManager extends NullStorageManager
+{
+   List<Long> messageIds = new ArrayList<Long>();
+
+   List<Long> ackIds = new ArrayList<Long>();
+
+   public void storeMessage(ServerMessage message) throws Exception
+   {
+      messageIds.add(message.getMessageID());
+   }
+
+   public void storeMessageTransactional(long txID, ServerMessage message) throws Exception
+   {
+      messageIds.add(message.getMessageID());
+   }
+
+   public void deleteMessageTransactional(long txID, long queueID, long messageID) throws Exception
+   {
+      messageIds.remove(messageID);
+   }
+
+   public void deleteMessage(long messageID) throws Exception
+   {
+      messageIds.remove(messageID);
+   }
+
+   public void storeAcknowledge(long queueID, long messageID) throws Exception
+   {
+      ackIds.add(messageID);
+   }
+
+   public void storeAcknowledgeTransactional(long txID, long queueID, long messageiD) throws Exception
+   {
+      ackIds.add(messageiD);
+   }
+}

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/queue/MessageGroupingTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/queue/MessageGroupingTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/queue/MessageGroupingTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -42,7 +42,7 @@
 import org.jboss.messaging.core.server.Messaging;
 import org.jboss.messaging.core.server.MessagingService;
 import org.jboss.messaging.core.server.impl.GroupingRoundRobinDistributor;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.impl.XidImpl;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
@@ -555,9 +555,9 @@
       // start the server
       messagingService.start();
 
-      QueueSettings qs = new QueueSettings();
+      AddressSettings qs = new AddressSettings();
       qs.setDistributionPolicyClass(GroupingRoundRobinDistributor.class.getName());
-      messagingService.getServer().getQueueSettingsRepository().addMatch(qName.toString(), qs);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(qName.toString(), qs);
       // then we create a client as normal
       ClientSessionFactory sessionFactory = new ClientSessionFactoryImpl(new TransportConfiguration(INVM_CONNECTOR_FACTORY));
       clientSession = sessionFactory.createSession(false, true, true);

Added: trunk/tests/src/org/jboss/messaging/tests/integration/queue/SoloQueueRecoveryTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/queue/SoloQueueRecoveryTest.java	                        (rev 0)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/queue/SoloQueueRecoveryTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -0,0 +1,232 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * 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.messaging.tests.integration.queue;
+
+import org.jboss.messaging.core.client.ClientConsumer;
+import org.jboss.messaging.core.client.ClientMessage;
+import org.jboss.messaging.core.client.ClientProducer;
+import org.jboss.messaging.core.client.ClientSession;
+import org.jboss.messaging.core.client.ClientSessionFactory;
+import org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl;
+import org.jboss.messaging.core.config.TransportConfiguration;
+import org.jboss.messaging.core.config.impl.ConfigurationImpl;
+import org.jboss.messaging.core.exception.MessagingException;
+import org.jboss.messaging.core.message.impl.MessageImpl;
+import org.jboss.messaging.core.server.MessagingService;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
+import org.jboss.messaging.core.transaction.impl.XidImpl;
+import org.jboss.messaging.tests.util.ServiceTestBase;
+import org.jboss.messaging.util.SimpleString;
+
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+/**
+ * @author <a href="mailto:andy.taylor at jboss.org">Andy Taylor</a>
+ */
+public class SoloQueueRecoveryTest extends ServiceTestBase
+{
+   private MessagingService messagingService;
+
+   private ClientSession clientSession;
+
+   private SimpleString address = new SimpleString("SoloQueueTestAddress");
+
+   private SimpleString qName1 = new SimpleString("SoloQueueTestQ1");
+
+   private ClientSession clientSessionXa;
+
+   private ConfigurationImpl configuration;
+
+   private AddressSettings qs;
+
+   public void testMultipleMessagesAfterRecovery() throws Exception
+   {
+      Xid xid = new XidImpl("bq1".getBytes(), 4, "gtid1".getBytes());
+      ClientProducer producer = clientSessionXa.createProducer(address, -1, true, true);
+      SimpleString messageId1 = new SimpleString("SMID1");
+      SimpleString messageId2 = new SimpleString("SMID2");
+      clientSessionXa.start(xid, XAResource.TMNOFLAGS);
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId1);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId2);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId1);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId2);
+      producer.send(m1);
+      producer.send(m2);
+      producer.send(m3);
+      producer.send(m4);
+      clientSessionXa.end(xid, XAResource.TMSUCCESS);
+      clientSessionXa.prepare(xid);
+      restartServer();
+      clientSessionXa.commit(xid, true);
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+      clientSession.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m3");
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m4");
+   }
+
+   public void testManyMessagesReceivedWithRollback() throws Exception
+   {
+      Xid xid = new XidImpl("bq1".getBytes(), 4, "gtid1".getBytes());
+      ClientProducer producer = clientSession.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSessionXa.createConsumer(qName1);
+
+      SimpleString rh = new SimpleString("SMID1");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m1.setDurable(true);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m2.setDurable(true);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m3.setDurable(true);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m4.setDurable(true);
+      ClientMessage m5 = createTextMessage("m5", clientSession);
+      m5.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m5.setDurable(true);
+      ClientMessage m6 = createTextMessage("m6", clientSession);
+      m6.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m6.setDurable(true);
+      clientSessionXa.start(xid, XAResource.TMNOFLAGS);
+      clientSessionXa.start();
+      producer.send(m1);
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m1");
+      producer.send(m2);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m2");
+      producer.send(m3);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m3");
+      producer.send(m4);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m4");
+      producer.send(m5);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m5");
+      producer.send(m6);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m6");
+      clientSessionXa.end(xid, XAResource.TMSUCCESS);
+      clientSessionXa.prepare(xid);
+
+      restartServer();
+      clientSessionXa.rollback(xid);
+      consumer = clientSession.createConsumer(qName1);
+      clientSession.start();
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m6");
+      m = consumer.receive(1000);
+      assertNull(m);
+   }
+   protected void tearDown() throws Exception
+   {
+      if (clientSession != null)
+      {
+         try
+         {
+            clientSession.close();
+         }
+         catch (MessagingException e1)
+         {
+            //
+         }
+      }
+      if (messagingService != null && messagingService.isStarted())
+      {
+         try
+         {
+            messagingService.stop();
+         }
+         catch (Exception e1)
+         {
+            //
+         }
+      }
+      messagingService = null;
+      clientSession = null;
+   }
+
+   protected void setUp() throws Exception
+   {
+      clearData();
+      configuration = createFileConfig();
+      configuration.setSecurityEnabled(false);
+      TransportConfiguration transportConfig = new TransportConfiguration(INVM_ACCEPTOR_FACTORY);
+      configuration.getAcceptorConfigurations().add(transportConfig);
+      messagingService = createService(true, configuration);
+      // start the server
+      messagingService.start();
+
+      qs = new AddressSettings();
+      qs.setSoloQueue(true);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(address.toString(), qs);
+      // then we create a client as normal
+      ClientSessionFactory sessionFactory = new ClientSessionFactoryImpl(new TransportConfiguration(INVM_CONNECTOR_FACTORY));
+      sessionFactory.setBlockOnAcknowledge(true);
+      sessionFactory.setAckBatchSize(0);
+      clientSession = sessionFactory.createSession(false, true, true);
+      clientSessionXa = sessionFactory.createSession(true, false, false);
+      clientSession.createQueue(address, qName1, null, true, false);
+   }
+
+   private void restartServer() throws Exception
+   {
+      messagingService.stop();
+      messagingService = null;
+      messagingService = createService(true, configuration);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(address.toString(), qs);
+      // start the server
+      messagingService.start();
+
+      AddressSettings qs = new AddressSettings();
+      qs.setSoloQueue(true);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(address.toString(), qs);
+      // then we create a client as normal
+      ClientSessionFactory sessionFactory = new ClientSessionFactoryImpl(new TransportConfiguration(INVM_CONNECTOR_FACTORY));
+      sessionFactory.setBlockOnAcknowledge(true);
+      sessionFactory.setAckBatchSize(0);
+      clientSession = sessionFactory.createSession(false, true, true);
+      clientSessionXa = sessionFactory.createSession(true, false, false);
+   }
+}

Added: trunk/tests/src/org/jboss/messaging/tests/integration/queue/SoloQueueTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/queue/SoloQueueTest.java	                        (rev 0)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/queue/SoloQueueTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -0,0 +1,580 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * 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.messaging.tests.integration.queue;
+
+import org.jboss.messaging.core.client.ClientConsumer;
+import org.jboss.messaging.core.client.ClientMessage;
+import org.jboss.messaging.core.client.ClientProducer;
+import org.jboss.messaging.core.client.ClientSession;
+import org.jboss.messaging.core.client.ClientSessionFactory;
+import org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl;
+import org.jboss.messaging.core.config.TransportConfiguration;
+import org.jboss.messaging.core.config.impl.ConfigurationImpl;
+import org.jboss.messaging.core.exception.MessagingException;
+import org.jboss.messaging.core.message.impl.MessageImpl;
+import org.jboss.messaging.core.server.Messaging;
+import org.jboss.messaging.core.server.MessagingService;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
+import org.jboss.messaging.tests.util.UnitTestCase;
+import org.jboss.messaging.util.SimpleString;
+
+/**
+ * @author <a href="mailto:andy.taylor at jboss.org">Andy Taylor</a>
+ */
+public class SoloQueueTest extends UnitTestCase
+{
+   private MessagingService messagingService;
+
+   private ClientSession clientSession;
+
+   private ClientSession clientSessionTxReceives;
+
+   private ClientSession clientSessionTxSends;
+
+   private SimpleString address = new SimpleString("SoloQueueTestAddress");
+
+   private SimpleString qName1 = new SimpleString("SoloQueueTestQ1");
+
+   private FakeStorageManager storageManager;
+
+
+   public void testSimple() throws Exception
+   {
+      ClientProducer producer = clientSession.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      SimpleString rh = new SimpleString("SMID1");
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      producer.send(m1);
+      producer.send(m2);
+      clientSession.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m2");
+   }
+
+   public void testMultipleMessages() throws Exception
+   {
+      ClientProducer producer = clientSession.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+      SimpleString messageId1 = new SimpleString("SMID1");
+      SimpleString messageId2 = new SimpleString("SMID2");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId1);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId2);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId1);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId2);
+      producer.send(m1);
+      producer.send(m2);
+      producer.send(m3);
+      producer.send(m4);
+      clientSession.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m3");
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m4");
+   }
+
+   public void testFirstMessageReceivedButAckedAfter() throws Exception
+   {
+      ClientProducer producer = clientSession.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      SimpleString rh = new SimpleString("SMID1");
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      producer.send(m1);
+      clientSession.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      producer.send(m2);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m1");
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m2");
+   }
+
+   public void testFirstMessageReceivedAndCancelled() throws Exception
+   {
+      ClientProducer producer = clientSession.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      SimpleString rh = new SimpleString("SMID1");
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      producer.send(m1);
+      clientSession.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      producer.send(m2);
+      consumer.close();
+      consumer = clientSession.createConsumer(qName1);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m2");
+      m = consumer.receive(1000);
+      assertNull(m);
+   }
+
+   public void testManyMessagesReceivedAndCancelled() throws Exception
+   {
+      ClientProducer producer = clientSession.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+
+      SimpleString rh = new SimpleString("SMID1");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m5 = createTextMessage("m5", clientSession);
+      m5.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m6 = createTextMessage("m6", clientSession);
+      m6.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      clientSession.start();
+      producer.send(m1);
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m1");
+      producer.send(m2);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m2");
+      producer.send(m3);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m3");
+      producer.send(m4);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m4");
+      producer.send(m5);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m5");
+      producer.send(m6);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      assertEquals(m.getBody().getString(), "m6");
+      consumer.close();
+      consumer = clientSession.createConsumer(qName1);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m6");
+      m = consumer.receive(1000);
+      assertNull(m);
+   }
+
+   public void testSimpleInTx() throws Exception
+   {
+
+      ClientProducer producer = clientSessionTxReceives.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSessionTxReceives.createConsumer(qName1);
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      SimpleString rh = new SimpleString("SMID1");
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      producer.send(m1);
+      producer.send(m2);
+      clientSessionTxReceives.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m2");
+   }
+
+   public void testMultipleMessagesInTx() throws Exception
+   {
+      ClientProducer producer = clientSessionTxReceives.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSessionTxReceives.createConsumer(qName1);
+      SimpleString messageId1 = new SimpleString("SMID1");
+      SimpleString messageId2 = new SimpleString("SMID2");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId1);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId2);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId1);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId2);
+      producer.send(m1);
+      producer.send(m2);
+      producer.send(m3);
+      producer.send(m4);
+      clientSessionTxReceives.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m3");
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m4");
+      clientSessionTxReceives.commit();
+      m = consumer.receive(1000);
+      assertNull(m);
+   }
+
+   public void testMultipleMessagesInTxRollback() throws Exception
+   {
+      ClientProducer producer = clientSessionTxReceives.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSessionTxReceives.createConsumer(qName1);
+      SimpleString messageId1 = new SimpleString("SMID1");
+      SimpleString messageId2 = new SimpleString("SMID2");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId1);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId2);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId1);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, messageId2);
+      producer.send(m1);
+      producer.send(m2);
+      clientSessionTxReceives.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m1");
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m2");
+      producer.send(m3);
+      producer.send(m4);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m3");
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m4");
+      clientSessionTxReceives.rollback();
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m3");
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m4");
+   }
+
+   public void testMultipleMessagesInTxSend() throws Exception
+   {
+      ClientProducer producer = clientSessionTxSends.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSessionTxSends.createConsumer(qName1);
+      SimpleString rh = new SimpleString("SMID1");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m5 = createTextMessage("m5", clientSession);
+      m5.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      ClientMessage m6 = createTextMessage("m6", clientSession);
+      m6.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      producer.send(m1);
+      producer.send(m2);
+      producer.send(m3);
+      producer.send(m4);
+      producer.send(m5);
+      producer.send(m6);
+      clientSessionTxSends.commit();
+      clientSessionTxSends.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m6");
+   }
+
+   public void testMultipleMessagesPersistedCorrectly() throws Exception
+   {
+      ClientProducer producer = clientSession.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+      SimpleString rh = new SimpleString("SMID1");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m1.setDurable(true);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m2.setDurable(true);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m3.setDurable(true);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m4.setDurable(true);
+      ClientMessage m5 = createTextMessage("m5", clientSession);
+      m5.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m5.setDurable(true);
+      ClientMessage m6 = createTextMessage("m6", clientSession);
+      m6.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m6.setDurable(true);
+      producer.send(m1);
+      producer.send(m2);
+      producer.send(m3);
+      producer.send(m4);
+      producer.send(m5);
+      producer.send(m6);
+      assertEquals(1, storageManager.messageIds.size());
+      clientSession.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m6");
+      assertEquals(0, storageManager.messageIds.size());
+   }
+
+   public void testMultipleMessagesPersistedCorrectlyInTx() throws Exception
+   {
+      ClientProducer producer = clientSessionTxSends.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSessionTxSends.createConsumer(qName1);
+      SimpleString rh = new SimpleString("SMID1");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m1.setDurable(true);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m2.setDurable(true);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m3.setDurable(true);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m4.setDurable(true);
+      ClientMessage m5 = createTextMessage("m5", clientSession);
+      m5.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m5.setDurable(true);
+      ClientMessage m6 = createTextMessage("m6", clientSession);
+      m6.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m6.setDurable(true);
+      producer.send(m1);
+      producer.send(m2);
+      producer.send(m3);
+      producer.send(m4);
+      producer.send(m5);
+      producer.send(m6);
+      clientSessionTxSends.commit();
+      assertEquals(1, storageManager.messageIds.size());
+      clientSessionTxSends.start();
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m6");
+      assertEquals(0, storageManager.messageIds.size());
+   }
+
+   public void testMultipleAcksPersistedCorrectly() throws Exception
+   {
+      ClientProducer producer = clientSession.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSession.createConsumer(qName1);
+      SimpleString rh = new SimpleString("SMID1");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m1.setDurable(true);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m2.setDurable(true);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m3.setDurable(true);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m4.setDurable(true);
+      ClientMessage m5 = createTextMessage("m5", clientSession);
+      m5.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m5.setDurable(true);
+      ClientMessage m6 = createTextMessage("m6", clientSession);
+      m6.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m6.setDurable(true);
+      clientSession.start();
+      producer.send(m1);
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m1");
+      producer.send(m2);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m2");
+      producer.send(m3);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m3");
+      producer.send(m4);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m4");
+      producer.send(m5);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m5");
+      producer.send(m6);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m6");
+      assertEquals(6, storageManager.ackIds.size());
+   }
+
+   public void testMultipleAcksPersistedCorrectlyInTx() throws Exception
+   {
+      ClientProducer producer = clientSessionTxReceives.createProducer(address, -1, true, true);
+      ClientConsumer consumer = clientSessionTxReceives.createConsumer(qName1);
+      SimpleString rh = new SimpleString("SMID1");
+      ClientMessage m1 = createTextMessage("m1", clientSession);
+      m1.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m1.setDurable(true);
+      ClientMessage m2 = createTextMessage("m2", clientSession);
+      m2.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m2.setDurable(true);
+      ClientMessage m3 = createTextMessage("m3", clientSession);
+      m3.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m3.setDurable(true);
+      ClientMessage m4 = createTextMessage("m4", clientSession);
+      m4.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m4.setDurable(true);
+      ClientMessage m5 = createTextMessage("m5", clientSession);
+      m5.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m5.setDurable(true);
+      ClientMessage m6 = createTextMessage("m6", clientSession);
+      m6.putStringProperty(MessageImpl.HDR_SOLE_MESSAGE, rh);
+      m6.setDurable(true);
+      clientSessionTxReceives.start();
+      producer.send(m1);
+      ClientMessage m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m1");
+      producer.send(m2);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m2");
+      producer.send(m3);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m3");
+      producer.send(m4);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m4");
+      producer.send(m5);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m5");
+      producer.send(m6);
+      m = consumer.receive(1000);
+      assertNotNull(m);
+      m.acknowledge();
+      assertEquals(m.getBody().getString(), "m6");
+      clientSessionTxReceives.commit();
+      assertEquals(6, storageManager.ackIds.size());
+   }
+
+   
+
+
+   protected void tearDown() throws Exception
+   {
+      if (clientSession != null)
+      {
+         try
+         {
+            clientSession.close();
+         }
+         catch (MessagingException e1)
+         {
+            //
+         }
+      }
+      if (messagingService != null && messagingService.isStarted())
+      {
+         try
+         {
+            messagingService.stop();
+         }
+         catch (Exception e1)
+         {
+            //
+         }
+      }
+      messagingService = null;
+      clientSession = null;
+   }
+
+   protected void setUp() throws Exception
+   {
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.setSecurityEnabled(false);
+      TransportConfiguration transportConfig = new TransportConfiguration(INVM_ACCEPTOR_FACTORY);
+      configuration.getAcceptorConfigurations().add(transportConfig);
+      storageManager = new FakeStorageManager();
+      messagingService = Messaging.newMessagingService(configuration, storageManager);
+      // start the server
+      messagingService.start();
+
+      AddressSettings qs = new AddressSettings();
+      qs.setSoloQueue(true);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(address.toString(), qs);
+      // then we create a client as normal
+      ClientSessionFactory sessionFactory = new ClientSessionFactoryImpl(new TransportConfiguration(INVM_CONNECTOR_FACTORY));
+      sessionFactory.setBlockOnAcknowledge(true);
+      sessionFactory.setAckBatchSize(0);
+      clientSession = sessionFactory.createSession(false, true, true);
+      clientSessionTxReceives = sessionFactory.createSession(false, true, false);
+      clientSessionTxSends = sessionFactory.createSession(false, false, true);
+      clientSession.createQueue(address, qName1, null, true, false);
+   }
+}

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/scheduling/ScheduledMessageTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/scheduling/ScheduledMessageTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/scheduling/ScheduledMessageTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -35,7 +35,7 @@
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.message.impl.MessageImpl;
 import org.jboss.messaging.core.server.MessagingService;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.impl.XidImpl;
 import org.jboss.messaging.jms.client.JBossTextMessage;
 import org.jboss.messaging.tests.util.ServiceTestBase;
@@ -170,9 +170,9 @@
 
    public void testPagedMessageDeliveredMultipleConsumersCorrectly() throws Exception
    {
-      QueueSettings qs = new QueueSettings();
+      AddressSettings qs = new AddressSettings();
       qs.setRedeliveryDelay(5000l);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(atestq2.toString(), qs);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(atestq2.toString(), qs);
       // then we create a client as normal
       ClientSessionFactory sessionFactory = createInVMFactory();
       ClientSession session = sessionFactory.createSession(false, true, false);
@@ -219,9 +219,9 @@
    public void testPagedMessageDeliveredMultipleConsumersAfterRecoverCorrectly() throws Exception
    {
 
-      QueueSettings qs = new QueueSettings();
+      AddressSettings qs = new AddressSettings();
       qs.setRedeliveryDelay(5000l);
-      messagingService.getServer().getQueueSettingsRepository().addMatch(atestq2.toString(), qs);
+      messagingService.getServer().getAddressSettingsRepository().addMatch(atestq2.toString(), qs);
       // then we create a client as normal
       ClientSessionFactory sessionFactory = createInVMFactory();
       ClientSession session = sessionFactory.createSession(false, true, false);

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/xa/BasicXaRecoveryTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/xa/BasicXaRecoveryTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/xa/BasicXaRecoveryTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -37,7 +37,7 @@
 import org.jboss.messaging.core.exception.MessagingException;
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.server.MessagingService;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.impl.XidImpl;
 import org.jboss.messaging.jms.client.JBossBytesMessage;
 import org.jboss.messaging.jms.client.JBossTextMessage;
@@ -53,7 +53,7 @@
 {
    private static Logger log = Logger.getLogger(BasicXaRecoveryTest.class);
 
-   private final Map<String, QueueSettings> queueSettings = new HashMap<String, QueueSettings>();
+   private final Map<String, AddressSettings> queueSettings = new HashMap<String, AddressSettings>();
 
    private MessagingService messagingService;
 
@@ -246,11 +246,11 @@
 
       SimpleString pageQueue = new SimpleString("pagequeue");
 
-      QueueSettings pageQueueSettings = new QueueSettings();
-      pageQueueSettings.setMaxSizeBytes(100 * 1024);
-      pageQueueSettings.setPageSizeBytes(10 * 1024);
+      AddressSettings pageAddressSettings = new AddressSettings();
+      pageAddressSettings.setMaxSizeBytes(100 * 1024);
+      pageAddressSettings.setPageSizeBytes(10 * 1024);
 
-      queueSettings.put(pageQueue.toString(), pageQueueSettings);
+      queueSettings.put(pageQueue.toString(), pageAddressSettings);
 
       addSettings();
 
@@ -329,11 +329,11 @@
 
       SimpleString pageQueue = new SimpleString("pagequeue");
 
-      QueueSettings pageQueueSettings = new QueueSettings();
-      pageQueueSettings.setMaxSizeBytes(100 * 1024);
-      pageQueueSettings.setPageSizeBytes(10 * 1024);
+      AddressSettings pageAddressSettings = new AddressSettings();
+      pageAddressSettings.setMaxSizeBytes(100 * 1024);
+      pageAddressSettings.setPageSizeBytes(10 * 1024);
 
-      queueSettings.put(pageQueue.toString(), pageQueueSettings);
+      queueSettings.put(pageQueue.toString(), pageAddressSettings);
 
       addSettings();
 
@@ -1221,9 +1221,9 @@
 
    private void addSettings()
    {
-      for (Map.Entry<String, QueueSettings> setting : queueSettings.entrySet())
+      for (Map.Entry<String, AddressSettings> setting : queueSettings.entrySet())
       {
-         messagingService.getServer().getQueueSettingsRepository().addMatch(setting.getKey(), setting.getValue());
+         messagingService.getServer().getAddressSettingsRepository().addMatch(setting.getKey(), setting.getValue());
       }
    }
 

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/xa/BasicXaTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/xa/BasicXaTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/xa/BasicXaTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -28,7 +28,7 @@
 import org.jboss.messaging.core.client.ClientSessionFactory;
 import org.jboss.messaging.core.transaction.impl.XidImpl;
 import org.jboss.messaging.core.logging.Logger;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.server.MessagingService;
 import org.jboss.messaging.core.config.Configuration;
 import org.jboss.messaging.core.exception.MessagingException;
@@ -48,7 +48,7 @@
 {
       private static Logger log = Logger.getLogger(BasicXaTest.class);
 
-   private final Map<String, QueueSettings> queueSettings = new HashMap<String, QueueSettings>();
+   private final Map<String, AddressSettings> queueSettings = new HashMap<String, AddressSettings>();
 
    private MessagingService messagingService;
 

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/xa/XaTimeoutTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/xa/XaTimeoutTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/xa/XaTimeoutTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -39,7 +39,7 @@
 import org.jboss.messaging.core.exception.MessagingException;
 import org.jboss.messaging.core.server.Messaging;
 import org.jboss.messaging.core.server.MessagingService;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.impl.XidImpl;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
@@ -51,7 +51,7 @@
 public class XaTimeoutTest extends UnitTestCase
 {
 
-   private Map<String, QueueSettings> queueSettings = new HashMap<String, QueueSettings>();
+   private Map<String, AddressSettings> queueSettings = new HashMap<String, AddressSettings>();
 
    private MessagingService messagingService;
    

Modified: trunk/tests/src/org/jboss/messaging/tests/performance/paging/MeasurePagingMultiThreadTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/performance/paging/MeasurePagingMultiThreadTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/performance/paging/MeasurePagingMultiThreadTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -35,7 +35,7 @@
 import org.jboss.messaging.core.remoting.impl.ByteBufferWrapper;
 import org.jboss.messaging.core.remoting.spi.MessagingBuffer;
 import org.jboss.messaging.core.server.MessagingService;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.ServiceTestBase;
 import org.jboss.messaging.util.SimpleString;
 
@@ -83,7 +83,7 @@
 
       Configuration config = createDefaultConfig();
 
-      HashMap<String, QueueSettings> settings = new HashMap<String, QueueSettings>();
+      HashMap<String, AddressSettings> settings = new HashMap<String, AddressSettings>();
 
       config.setPagingMaxGlobalSizeBytes(20 * 1024);
 

Modified: trunk/tests/src/org/jboss/messaging/tests/stress/paging/PageStressTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/stress/paging/PageStressTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/stress/paging/PageStressTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -22,7 +22,7 @@
 import org.jboss.messaging.core.config.Configuration;
 import org.jboss.messaging.core.exception.MessagingException;
 import org.jboss.messaging.core.server.MessagingService;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.ServiceTestBase;
 import org.jboss.messaging.util.SimpleString;
 
@@ -60,19 +60,19 @@
    {
       Configuration config = createDefaultConfig();
 
-      HashMap<String, QueueSettings> settings = new HashMap<String, QueueSettings>();
+      HashMap<String, AddressSettings> settings = new HashMap<String, AddressSettings>();
 
       if (globalPage)
       {
          config.setPagingMaxGlobalSizeBytes(20 * 1024 * 1024);
-         QueueSettings setting = new QueueSettings();
+         AddressSettings setting = new AddressSettings();
          setting.setMaxSizeBytes(-1);
          settings.put("page-adr", setting);
       }
       else
       {
          config.setPagingMaxGlobalSizeBytes(-1);
-         QueueSettings setting = new QueueSettings();
+         AddressSettings setting = new AddressSettings();
          setting.setMaxSizeBytes(20 * 1024 * 1024);
          settings.put("page-adr", setting);
       }
@@ -191,19 +191,19 @@
    {
       Configuration config = createDefaultConfig();
 
-      HashMap<String, QueueSettings> settings = new HashMap<String, QueueSettings>();
+      HashMap<String, AddressSettings> settings = new HashMap<String, AddressSettings>();
 
       if (globalPage)
       {
          config.setPagingMaxGlobalSizeBytes(20 * 1024 * 1024);
-         QueueSettings setting = new QueueSettings();
+         AddressSettings setting = new AddressSettings();
          setting.setMaxSizeBytes(-1);
          settings.put("page-adr", setting);
       }
       else
       {
          config.setPagingMaxGlobalSizeBytes(-1);
-         QueueSettings setting = new QueueSettings();
+         AddressSettings setting = new AddressSettings();
          setting.setMaxSizeBytes(20 * 1024 * 1024);
          settings.put("page-adr", setting);
       }

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/deployers/impl/QueueSettingsDeployerTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/deployers/impl/QueueSettingsDeployerTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/deployers/impl/QueueSettingsDeployerTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -27,9 +27,9 @@
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
 import org.jboss.messaging.core.deployers.DeploymentManager;
-import org.jboss.messaging.core.deployers.impl.QueueSettingsDeployer;
+import org.jboss.messaging.core.deployers.impl.AddressSettingsDeployer;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.util.SimpleString;
 import org.jboss.messaging.util.XMLUtil;
 
@@ -38,7 +38,7 @@
  */
 public class QueueSettingsDeployerTest extends TestCase
 {
-   private String conf = "<queue-settings match=\"queues.*\">\n" +
+   private String conf = "<address-settings match=\"queues.*\">\n" +
            "      <manageConfirmations>false</manageConfirmations>\n" +
            "      <dead-letter-address>DLQtest</dead-letter-address>\n" +
            "      <expiry-address>ExpiryQueueTest</expiry-address>\n" +
@@ -46,48 +46,48 @@
            "      <max-size-bytes>-100</max-size-bytes>\n" +
            "      <distribution-policy-class>org.jboss.messaging.core.impl.RoundRobinDistributionPolicy</distribution-policy-class>\n" +
            "      <message-counter-history-day-limit>1000</message-counter-history-day-limit>\n" +
-           "   </queue-settings>";
+           "   </address-settings>";
 
-   private QueueSettingsDeployer queueSettingsDeployer;
+   private AddressSettingsDeployer addressSettingsDeployer;
 
-   private HierarchicalRepository<QueueSettings> repository;
+   private HierarchicalRepository<AddressSettings> repository;
 
    protected void setUp() throws Exception
    {
       repository = EasyMock.createStrictMock(HierarchicalRepository.class);
       DeploymentManager deploymentManager = EasyMock.createNiceMock(DeploymentManager.class);
-      queueSettingsDeployer = new QueueSettingsDeployer(deploymentManager, repository);
+      addressSettingsDeployer = new AddressSettingsDeployer(deploymentManager, repository);
    }
 
    public void testDeploy() throws Exception
    {
-      final QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setClustered(false);
-      queueSettings.setRedeliveryDelay((long) 100);
-      queueSettings.setMaxSizeBytes(-100);
-      queueSettings.setDistributionPolicyClass("org.jboss.messaging.core.impl.RoundRobinDistributionPolicy");
-      queueSettings.setMessageCounterHistoryDayLimit(1000);
-      queueSettings.setDeadLetterAddress(new SimpleString("DLQtest"));
-      queueSettings.setExpiryAddress(new SimpleString("ExpiryQueueTest"));
+      final AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setClustered(false);
+      addressSettings.setRedeliveryDelay((long) 100);
+      addressSettings.setMaxSizeBytes(-100);
+      addressSettings.setDistributionPolicyClass("org.jboss.messaging.core.impl.RoundRobinDistributionPolicy");
+      addressSettings.setMessageCounterHistoryDayLimit(1000);
+      addressSettings.setDeadLetterAddress(new SimpleString("DLQtest"));
+      addressSettings.setExpiryAddress(new SimpleString("ExpiryQueueTest"));
 
-      repository.addMatch(EasyMock.eq("queues.*"),(QueueSettings) EasyMock.anyObject());
+      repository.addMatch(EasyMock.eq("queues.*"),(AddressSettings) EasyMock.anyObject());
       EasyMock.expectLastCall().andAnswer(new IAnswer<Object>()
       {
          public Object answer() throws Throwable
          {
-            QueueSettings q = (QueueSettings) EasyMock.getCurrentArguments()[1];
+            AddressSettings q = (AddressSettings) EasyMock.getCurrentArguments()[1];
             assertFalse(q.isClustered());
-            assertEquals(q.getRedeliveryDelay(), queueSettings.getRedeliveryDelay());
-            assertEquals(q.getMaxSizeBytes(), queueSettings.getMaxSizeBytes());
-            assertEquals(q.getDistributionPolicyClass(), queueSettings.getDistributionPolicyClass());
-            assertEquals(q.getMessageCounterHistoryDayLimit(), queueSettings.getMessageCounterHistoryDayLimit());
-            assertEquals(q.getDeadLetterAddress(), queueSettings.getDeadLetterAddress());
-            assertEquals(q.getExpiryAddress(), queueSettings.getExpiryAddress());
+            assertEquals(q.getRedeliveryDelay(), addressSettings.getRedeliveryDelay());
+            assertEquals(q.getMaxSizeBytes(), addressSettings.getMaxSizeBytes());
+            assertEquals(q.getDistributionPolicyClass(), addressSettings.getDistributionPolicyClass());
+            assertEquals(q.getMessageCounterHistoryDayLimit(), addressSettings.getMessageCounterHistoryDayLimit());
+            assertEquals(q.getDeadLetterAddress(), addressSettings.getDeadLetterAddress());
+            assertEquals(q.getExpiryAddress(), addressSettings.getExpiryAddress());
             return null;
          }
       });
       EasyMock.replay(repository);
-      queueSettingsDeployer.deploy(XMLUtil.stringToElement(conf));
+      addressSettingsDeployer.deploy(XMLUtil.stringToElement(conf));
       EasyMock.verify(repository);
    }
 
@@ -95,7 +95,7 @@
    {
       repository.removeMatch("queues.*");
       EasyMock.replay(repository);
-      queueSettingsDeployer.undeploy(XMLUtil.stringToElement(conf));
+      addressSettingsDeployer.undeploy(XMLUtil.stringToElement(conf));
       EasyMock.verify(repository);
    }
 

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/ManagementServiceImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/ManagementServiceImplTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/ManagementServiceImplTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -44,16 +44,14 @@
 import org.jboss.messaging.core.management.impl.AddressControl;
 import org.jboss.messaging.core.management.impl.ManagementServiceImpl;
 import org.jboss.messaging.core.management.impl.MessagingServerControl;
-import org.jboss.messaging.core.management.impl.QueueControl;
 import org.jboss.messaging.core.persistence.StorageManager;
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.remoting.RemotingService;
 import org.jboss.messaging.core.security.Role;
 import org.jboss.messaging.core.server.MessagingServer;
-import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.QueueFactory;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.util.SimpleString;
 
@@ -86,7 +84,7 @@
       expect(configuration.getManagementNotificationAddress()).andReturn(randomSimpleString());
       expect(configuration.isMessageCounterEnabled()).andReturn(false);
       HierarchicalRepository<Set<Role>> securityRepository = createMock(HierarchicalRepository.class);
-      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
+      HierarchicalRepository<AddressSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
       QueueFactory queueFactory = createMock(QueueFactory.class);
       ResourceManager resourceManager = createMock(ResourceManager.class);
       RemotingService remotingService = createMock(RemotingService.class);
@@ -138,7 +136,7 @@
       expect(configuration.getManagementNotificationAddress()).andReturn(randomSimpleString());
       expect(configuration.isMessageCounterEnabled()).andReturn(false);
       HierarchicalRepository<Set<Role>> securityRepository = createMock(HierarchicalRepository.class);
-      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
+      HierarchicalRepository<AddressSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
       QueueFactory queueFactory = createMock(QueueFactory.class);
       ResourceManager resourceManager = createMock(ResourceManager.class);
       RemotingService remotingService = createMock(RemotingService.class);

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/MessagingServerControlTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/MessagingServerControlTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/MessagingServerControlTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -56,7 +56,7 @@
 import org.jboss.messaging.core.server.MessagingServer;
 import org.jboss.messaging.core.server.QueueFactory;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.ResourceManager;
 import org.jboss.messaging.core.transaction.Transaction;
 import org.jboss.messaging.core.transaction.impl.XidImpl;
@@ -81,7 +81,7 @@
 
    private HierarchicalRepository<Set<Role>> securityRepository;
 
-   private HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private ResourceManager resourceManager;
 

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -57,7 +57,7 @@
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.util.SimpleString;
 
 /**
@@ -78,7 +78,7 @@
 
    private PostOffice postOffice;
 
-   private HierarchicalRepository<QueueSettings> repository;
+   private HierarchicalRepository<AddressSettings> repository;
 
    private MessageCounter messageCounter;
 
@@ -253,7 +253,7 @@
       final String dlqName = randomString();
 
       expect(queue.getName()).andReturn(queueName);
-      QueueSettings queueSettings = new QueueSettings()
+      AddressSettings addressSettings = new AddressSettings()
       {
          @Override
          public SimpleString getDeadLetterAddress()
@@ -261,7 +261,7 @@
             return new SimpleString(dlqName);
          }
       };
-      expect(repository.getMatch(queueName.toString())).andReturn(queueSettings);
+      expect(repository.getMatch(queueName.toString())).andReturn(addressSettings);
 
       replayMockedAttributes();
 
@@ -276,7 +276,7 @@
       final String expiryQueueName = randomString();
 
       expect(queue.getName()).andReturn(queueName);
-      QueueSettings queueSettings = new QueueSettings()
+      AddressSettings addressSettings = new AddressSettings()
       {
          @Override
          public SimpleString getExpiryAddress()
@@ -284,7 +284,7 @@
             return new SimpleString(expiryQueueName);
          }
       };
-      expect(repository.getMatch(queueName.toString())).andReturn(queueSettings);
+      expect(repository.getMatch(queueName.toString())).andReturn(addressSettings);
 
       replayMockedAttributes();
 

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/paging/impl/PagingStoreImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/paging/impl/PagingStoreImplTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/paging/impl/PagingStoreImplTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -35,7 +35,7 @@
 import org.jboss.messaging.core.paging.impl.PagedMessageImpl;
 import org.jboss.messaging.core.paging.impl.PagingStoreImpl;
 import org.jboss.messaging.core.paging.impl.TestSupportPageStore;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.unit.core.journal.impl.fakes.FakeSequentialFileFactory;
 import org.jboss.messaging.util.SimpleString;
 
@@ -69,7 +69,7 @@
                                                   factory,
                                                   null,
                                                   destinationTestName,
-                                                  new QueueSettings(),
+                                                  new AddressSettings(),
                                                   executor);
 
       storeImpl.start();
@@ -97,7 +97,7 @@
                                                   factory,
                                                   storeFactory,
                                                   destinationTestName,
-                                                  new QueueSettings(),
+                                                  new AddressSettings(),
                                                   executor);
 
       storeImpl.start();
@@ -131,7 +131,7 @@
                                       factory,
                                       null,
                                       destinationTestName,
-                                      new QueueSettings(),
+                                      new AddressSettings(),
                                       executor);
 
       storeImpl.start();
@@ -156,7 +156,7 @@
                                                   factory,
                                                   storeFactory,
                                                   destinationTestName,
-                                                  new QueueSettings(),
+                                                  new AddressSettings(),
                                                   executor);
 
       storeImpl.start();
@@ -223,7 +223,7 @@
                                                            factory,
                                                            storeFactory,
                                                            destinationTestName,
-                                                           new QueueSettings(),
+                                                           new AddressSettings(),
                                                            executor);
 
       storeImpl.start();

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/paging/impl/PagingStoreTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/paging/impl/PagingStoreTestBase.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/paging/impl/PagingStoreTestBase.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -48,7 +48,7 @@
 import org.jboss.messaging.core.remoting.impl.ByteBufferWrapper;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.server.impl.ServerMessageImpl;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.RandomUtil;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
@@ -109,7 +109,7 @@
 
       final ArrayList<Page> readPages = new ArrayList<Page>();
 
-      QueueSettings settings = new QueueSettings();
+      AddressSettings settings = new AddressSettings();
       settings.setPageSizeBytes(MAX_SIZE);
 
       final TestSupportPageStore storeImpl = new PagingStoreImpl(createMockManager(),

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/MessagingServerImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/MessagingServerImplTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/MessagingServerImplTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -186,7 +186,7 @@
 //      MessagingServerControlMBean managedServer = EasyMock.createMock(MessagingServerControlMBean.class);
 //      expect(ms.registerServer(isA(PostOffice.class), eq(sm), eq(server
 //            .getConfiguration()), isA(HierarchicalRepository.class), eq(server
-//            .getQueueSettingsRepository()), eq(server))).andReturn(managedServer);
+//            .getAddressSettingsRepository()), eq(server))).andReturn(managedServer);
 //
 //      EasyMock.replay(sm, rs, pd, ms);
 //      
@@ -200,7 +200,7 @@
 //      
 //      EasyMock.reset(sm, rs, pd);
 //      
-//      assertNotNull(server.getQueueSettingsRepository());
+//      assertNotNull(server.getAddressSettingsRepository());
 //      
 //      //Starting again should do nothing
 //      
@@ -290,7 +290,7 @@
 //      
 //      expect(ms.registerServer(isA(PostOffice.class), eq(sm), eq(server
 //            .getConfiguration()), isA(HierarchicalRepository.class), eq(server
-//            .getQueueSettingsRepository()), eq(server))).andReturn(managedServer);
+//            .getAddressSettingsRepository()), eq(server))).andReturn(managedServer);
 //
 //      EasyMock.replay(sm, rs, pd, ms);
 //                 
@@ -301,7 +301,7 @@
 //      
 //      assertTrue(server.isStarted());
 //      
-//      assertNotNull(server.getQueueSettingsRepository());
+//      assertNotNull(server.getAddressSettingsRepository());
 //      
 //      EasyMock.reset(sm, rs, pd);
 //      
@@ -363,7 +363,7 @@
 //      MessagingServerControlMBean managedServer = EasyMock.createMock(MessagingServerControlMBean.class);
 //      expect(mr.registerServer(isA(PostOffice.class), eq(sm), eq(server
 //            .getConfiguration()), isA(HierarchicalRepository.class), eq(server
-//            .getQueueSettingsRepository()), eq(server))).andReturn(managedServer);
+//            .getAddressSettingsRepository()), eq(server))).andReturn(managedServer);
 //      server.setManagementService(mr);
 //
 //      PacketDispatcher pd = EasyMock.createMock(PacketDispatcher.class);
@@ -421,7 +421,7 @@
 //      MessagingServerControlMBean managedServer = EasyMock.createMock(MessagingServerControlMBean.class);
 //      expect(mr.registerServer(isA(PostOffice.class), eq(sm), eq(server
 //            .getConfiguration()), isA(HierarchicalRepository.class), eq(server
-//            .getQueueSettingsRepository()), eq(server))).andReturn(managedServer);
+//            .getAddressSettingsRepository()), eq(server))).andReturn(managedServer);
 //      server.setManagementService(mr);
 //
 //      PacketDispatcher pd = EasyMock.createMock(PacketDispatcher.class);

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueFactoryImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueFactoryImplTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueFactoryImplTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -30,7 +30,7 @@
 import org.jboss.messaging.core.server.impl.QueueFactoryImpl;
 import org.jboss.messaging.core.server.impl.RoundRobinDistributor;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
 
@@ -42,18 +42,18 @@
    public void testCreateQueue()
    {
       ScheduledExecutorService scheduledExecutor = EasyMock.createStrictMock(ScheduledExecutorService.class);
-      HierarchicalRepository<QueueSettings> queueSettingsRepository = EasyMock.createStrictMock(HierarchicalRepository.class);
+      HierarchicalRepository<AddressSettings> queueSettingsRepository = EasyMock.createStrictMock(HierarchicalRepository.class);
       StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
       Filter filter = EasyMock.createStrictMock(Filter.class);
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setClustered(true);
-      queueSettings.setMaxSizeBytes(9999);
-      queueSettings.setDistributionPolicyClass("org.jboss.messaging.core.server.impl.RoundRobinDistributor");
-      EasyMock.expect(queueSettingsRepository.getMatch("testQ")).andReturn(queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setClustered(true);
+      addressSettings.setMaxSizeBytes(9999);
+      addressSettings.setDistributionPolicyClass("org.jboss.messaging.core.server.impl.RoundRobinDistributor");
+      EasyMock.expect(queueSettingsRepository.getMatch("testQ")).andReturn(addressSettings);
       EasyMock.replay(scheduledExecutor, queueSettingsRepository);
       QueueFactoryImpl queueFactory = new QueueFactoryImpl(scheduledExecutor, queueSettingsRepository, sm);
       SimpleString qName = new SimpleString("testQ");
-      Queue queue = queueFactory.createQueue(123, qName, filter, true, false);
+      Queue queue = queueFactory.createQueue(123, qName, qName, filter, true, false);
       EasyMock.verify(scheduledExecutor, queueSettingsRepository);
       assertEquals(queue.getDistributionPolicy().getClass(), RoundRobinDistributor.class);
       assertEquals(queue.getName(), qName);
@@ -66,17 +66,17 @@
    public void testCreateQueue2()
    {
       ScheduledExecutorService scheduledExecutor = EasyMock.createStrictMock(ScheduledExecutorService.class);
-      HierarchicalRepository<QueueSettings> queueSettingsRepository = EasyMock.createStrictMock(HierarchicalRepository.class);
+      HierarchicalRepository<AddressSettings> queueSettingsRepository = EasyMock.createStrictMock(HierarchicalRepository.class);
       StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
-      QueueSettings queueSettings = new QueueSettings();
-      queueSettings.setClustered(false);
-      queueSettings.setMaxSizeBytes(8888);
-      queueSettings.setDistributionPolicyClass(null);
-      EasyMock.expect(queueSettingsRepository.getMatch("testQ2")).andReturn(queueSettings);
+      AddressSettings addressSettings = new AddressSettings();
+      addressSettings.setClustered(false);
+      addressSettings.setMaxSizeBytes(8888);
+      addressSettings.setDistributionPolicyClass(null);
+      EasyMock.expect(queueSettingsRepository.getMatch("testQ2")).andReturn(addressSettings);
       EasyMock.replay(scheduledExecutor, queueSettingsRepository);
       QueueFactoryImpl queueFactory = new QueueFactoryImpl(scheduledExecutor, queueSettingsRepository, sm);
       SimpleString qName = new SimpleString("testQ2");
-      Queue queue = queueFactory.createQueue(456, qName, null, false, false);
+      Queue queue = queueFactory.createQueue(456, qName, qName, null, false, false);
       EasyMock.verify(scheduledExecutor, queueSettingsRepository);
       assertEquals(queue.getDistributionPolicy().getClass(), RoundRobinDistributor.class);
       assertEquals(queue.getName(), qName);

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/fakes/FakeQueueFactory.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/fakes/FakeQueueFactory.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/fakes/FakeQueueFactory.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -45,7 +45,7 @@
 	
 	private PostOffice postOffice;
 
-	public Queue createQueue(long persistenceID, SimpleString name, Filter filter,
+	public Queue createQueue(long persistenceID, final SimpleString address, SimpleString name, Filter filter,
 			                   boolean durable, boolean temporary)
 	{
 		return new QueueImpl(persistenceID, name, filter, durable, temporary, scheduledExecutor, postOffice, null, null);

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/settings/impl/QueueSettingsTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/settings/impl/QueueSettingsTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/settings/impl/QueueSettingsTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -24,7 +24,7 @@
 
 import junit.framework.TestCase;
 
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.util.SimpleString;
 
 /**
@@ -34,115 +34,115 @@
 {
    public void testDefaults()
    {
-      QueueSettings queueSettings = new QueueSettings();
-      assertEquals(queueSettings.getDistributionPolicy().getClass(), QueueSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
-      assertEquals(queueSettings.getDistributionPolicyClass(), null);
-      assertEquals(queueSettings.getDeadLetterAddress(), null);
-      assertEquals(queueSettings.isClustered(), Boolean.valueOf(false));
-      assertEquals(queueSettings.getExpiryAddress(), null);
-      assertEquals(queueSettings.getMaxDeliveryAttempts(), QueueSettings.DEFAULT_MAX_DELIVERY_ATTEMPTS);
-      assertEquals(queueSettings.getMaxSizeBytes(), QueueSettings.DEFAULT_MAX_SIZE_BYTES);
-      assertEquals(queueSettings.getPageSizeBytes(), null);
-      assertEquals(queueSettings.getMessageCounterHistoryDayLimit(), QueueSettings.DEFAULT_MESSAGE_COUNTER_HISTORY_DAY_LIMIT);
-      assertEquals(queueSettings.getRedeliveryDelay(), QueueSettings.DEFAULT_REDELIVER_DELAY);
+      AddressSettings addressSettings = new AddressSettings();
+      assertEquals(addressSettings.getDistributionPolicy().getClass(), AddressSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
+      assertEquals(addressSettings.getDistributionPolicyClass(), null);
+      assertEquals(addressSettings.getDeadLetterAddress(), null);
+      assertEquals(addressSettings.isClustered(), Boolean.valueOf(false));
+      assertEquals(addressSettings.getExpiryAddress(), null);
+      assertEquals(addressSettings.getMaxDeliveryAttempts(), AddressSettings.DEFAULT_MAX_DELIVERY_ATTEMPTS);
+      assertEquals(addressSettings.getMaxSizeBytes(), AddressSettings.DEFAULT_MAX_SIZE_BYTES);
+      assertEquals(addressSettings.getPageSizeBytes(), null);
+      assertEquals(addressSettings.getMessageCounterHistoryDayLimit(), AddressSettings.DEFAULT_MESSAGE_COUNTER_HISTORY_DAY_LIMIT);
+      assertEquals(addressSettings.getRedeliveryDelay(), AddressSettings.DEFAULT_REDELIVER_DELAY);
 
    }
 
    public void testSingleMerge()
    {
-      QueueSettings queueSettings = new QueueSettings();
-      QueueSettings queueSettingsToMerge = new QueueSettings();
-      queueSettingsToMerge.setClustered(true);
+      AddressSettings addressSettings = new AddressSettings();
+      AddressSettings addressSettingsToMerge = new AddressSettings();
+      addressSettingsToMerge.setClustered(true);
       SimpleString DLQ = new SimpleString("testDLQ");
       SimpleString exp = new SimpleString("testExpiryQueue");
-      queueSettingsToMerge.setDeadLetterAddress(DLQ);
-      queueSettingsToMerge.setExpiryAddress(exp);
-      queueSettingsToMerge.setMaxDeliveryAttempts(1000);
-      queueSettingsToMerge.setDropMessagesWhenFull(true);
-      queueSettingsToMerge.setMaxSizeBytes(1001);
-      queueSettingsToMerge.setMessageCounterHistoryDayLimit(1002);
-      queueSettingsToMerge.setRedeliveryDelay((long)1003);
-      queueSettingsToMerge.setPageSizeBytes(1004);
-      queueSettings.merge(queueSettingsToMerge);
-      assertEquals(queueSettings.getDistributionPolicy().getClass(), QueueSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
-      assertEquals(queueSettings.getDistributionPolicyClass(), null);
-      assertEquals(queueSettings.isClustered(), Boolean.valueOf(true));
-      assertEquals(queueSettings.getDeadLetterAddress(), DLQ);
-      assertEquals(queueSettings.getExpiryAddress(), exp);
-      assertEquals(queueSettings.getMaxDeliveryAttempts(), Integer.valueOf(1000));
-      assertEquals(queueSettings.getMaxSizeBytes(), Integer.valueOf(1001));
-      assertEquals(queueSettings.getMessageCounterHistoryDayLimit(), Integer.valueOf(1002));
-      assertEquals(queueSettings.getRedeliveryDelay(), Long.valueOf(1003));
-      assertEquals(queueSettings.getPageSizeBytes(), (Integer)1004);
-      assertTrue(queueSettings.isDropMessagesWhenFull());
+      addressSettingsToMerge.setDeadLetterAddress(DLQ);
+      addressSettingsToMerge.setExpiryAddress(exp);
+      addressSettingsToMerge.setMaxDeliveryAttempts(1000);
+      addressSettingsToMerge.setDropMessagesWhenFull(true);
+      addressSettingsToMerge.setMaxSizeBytes(1001);
+      addressSettingsToMerge.setMessageCounterHistoryDayLimit(1002);
+      addressSettingsToMerge.setRedeliveryDelay((long)1003);
+      addressSettingsToMerge.setPageSizeBytes(1004);
+      addressSettings.merge(addressSettingsToMerge);
+      assertEquals(addressSettings.getDistributionPolicy().getClass(), AddressSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
+      assertEquals(addressSettings.getDistributionPolicyClass(), null);
+      assertEquals(addressSettings.isClustered(), Boolean.valueOf(true));
+      assertEquals(addressSettings.getDeadLetterAddress(), DLQ);
+      assertEquals(addressSettings.getExpiryAddress(), exp);
+      assertEquals(addressSettings.getMaxDeliveryAttempts(), Integer.valueOf(1000));
+      assertEquals(addressSettings.getMaxSizeBytes(), Integer.valueOf(1001));
+      assertEquals(addressSettings.getMessageCounterHistoryDayLimit(), Integer.valueOf(1002));
+      assertEquals(addressSettings.getRedeliveryDelay(), Long.valueOf(1003));
+      assertEquals(addressSettings.getPageSizeBytes(), (Integer)1004);
+      assertTrue(addressSettings.isDropMessagesWhenFull());
    }
 
    public void testMultipleMerge()
    {
-      QueueSettings queueSettings = new  QueueSettings();
-      QueueSettings queueSettingsToMerge = new QueueSettings();
-      queueSettingsToMerge.setClustered(true);
+      AddressSettings addressSettings = new AddressSettings();
+      AddressSettings addressSettingsToMerge = new AddressSettings();
+      addressSettingsToMerge.setClustered(true);
       SimpleString DLQ = new SimpleString("testDLQ");
       SimpleString exp = new SimpleString("testExpiryQueue");
-      queueSettingsToMerge.setDeadLetterAddress(DLQ);
-      queueSettingsToMerge.setExpiryAddress(exp);
-      queueSettingsToMerge.setMaxDeliveryAttempts(1000);
-      queueSettingsToMerge.setMaxSizeBytes(1001);
-      queueSettingsToMerge.setMessageCounterHistoryDayLimit(1002);
-      queueSettings.merge(queueSettingsToMerge);
+      addressSettingsToMerge.setDeadLetterAddress(DLQ);
+      addressSettingsToMerge.setExpiryAddress(exp);
+      addressSettingsToMerge.setMaxDeliveryAttempts(1000);
+      addressSettingsToMerge.setMaxSizeBytes(1001);
+      addressSettingsToMerge.setMessageCounterHistoryDayLimit(1002);
+      addressSettings.merge(addressSettingsToMerge);
 
-      QueueSettings queueSettingsToMerge2 = new QueueSettings();
-      queueSettingsToMerge2.setClustered(true);
+      AddressSettings addressSettingsToMerge2 = new AddressSettings();
+      addressSettingsToMerge2.setClustered(true);
       SimpleString exp2 = new SimpleString("testExpiryQueue2");
-      queueSettingsToMerge2.setExpiryAddress(exp2);
-      queueSettingsToMerge2.setMaxSizeBytes(2001);
-      queueSettingsToMerge2.setRedeliveryDelay((long)2003);
-      queueSettings.merge(queueSettingsToMerge2);
+      addressSettingsToMerge2.setExpiryAddress(exp2);
+      addressSettingsToMerge2.setMaxSizeBytes(2001);
+      addressSettingsToMerge2.setRedeliveryDelay((long)2003);
+      addressSettings.merge(addressSettingsToMerge2);
 
-      assertEquals(queueSettings.getDistributionPolicy().getClass(), QueueSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
-      assertEquals(queueSettings.getDistributionPolicyClass(), null);
-      assertEquals(queueSettings.isClustered(), Boolean.valueOf(true));
-      assertEquals(queueSettings.getDeadLetterAddress(), DLQ);
-      assertEquals(queueSettings.getExpiryAddress(), exp);
-      assertEquals(queueSettings.getMaxDeliveryAttempts(), Integer.valueOf(1000));
-      assertEquals(queueSettings.getMaxSizeBytes(), Integer.valueOf(1001));
-      assertEquals(queueSettings.getMessageCounterHistoryDayLimit(), Integer.valueOf(1002));
-      assertEquals(queueSettings.getRedeliveryDelay(), Long.valueOf(2003));
+      assertEquals(addressSettings.getDistributionPolicy().getClass(), AddressSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
+      assertEquals(addressSettings.getDistributionPolicyClass(), null);
+      assertEquals(addressSettings.isClustered(), Boolean.valueOf(true));
+      assertEquals(addressSettings.getDeadLetterAddress(), DLQ);
+      assertEquals(addressSettings.getExpiryAddress(), exp);
+      assertEquals(addressSettings.getMaxDeliveryAttempts(), Integer.valueOf(1000));
+      assertEquals(addressSettings.getMaxSizeBytes(), Integer.valueOf(1001));
+      assertEquals(addressSettings.getMessageCounterHistoryDayLimit(), Integer.valueOf(1002));
+      assertEquals(addressSettings.getRedeliveryDelay(), Long.valueOf(2003));
    }
 
    public void testMultipleMergeAll()
    {
-      QueueSettings queueSettings = new  QueueSettings();
-      QueueSettings queueSettingsToMerge = new QueueSettings();
-      queueSettingsToMerge.setClustered(true);
+      AddressSettings addressSettings = new AddressSettings();
+      AddressSettings addressSettingsToMerge = new AddressSettings();
+      addressSettingsToMerge.setClustered(true);
       SimpleString DLQ = new SimpleString("testDLQ");
       SimpleString exp = new SimpleString("testExpiryQueue");
-      queueSettingsToMerge.setDeadLetterAddress(DLQ);
-      queueSettingsToMerge.setExpiryAddress(exp);
-      queueSettingsToMerge.setMaxSizeBytes(1001);
-      queueSettingsToMerge.setRedeliveryDelay((long)1003);
-      queueSettings.merge(queueSettingsToMerge);
+      addressSettingsToMerge.setDeadLetterAddress(DLQ);
+      addressSettingsToMerge.setExpiryAddress(exp);
+      addressSettingsToMerge.setMaxSizeBytes(1001);
+      addressSettingsToMerge.setRedeliveryDelay((long)1003);
+      addressSettings.merge(addressSettingsToMerge);
 
-      QueueSettings queueSettingsToMerge2 = new QueueSettings();
-      queueSettingsToMerge2.setClustered(false);
+      AddressSettings addressSettingsToMerge2 = new AddressSettings();
+      addressSettingsToMerge2.setClustered(false);
       SimpleString exp2 = new SimpleString("testExpiryQueue2");
       SimpleString DLQ2 = new SimpleString("testDlq2");
-      queueSettingsToMerge2.setExpiryAddress(exp2);
-      queueSettingsToMerge2.setDeadLetterAddress(DLQ2);
-      queueSettingsToMerge2.setMaxDeliveryAttempts(2000);
-      queueSettingsToMerge2.setMaxSizeBytes(2001);
-      queueSettingsToMerge2.setMessageCounterHistoryDayLimit(2002);
-      queueSettingsToMerge2.setRedeliveryDelay((long)2003);
-      queueSettings.merge(queueSettingsToMerge2);
+      addressSettingsToMerge2.setExpiryAddress(exp2);
+      addressSettingsToMerge2.setDeadLetterAddress(DLQ2);
+      addressSettingsToMerge2.setMaxDeliveryAttempts(2000);
+      addressSettingsToMerge2.setMaxSizeBytes(2001);
+      addressSettingsToMerge2.setMessageCounterHistoryDayLimit(2002);
+      addressSettingsToMerge2.setRedeliveryDelay((long)2003);
+      addressSettings.merge(addressSettingsToMerge2);
 
-      assertEquals(queueSettings.getDistributionPolicy().getClass(), QueueSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
-      assertEquals(queueSettings.getDistributionPolicyClass(), null);
-      assertEquals(queueSettings.isClustered(), Boolean.valueOf(true));
-      assertEquals(queueSettings.getDeadLetterAddress(), DLQ);
-      assertEquals(queueSettings.getExpiryAddress(), exp);
-      assertEquals(queueSettings.getMaxDeliveryAttempts(), Integer.valueOf(2000));
-      assertEquals(queueSettings.getMaxSizeBytes(), Integer.valueOf(1001));
-      assertEquals(queueSettings.getMessageCounterHistoryDayLimit(), Integer.valueOf(2002));
-      assertEquals(queueSettings.getRedeliveryDelay(), Long.valueOf(1003));
+      assertEquals(addressSettings.getDistributionPolicy().getClass(), AddressSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
+      assertEquals(addressSettings.getDistributionPolicyClass(), null);
+      assertEquals(addressSettings.isClustered(), Boolean.valueOf(true));
+      assertEquals(addressSettings.getDeadLetterAddress(), DLQ);
+      assertEquals(addressSettings.getExpiryAddress(), exp);
+      assertEquals(addressSettings.getMaxDeliveryAttempts(), Integer.valueOf(2000));
+      assertEquals(addressSettings.getMaxSizeBytes(), Integer.valueOf(1001));
+      assertEquals(addressSettings.getMessageCounterHistoryDayLimit(), Integer.valueOf(2002));
+      assertEquals(addressSettings.getRedeliveryDelay(), Long.valueOf(1003));
    }
 }

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionImplTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionImplTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -34,7 +34,7 @@
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
 import org.jboss.messaging.core.settings.impl.HierarchicalObjectRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.core.transaction.Transaction;
 import org.jboss.messaging.core.transaction.impl.TransactionImpl;
 import org.jboss.messaging.tests.util.UnitTestCase;
@@ -50,14 +50,14 @@
 {
 	private final ScheduledExecutorService scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
 
-   private final HierarchicalRepository<QueueSettings> queueSettings = 
-   	new HierarchicalObjectRepository<QueueSettings>();
+   private final HierarchicalRepository<AddressSettings> queueSettings =
+   	new HierarchicalObjectRepository<AddressSettings>();
 	
    protected void setUp() throws Exception
    {
    	super.setUp();
    	
-   	queueSettings.setDefault(new QueueSettings());
+   	queueSettings.setDefault(new AddressSettings());
    }
    
    public void testFoo()

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSManagementServiceImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSManagementServiceImplTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSManagementServiceImplTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -45,7 +45,7 @@
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.jms.JBossQueue;
 import org.jboss.messaging.jms.JBossTopic;
 import org.jboss.messaging.jms.client.JBossConnectionFactory;
@@ -102,7 +102,7 @@
       expect(coreQueue.isDurable()).andReturn(true);
       PostOffice postOffice = createMock(PostOffice.class);
       StorageManager storageManager = createMock(StorageManager.class);
-      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
+      HierarchicalRepository<AddressSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
 
       ManagementService managementService = createMock(ManagementService.class);
       MessageCounterManager messageCounterManager = createMock(MessageCounterManager.class);
@@ -129,7 +129,7 @@
       JBossTopic topic = new JBossTopic(name);
       PostOffice postOffice = createMock(PostOffice.class);
       StorageManager storageManager = createMock(StorageManager.class);
-      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
+      HierarchicalRepository<AddressSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
 
       ManagementService managementService = createMock(ManagementService.class);
       managementService.registerInJMX(eq(objectName), isA(StandardMBean.class));

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSQueueControlTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSQueueControlTest.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSQueueControlTest.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -54,7 +54,7 @@
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.ServerMessage;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.jms.JBossQueue;
 import org.jboss.messaging.jms.server.management.impl.JMSQueueControl;
 import org.jboss.messaging.util.SimpleString;
@@ -79,7 +79,7 @@
 
    private StorageManager storageManager;
 
-   private HierarchicalRepository<QueueSettings> queueSettingsRepository;
+   private HierarchicalRepository<AddressSettings> queueSettingsRepository;
 
    private MessageCounter counter;
 
@@ -215,7 +215,7 @@
    {
       final String deadLetterAddress = randomString();
 
-      QueueSettings settings = new QueueSettings()
+      AddressSettings settings = new AddressSettings()
       {
          @Override
          public SimpleString getDeadLetterAddress()
@@ -237,7 +237,7 @@
    {
       final String expiryQueue = randomString();
 
-      QueueSettings settings = new QueueSettings()
+      AddressSettings settings = new AddressSettings()
       {
          @Override
          public SimpleString getExpiryAddress()

Modified: trunk/tests/src/org/jboss/messaging/tests/util/ServiceTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/util/ServiceTestBase.java	2009-02-03 13:03:37 UTC (rev 5795)
+++ trunk/tests/src/org/jboss/messaging/tests/util/ServiceTestBase.java	2009-02-03 13:20:44 UTC (rev 5796)
@@ -39,7 +39,7 @@
 import org.jboss.messaging.core.remoting.impl.invm.InVMConnectorFactory;
 import org.jboss.messaging.core.server.Messaging;
 import org.jboss.messaging.core.server.MessagingService;
-import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
 import org.jboss.messaging.integration.transports.netty.NettyAcceptorFactory;
 import org.jboss.messaging.integration.transports.netty.NettyConnectorFactory;
 import org.jboss.messaging.jms.client.JBossBytesMessage;
@@ -111,7 +111,7 @@
 
    protected MessagingService createService(final boolean realFiles,
                                             final Configuration configuration,
-                                            final Map<String, QueueSettings> settings)
+                                            final Map<String, AddressSettings> settings)
    {
 
       MessagingService service;
@@ -125,9 +125,9 @@
          service = Messaging.newNullStorageMessagingService(configuration);
       }
 
-      for (Map.Entry<String, QueueSettings> setting : settings.entrySet())
+      for (Map.Entry<String, AddressSettings> setting : settings.entrySet())
       {
-         service.getServer().getQueueSettingsRepository().addMatch(setting.getKey(), setting.getValue());
+         service.getServer().getAddressSettingsRepository().addMatch(setting.getKey(), setting.getValue());
       }
 
       return service;
@@ -135,12 +135,12 @@
 
    protected MessagingService createService(final boolean realFiles)
    {
-      return createService(realFiles, createDefaultConfig(), new HashMap<String, QueueSettings>());
+      return createService(realFiles, createDefaultConfig(), new HashMap<String, AddressSettings>());
    }
 
    protected MessagingService createService(final boolean realFiles, final Configuration configuration)
    {
-      return createService(realFiles, configuration, new HashMap<String, QueueSettings>());
+      return createService(realFiles, configuration, new HashMap<String, AddressSettings>());
    }
 
    protected MessagingService createClusteredServiceWithParams(final int index,
@@ -149,7 +149,7 @@
    {
       return createService(realFiles,
                            createClusteredDefaultConfig(index, params, INVM_ACCEPTOR_FACTORY),
-                           new HashMap<String, QueueSettings>());
+                           new HashMap<String, AddressSettings>());
    }
 
    protected Configuration createDefaultConfig()




More information about the jboss-cvs-commits mailing list