[jboss-cvs] JBoss Messaging SVN: r5573 - in trunk: src/main/org/jboss/messaging/core/persistence and 19 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Jan 3 06:31:19 EST 2009


Author: timfox
Date: 2009-01-03 06:31:18 -0500 (Sat, 03 Jan 2009)
New Revision: 5573

Modified:
   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/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/postoffice/PostOffice.java
   trunk/src/main/org/jboss/messaging/core/postoffice/impl/DuplicateIDCacheImpl.java
   trunk/src/main/org/jboss/messaging/core/postoffice/impl/PostOfficeImpl.java
   trunk/src/main/org/jboss/messaging/core/server/MessageReference.java
   trunk/src/main/org/jboss/messaging/core/server/Queue.java
   trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ForwarderImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/LinkImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/MessageReferenceImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/ServerConsumerImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java
   trunk/src/main/org/jboss/messaging/core/transaction/Transaction.java
   trunk/src/main/org/jboss/messaging/core/transaction/TransactionOperation.java
   trunk/src/main/org/jboss/messaging/core/transaction/impl/ResourceManagerImpl.java
   trunk/src/main/org/jboss/messaging/core/transaction/impl/TransactionImpl.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/main/org/jboss/messaging/jms/server/management/impl/TopicControl.java
   trunk/tests/jms-tests/src/org/jboss/test/messaging/jms/AcknowledgementTest.java
   trunk/tests/jms-tests/src/org/jboss/test/messaging/tools/container/LocalTestServer.java
   trunk/tests/src/org/jboss/messaging/tests/performance/persistence/FakePostOffice.java
   trunk/tests/src/org/jboss/messaging/tests/performance/persistence/StorageManagerTimingTest.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/server/impl/QueueImplTest.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/unit/jms/server/management/impl/TopicControlTest.java
Log:
Paging, routing, transactions refactoring part 3


Modified: trunk/src/main/org/jboss/messaging/core/management/impl/MessagingServerControl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/management/impl/MessagingServerControl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/management/impl/MessagingServerControl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -329,7 +329,7 @@
          {
             Queue queue = (Queue)binding.getBindable();
    
-            queue.deleteAllReferences(storageManager);
+            queue.deleteAllReferences(storageManager, postOffice, queueSettingsRepository);
          }
 
          postOffice.removeBinding(sName);
@@ -451,12 +451,7 @@
          if (XidImpl.toBase64String(xid).equals(transactionAsBase64))
          {
             Transaction transaction = resourceManager.removeTransaction(xid);
-            List<MessageReference> rolledBack = transaction.rollback(queueSettingsRepository);
-
-            ServerSessionImpl.moveReferencesBackToHeadOfQueues(rolledBack,
-                                                               postOffice,
-                                                               storageManager,
-                                                               queueSettingsRepository);
+            transaction.rollback();
             return true;
          }
       }

Modified: trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -264,7 +264,7 @@
    {
       try
       {
-         return queue.deleteAllReferences(storageManager);
+         return queue.deleteAllReferences(storageManager, postOffice, queueSettingsRepository);
       } catch (MessagingException e)
       {
          throw new IllegalStateException(e.getMessage());
@@ -275,7 +275,7 @@
    {
       try
       {
-         return queue.deleteReference(messageID, storageManager);
+         return queue.deleteReference(messageID, storageManager, postOffice, queueSettingsRepository);
       } catch (MessagingException e)
       {
          throw new IllegalStateException(e.getMessage());
@@ -285,7 +285,7 @@
    public int removeMatchingMessages(String filterStr) throws Exception
    {
       Filter filter = FilterImpl.createFilter(filterStr);
-      return queue.deleteMatchingReferences(filter, storageManager);
+      return queue.deleteMatchingReferences(filter, storageManager, postOffice, queueSettingsRepository);
    }
 
    public boolean expireMessage(final long messageID) throws Exception
@@ -316,7 +316,7 @@
                + otherQueueName);
       }
 
-      return queue.moveMessage(messageID, binding.getAddress(), storageManager, postOffice);
+      return queue.moveMessage(messageID, binding.getAddress(), storageManager, postOffice, queueSettingsRepository);
    }
    
    public int moveMatchingMessages(String filterStr, String otherQueueName) throws Exception
@@ -329,7 +329,7 @@
                + otherQueueName);
       }
 
-      return queue.moveMessages(filter, binding.getAddress(), storageManager, postOffice);
+      return queue.moveMessages(filter, binding.getAddress(), storageManager, postOffice, queueSettingsRepository);
    }
    
    public int moveAllMessages(String otherQueueName) throws Exception

Modified: trunk/src/main/org/jboss/messaging/core/persistence/StorageManager.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/persistence/StorageManager.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/persistence/StorageManager.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -36,6 +36,8 @@
 import org.jboss.messaging.core.server.MessagingComponent;
 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.transaction.ResourceManager;
 import org.jboss.messaging.util.Pair;
 import org.jboss.messaging.util.SimpleString;
@@ -63,13 +65,13 @@
    void updateDeliveryCount(MessageReference ref) throws Exception;
 
    void updateScheduledDeliveryTime(MessageReference ref) throws Exception;
-     
+
    void storeDuplicateID(SimpleString address, SimpleString duplID, long recordID) throws Exception;
 
    void updateDuplicateID(SimpleString address, SimpleString duplID, long recordID) throws Exception;
-   
+
    void deleteDuplicateID(long recordID) throws Exception;
-     
+
    void storeMessageTransactional(long txID, ServerMessage message) throws Exception;
 
    void storeAcknowledgeTransactional(long txID, long queueID, long messageID) throws Exception;
@@ -81,7 +83,7 @@
    void storeDuplicateIDTransactional(long txID, SimpleString address, SimpleString duplID, long recordID) throws Exception;
 
    void updateDuplicateIDTransactional(long txID, SimpleString address, SimpleString duplID, long recordID) throws Exception;
-   
+
    void deleteDuplicateIDTransactional(long txID, long recordID) throws Exception;
 
    LargeServerMessage createLargeMessage();
@@ -97,6 +99,8 @@
    void deletePageTransactional(long txID, long recordID) throws Exception;
 
    void loadMessageJournal(PostOffice postOffice,
+                           StorageManager storageManager,
+                           HierarchicalRepository<QueueSettings> queueSettingsRepository,
                            Map<Long, Queue> queues,
                            ResourceManager resourceManager,
                            Map<SimpleString, List<Pair<SimpleString, 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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -74,6 +74,8 @@
 import org.jboss.messaging.core.server.Queue;
 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.transaction.ResourceManager;
 import org.jboss.messaging.core.transaction.Transaction;
 import org.jboss.messaging.core.transaction.impl.TransactionImpl;
@@ -406,6 +408,8 @@
    }
 
    public void loadMessageJournal(final PostOffice postOffice,
+                                  final StorageManager storageManager,
+                                  final HierarchicalRepository<QueueSettings> queueSettingsRepository,
                                   final Map<Long, Queue> queues,
                                   final ResourceManager resourceManager,
                                   final Map<SimpleString, List<Pair<SimpleString, Long>>> duplicateIDMap) throws Exception
@@ -563,7 +567,7 @@
          }
       }
 
-      loadPreparedTransactions(postOffice, queues, resourceManager, preparedTransactions, duplicateIDMap);
+      loadPreparedTransactions(postOffice, storageManager, queueSettingsRepository, queues, resourceManager, preparedTransactions, duplicateIDMap);
    }
 
    // Bindings operations
@@ -829,6 +833,8 @@
    // Private ----------------------------------------------------------------------------------
 
    private void loadPreparedTransactions(final PostOffice postOffice,
+                                         final StorageManager storageManager,
+                                         final HierarchicalRepository<QueueSettings> queueSettingsRepository,
                                          final Map<Long, Queue> queues,
                                          final ResourceManager resourceManager,
                                          final List<PreparedTransactionInfo> preparedTransactions,
@@ -981,7 +987,7 @@
 
          for (MessageReference ack : referencesToAck)
          {
-            tx.addAckTempUntilNextRefactoring(ack);
+            ack.reacknowledge(tx, storageManager, postOffice, queueSettingsRepository);
          }
 
          tx.setState(Transaction.State.PREPARED);

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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageManager.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -36,6 +36,8 @@
 import org.jboss.messaging.core.server.MessageReference;
 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.transaction.ResourceManager;
 import org.jboss.messaging.util.IDGenerator;
 import org.jboss.messaging.util.Pair;
@@ -205,6 +207,8 @@
    }
 
    public void loadMessageJournal(final PostOffice postOffice,
+                                  final StorageManager storageManager,
+                                  final HierarchicalRepository<QueueSettings> queueSettingsRepository,
                                   final Map<Long, Queue> queues,
                                   final ResourceManager resourceManager,
                                   final Map<SimpleString, List<Pair<SimpleString, Long>>> duplicateIDMap) throws Exception

Modified: trunk/src/main/org/jboss/messaging/core/postoffice/PostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/postoffice/PostOffice.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/postoffice/PostOffice.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -82,6 +82,8 @@
 
    Binding getBinding(SimpleString name);
 
+   void route(ServerMessage message) throws Exception;
+   
    void route(ServerMessage message, Transaction tx) throws Exception;
 
    Set<SimpleString> listAllDestinations();

Modified: trunk/src/main/org/jboss/messaging/core/postoffice/impl/DuplicateIDCacheImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/postoffice/impl/DuplicateIDCacheImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/postoffice/impl/DuplicateIDCacheImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -246,29 +246,29 @@
          }
       }
       
-      public void beforeCommit() throws Exception
+      public void beforeCommit(final Transaction tx) throws Exception
       {
       }
 
-      public void beforePrepare() throws Exception
+      public void beforePrepare(final Transaction tx) throws Exception
       {
       }
 
-      public void beforeRollback() throws Exception
+      public void beforeRollback(final Transaction tx) throws Exception
       {
       }
 
-      public void afterCommit() throws Exception
+      public void afterCommit(final Transaction tx) throws Exception
       {
          process();
       }
 
-      public void afterPrepare() throws Exception
+      public void afterPrepare(final Transaction tx) throws Exception
       {
          process();
       }
 
-      public void afterRollback() throws Exception
+      public void afterRollback(final Transaction tx) throws Exception
       {
       }
 

Modified: trunk/src/main/org/jboss/messaging/core/postoffice/impl/PostOfficeImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/postoffice/impl/PostOfficeImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/postoffice/impl/PostOfficeImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -550,7 +550,7 @@
 
       Map<SimpleString, List<Pair<SimpleString, Long>>> duplicateIDMap = new HashMap<SimpleString, List<Pair<SimpleString, Long>>>();
 
-      storageManager.loadMessageJournal(this, queues, resourceManager, duplicateIDMap);
+      storageManager.loadMessageJournal(this, storageManager, queueSettingsRepository, queues, resourceManager, duplicateIDMap);
 
       for (Map.Entry<SimpleString, List<Pair<SimpleString, Long>>> entry : duplicateIDMap.entrySet())
       {

Modified: trunk/src/main/org/jboss/messaging/core/server/MessageReference.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/MessageReference.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/MessageReference.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -18,7 +18,7 @@
  * 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;
 
@@ -41,48 +41,72 @@
  * $Id: MessageReference.java 3020 2007-08-21 15:46:38Z timfox $
  */
 public interface MessageReference
-{      
+{
    ServerMessage getMessage();
-   
+
    MessageReference copy(Queue queue);
-   
+
+   void acknowledge(final Transaction tx,
+                    final StorageManager storageManager,
+                    final PostOffice postOffice,
+                    final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+
+   void reacknowledge(final Transaction tx,
+                      final StorageManager storageManager,
+                      final PostOffice postOffice,
+                      final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+
    /**
     * 
     * @return The time in the future that delivery will be delayed until, or zero if
     * no scheduled delivery will occur
     */
    long getScheduledDeliveryTime();
-   
+
    void setScheduledDeliveryTime(long scheduledDeliveryTime);
-   
+
    int getMemoryEstimate();
 
    int getDeliveryCount();
-   
-   void setDeliveryCount(int deliveryCount);        
-   
+
+   void setDeliveryCount(int deliveryCount);
+
    void incrementDeliveryCount();
-   
+
    Queue getQueue();
-   
-   boolean cancel(StorageManager storageManager, PostOffice postOffice,
-   		         HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;  
-   
-   void sendToDeadLetterAddress(StorageManager storageManager, PostOffice postOffice,
-                  HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
-   
-   void expire(StorageManager storageManager, PostOffice postOffice,
-         HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
+   void cancel(Transaction tx,
+               StorageManager storageManager,
+               PostOffice postOffice,
+               HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+
+   // boolean cancel(StorageManager storageManager,
+   // PostOffice postOffice,
+   // HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+
+   void sendToDeadLetterAddress(StorageManager storageManager,
+                                PostOffice postOffice,
+                                HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+
+   void expire(StorageManager storageManager,
+               PostOffice postOffice,
+               HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+
    void expire(Transaction tx,
                StorageManager storageManager,
                PostOffice postOffice,
                HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
-   void move(SimpleString toAddress, StorageManager persistenceManager, PostOffice postOffice) throws Exception;
+   void move(SimpleString toAddress,
+             StorageManager persistenceManager,
+             PostOffice postOffice,
+             HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
-   void move(SimpleString toAddress, Transaction tx, StorageManager persistenceManager, PostOffice postOffice, boolean expiry) throws Exception;
+   void move(SimpleString toAddress,
+             Transaction tx,
+             StorageManager persistenceManager,
+             PostOffice postOffice,
+             HierarchicalRepository<QueueSettings> queueSettingsRepository,
+             boolean expiry) throws Exception;
 
 }
-
-

Modified: trunk/src/main/org/jboss/messaging/core/server/Queue.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/Queue.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/Queue.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -18,7 +18,7 @@
  * 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;
 
@@ -33,7 +33,6 @@
 import org.jboss.messaging.core.settings.impl.QueueSettings;
 import org.jboss.messaging.util.SimpleString;
 
-
 /**
  * 
  * A Queue
@@ -44,76 +43,82 @@
  *
  */
 public interface Queue extends Bindable
-{     
+{
    void addLast(MessageReference ref);
-   
+
    void addFirst(MessageReference ref);
-   
+
    /**
     * This method is used to add a List of MessageReferences atomically at the head of the list.
     * Useful when cancelling messages and guaranteeing ordering
     * @param list
     */
    void addListFirst(LinkedList<MessageReference> list);
-         
+
    void deliverAsync(Executor executor);
-   
+
    void addConsumer(Consumer consumer);
 
    boolean removeConsumer(Consumer consumer) throws Exception;
-   
+
    int getConsumerCount();
-   
+
    List<MessageReference> list(Filter filter);
-   
+
    int getMessageCount();
-   
+
    int getDeliveringCount();
-   
+
    void referenceAcknowledged(MessageReference ref) throws Exception;
-  
+
    void referenceCancelled();
 
    void referenceHandled();
-   
+
    int getScheduledCount();
-   
+
    List<MessageReference> getScheduledMessages();
 
    Distributor getDistributionPolicy();
-   
-   void setDistributionPolicy(Distributor policy); 
-   
+
+   void setDistributionPolicy(Distributor policy);
+
    boolean isClustered();
-    
+
    boolean isDurable();
-   
+
    boolean isTemporary();
-   
+
    SimpleString getName();
-   
+
    int getMessagesAdded();
 
    MessageReference removeReferenceWithID(long id) throws Exception;
-   
+
    /** Remove message from queue, add it to the scheduled delivery list without affect reference counting */
    void rescheduleDelivery(long id, long scheduledDeliveryTime);
-   
+
    MessageReference getReference(long id);
-   
-   int deleteAllReferences(StorageManager storageManager) throws Exception;
 
-   boolean deleteReference(long messageID, StorageManager storageManager)
-         throws Exception;
+   int deleteAllReferences(StorageManager storageManager,
+                           PostOffice postOffice,
+                           HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
-   int deleteMatchingReferences(Filter filter, StorageManager storageManager)
-         throws Exception;
+   boolean deleteReference(long messageID,
+                           StorageManager storageManager,
+                           PostOffice postOffice,
+                           HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
-   boolean expireMessage(long messageID, StorageManager storageManager,
-         PostOffice postOffice,
-         HierarchicalRepository<QueueSettings> queueSettingsRepository)
-         throws Exception;
+   int deleteMatchingReferences(Filter filter,
+                                StorageManager storageManager,
+                                PostOffice postOffice,
+                                HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
+   boolean expireMessage(long messageID,
+                         StorageManager storageManager,
+                         PostOffice postOffice,
+                         HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+
    /**
     * Flagged all the messages in the queue which matches the filter as <em>expired</em>
     */
@@ -123,37 +128,45 @@
                       HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
    void expireMessages(final StorageManager storageManager,
-                                final PostOffice postOffice,
-                                final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+                       final PostOffice postOffice,
+                       final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
-   boolean sendMessageToDeadLetterAddress(long messageID, StorageManager storageManager,
-         PostOffice postOffice,
-         HierarchicalRepository<QueueSettings> queueSettingsRepository)
-         throws Exception;
+   boolean sendMessageToDeadLetterAddress(long messageID,
+                                          StorageManager storageManager,
+                                          PostOffice postOffice,
+                                          HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
-   boolean changeMessagePriority(long messageID, byte newPriority,
-         StorageManager storageManager, PostOffice postOffice,
-         HierarchicalRepository<QueueSettings> queueSettingsRepository)
-         throws Exception;
+   boolean changeMessagePriority(long messageID,
+                                 byte newPriority,
+                                 StorageManager storageManager,
+                                 PostOffice postOffice,
+                                 HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
-   boolean moveMessage(long messageID, SimpleString toAddress,
-         StorageManager storageManager, PostOffice postOffice) throws Exception;
+   boolean moveMessage(long messageID,
+                       SimpleString toAddress,
+                       StorageManager storageManager,
+                       PostOffice postOffice,
+                       HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
-   int moveMessages(Filter filter, SimpleString toAddress, StorageManager storageManager, PostOffice postOffice) throws Exception;
+   int moveMessages(Filter filter,
+                    SimpleString toAddress,
+                    StorageManager storageManager,
+                    PostOffice postOffice,
+                    HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
    void setBackup();
-   
+
    boolean activate();
-   
+
    void activateNow(Executor executor);
-   
+
    boolean isBackup();
-   
+
    MessageReference removeFirst();
-   
-   boolean consumerFailedOver();   
-   
-   //Only used in testing
+
+   boolean consumerFailedOver();
+
+   // Only used in testing
    void deliverNow();
 
 }

Modified: trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ForwarderImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ForwarderImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ForwarderImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -227,8 +227,7 @@
    // Consumer implementation ---------------------------------------
 
    public HandleStatus handle(final MessageReference reference) throws Exception
-   {
-      log.info("Got message, busy: " + busy);
+   {      
       if (busy)
       {
          return HandleStatus.BUSY;
@@ -349,8 +348,8 @@
                break;
             }
 
-            tx.addAcknowledgement(ref);
-
+            ref.acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
+            
             ServerMessage message = ref.getMessage();
 
             if (transformer != null)
@@ -381,7 +380,7 @@
 
          try
          {
-            tx.rollback(queueSettingsRepository);
+            tx.rollback();
          }
          catch (Exception e2)
          {

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/LinkImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/LinkImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/LinkImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -25,6 +25,8 @@
 import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_DUPLICATE_DETECTION_ID;
 import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ORIGIN_QUEUE;
 
+import java.nio.ByteBuffer;
+
 import org.jboss.messaging.core.filter.Filter;
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.message.impl.MessageImpl;
@@ -48,7 +50,6 @@
 public class LinkImpl implements Link
 {
    private static final Logger log = Logger.getLogger(LinkImpl.class);
-
    
    private final PostOffice postOffice;
 
@@ -103,8 +104,16 @@
       
       if (duplicateDetection)
       {
-         SimpleString duplID = new SimpleString(String.valueOf(copy.getMessageID())).concat(name);
+         //We put the duplicate detection id in
          
+         byte[] bytes = new byte[8];
+         
+         ByteBuffer bb = ByteBuffer.wrap(bytes);
+         
+         bb.putLong(copy.getMessageID());
+         
+         SimpleString duplID = new SimpleString(bytes).concat(name);
+         
          copy.putStringProperty(HDR_DUPLICATE_DETECTION_ID, duplID);
       }
       

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/MessageReferenceImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/MessageReferenceImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/MessageReferenceImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -26,11 +26,15 @@
 import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ORIGIN_QUEUE;
 import static org.jboss.messaging.core.message.impl.MessageImpl.HDR_ORIG_MESSAGE_ID;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.persistence.StorageManager;
-import org.jboss.messaging.core.postoffice.Binding;
 import org.jboss.messaging.core.postoffice.Bindings;
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.MessageReference;
@@ -39,6 +43,8 @@
 import org.jboss.messaging.core.settings.HierarchicalRepository;
 import org.jboss.messaging.core.settings.impl.QueueSettings;
 import org.jboss.messaging.core.transaction.Transaction;
+import org.jboss.messaging.core.transaction.TransactionOperation;
+import org.jboss.messaging.core.transaction.TransactionPropertyIndexes;
 import org.jboss.messaging.core.transaction.impl.TransactionImpl;
 import org.jboss.messaging.util.DataConstants;
 import org.jboss.messaging.util.SimpleString;
@@ -64,9 +70,9 @@
    private ServerMessage message;
 
    private Queue queue;
-   
+
    // Static --------------------------------------------------------
-   
+
    // Constructors --------------------------------------------------
 
    public MessageReferenceImpl(final MessageReferenceImpl other, final Queue queue)
@@ -95,14 +101,15 @@
 
    public int getMemoryEstimate()
    {
-      // from few tests I have done, deliveryCount and scheduledDelivery will use  two longs (because of alignment)
-      // and each of the references (messages and queue) will use the equivalent to two longs (because of long pointers).
+      // from few tests I have done, deliveryCount and scheduledDelivery will use two longs (because of alignment)
+      // and each of the references (messages and queue) will use the equivalent to two longs (because of long
+      // pointers).
       // Anyway.. this is just an estimate
-      
-      //TODO - doesn't the object itself have an overhead? - I thought was usually one Long per Object?
+
+      // TODO - doesn't the object itself have an overhead? - I thought was usually one Long per Object?
       return DataConstants.SIZE_LONG * 4;
    }
-   
+
    public int getDeliveryCount()
    {
       return deliveryCount;
@@ -138,21 +145,23 @@
       return queue;
    }
 
-   public boolean cancel(final StorageManager storageManager,
-                         final PostOffice postOffice,
-                         final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+   private boolean cancel(final StorageManager storageManager,
+                          final PostOffice postOffice,
+                          final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
       if (message.isDurable() && queue.isDurable())
-      {
+      {         
          storageManager.updateDeliveryCount(this);
       }
 
       QueueSettings queueSettings = queueSettingsRepository.getMatch(queue.getName().toString());
+
       int maxDeliveries = queueSettings.getMaxDeliveryAttempts();
 
       if (maxDeliveries > 0 && deliveryCount >= maxDeliveries)
       {
          log.warn("Message has reached maximum delivery attempts, sending it to Dead Letter Address");
+
          sendToDeadLetterAddress(storageManager, postOffice, queueSettingsRepository);
 
          return false;
@@ -167,13 +176,14 @@
 
             storageManager.updateScheduledDeliveryTime(this);
          }
+
          queue.referenceCancelled();
 
          return true;
       }
    }
 
-   public void sendToDeadLetterAddress(final StorageManager persistenceManager,
+   public void sendToDeadLetterAddress(final StorageManager storageManager,
                                        final PostOffice postOffice,
                                        final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
@@ -182,7 +192,7 @@
       if (deadLetterAddress != null)
       {
          Bindings bindingList = postOffice.getBindingsForAddress(deadLetterAddress);
-         
+
          if (bindingList.getBindings().isEmpty())
          {
             log.warn("Message has exceeded max delivery attempts. No bindings for Dead Letter Address " + deadLetterAddress +
@@ -190,7 +200,7 @@
          }
          else
          {
-            move(deadLetterAddress, persistenceManager, postOffice, false);
+            move(deadLetterAddress, storageManager, postOffice, queueSettingsRepository, false);
          }
       }
       else
@@ -198,13 +208,15 @@
          log.warn("Message has exceeded max delivery attempts. No Dead Letter Address configured for queue " + queue.getName() +
                   " so dropping it");
 
-         Transaction tx = new TransactionImpl(persistenceManager, postOffice);
-         tx.addAcknowledgement(this);
+         Transaction tx = new TransactionImpl(storageManager, postOffice);
+
+         acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
+
          tx.commit();
       }
    }
 
-   public void expire(final StorageManager persistenceManager,
+   public void expire(final StorageManager storageManager,
                       final PostOffice postOffice,
                       final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
@@ -213,27 +225,29 @@
       if (expiryAddress != null)
       {
          Bindings bindingList = postOffice.getBindingsForAddress(expiryAddress);
-         
+
          if (bindingList.getBindings().isEmpty())
          {
             log.warn("Message has expired. No bindings for Expiry Address " + expiryAddress + " so dropping it");
          }
          else
          {
-            move(expiryAddress, persistenceManager, postOffice, true);
+            move(expiryAddress, storageManager, postOffice, queueSettingsRepository, true);
          }
       }
       else
       {
          log.warn("Message has expired. No expiry queue configured for queue " + queue.getName() + " so dropping it");
 
-         Transaction tx = new TransactionImpl(persistenceManager, postOffice);
-         tx.addAcknowledgement(this);
+         Transaction tx = new TransactionImpl(storageManager, postOffice);
+
+         acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
+
          tx.commit();
       }
 
    }
-   
+
    public void expire(final Transaction tx,
                       final StorageManager storageManager,
                       final PostOffice postOffice,
@@ -244,40 +258,107 @@
       if (expiryAddress != null)
       {
          Bindings bindingList = postOffice.getBindingsForAddress(expiryAddress);
-         
+
          if (bindingList.getBindings().isEmpty())
          {
             log.warn("Message has expired. No bindings for Expiry Address " + expiryAddress + " so dropping it");
          }
          else
          {
-            move(expiryAddress, tx, storageManager, postOffice, true);
+            move(expiryAddress, tx, storageManager, postOffice, queueSettingsRepository, true);
          }
       }
       else
       {
          log.warn("Message has expired. No expiry queue configured for queue " + queue.getName() + " so dropping it");
 
-         tx.addAcknowledgement(this);
+         acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
       }
    }
 
-   public void move(final SimpleString toAddress, final StorageManager persistenceManager, final PostOffice postOffice) throws Exception
+   public void move(final SimpleString toAddress,
+                    final StorageManager storageManager,
+                    final PostOffice postOffice,
+                    final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
-      move(toAddress, persistenceManager, postOffice, false);
+      move(toAddress, storageManager, postOffice, queueSettingsRepository, false);
    }
-   
-   public void move(final SimpleString toAddress, final Transaction tx, final StorageManager persistenceManager, final PostOffice postOffice, final boolean expiry) throws Exception
+
+   public void move(final SimpleString toAddress,
+                    final Transaction tx,
+                    final StorageManager storageManager,
+                    final PostOffice postOffice,
+                    final HierarchicalRepository<QueueSettings> queueSettingsRepository,
+                    final boolean expiry) throws Exception
    {
-      ServerMessage copyMessage = makeCopy(expiry, persistenceManager);
+      ServerMessage copyMessage = makeCopy(expiry, storageManager);
 
       copyMessage.setDestination(toAddress);
 
       postOffice.route(copyMessage, tx);
 
-      tx.addAcknowledgement(this);
+      acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
    }
 
+   public void acknowledge(final Transaction tx,
+                           final StorageManager storageManager,
+                           final PostOffice postOffice,
+                           final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+   {
+      if (message.isDurable() && queue.isDurable())
+      {
+         // Need to lock on the message to prevent a race where the ack and
+         // delete
+         // records get recorded in the log in the wrong order
+
+         // TODO For now - we just use synchronized - can probably do better
+         // locking
+
+         synchronized (message)
+         {
+            int count = message.decrementDurableRefCount();
+            
+            if (count == 0)
+            {
+               storageManager.deleteMessageTransactional(tx.getID(), queue.getPersistenceID(), message.getMessageID());
+            }
+            else
+            {
+               storageManager.storeAcknowledgeTransactional(tx.getID(),
+                                                            queue.getPersistenceID(),
+                                                            message.getMessageID());
+            }
+
+            tx.setContainsPersistent(true);
+         }
+      }
+
+      tx.addOperation(new AcknowledgeOperation(storageManager, postOffice, queueSettingsRepository));
+   }
+
+   public void cancel(final Transaction tx,
+                      final StorageManager storageManager,
+                      final PostOffice postOffice,
+                      final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+   { 
+      message.decrementDurableRefCount();
+      
+      tx.addOperation(new AcknowledgeOperation(storageManager, postOffice, queueSettingsRepository));
+   }
+
+   public void reacknowledge(final Transaction tx,
+                             final StorageManager storageManager,
+                             final PostOffice postOffice,
+                             final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+   {
+      if (message.isDurable() && queue.isDurable())
+      {
+         tx.setContainsPersistent(true);
+      }
+
+      tx.addOperation(new AcknowledgeOperation(storageManager, postOffice, queueSettingsRepository));
+   }
+
    // Public --------------------------------------------------------
 
    public String toString()
@@ -294,22 +375,21 @@
    // Private -------------------------------------------------------
 
    private void move(final SimpleString address,
-                     final StorageManager persistenceManager,
+                     final StorageManager storageManager,
                      final PostOffice postOffice,
+                     final HierarchicalRepository<QueueSettings> queueSettingsRepository,
                      final boolean expiry) throws Exception
    {
-      Transaction tx = new TransactionImpl(persistenceManager, postOffice);
+      Transaction tx = new TransactionImpl(storageManager, postOffice);
 
       // FIXME: JBMESSAGING-1468
-      ServerMessage copyMessage = makeCopy(expiry, persistenceManager);
+      ServerMessage copyMessage = makeCopy(expiry, storageManager);
 
       copyMessage.setDestination(address);
 
-      //tx.addMessage(copyMessage);
-      
       postOffice.route(copyMessage, tx);
 
-      tx.addAcknowledgement(this);
+      acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
 
       tx.commit();
    }
@@ -352,4 +432,101 @@
 
    // Inner classes -------------------------------------------------
 
+   private class AcknowledgeOperation implements TransactionOperation
+   {
+      final StorageManager storageManager;
+
+      final PostOffice postOffice;
+
+      final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+
+      AcknowledgeOperation(final StorageManager storageManager,
+                           final PostOffice postOffice,
+                           final HierarchicalRepository<QueueSettings> queueSettingsRepository)
+      {
+         this.storageManager = storageManager;
+
+         this.postOffice = postOffice;
+
+         this.queueSettingsRepository = queueSettingsRepository;
+      }
+
+      public void afterCommit(final Transaction tx) throws Exception
+      {
+      }
+
+      public void afterPrepare(final Transaction tx) throws Exception
+      {
+      }
+
+      public void afterRollback(final Transaction tx) throws Exception
+      {         
+         if (message.isDurable() && queue.isDurable())
+         {
+            message.incrementDurableRefCount();
+         }
+
+         if (cancel(storageManager, postOffice, queueSettingsRepository))
+         {
+            Map<Queue, LinkedList<MessageReference>> queueMap = (Map<Queue, LinkedList<MessageReference>>)tx.getProperty(TransactionPropertyIndexes.QUEUE_MAP_INDEX);
+
+            if (queueMap == null)
+            {
+               queueMap = new HashMap<Queue, LinkedList<MessageReference>>();
+
+               tx.putProperty(TransactionPropertyIndexes.QUEUE_MAP_INDEX, queueMap);
+            }
+
+            Queue queue = MessageReferenceImpl.this.getQueue();
+
+            LinkedList<MessageReference> toCancel = queueMap.get(queue);
+
+            if (toCancel == null)
+            {
+               toCancel = new LinkedList<MessageReference>();
+
+               queueMap.put(queue, toCancel);
+            }
+
+            toCancel.add(MessageReferenceImpl.this);
+
+            AtomicInteger rollbackCount = (AtomicInteger)tx.getProperty(TransactionPropertyIndexes.ROLLBACK_COUNTER_INDEX);
+
+            if (rollbackCount.decrementAndGet() == 0)
+            {
+               for (Map.Entry<Queue, LinkedList<MessageReference>> entry : queueMap.entrySet())
+               {
+                  LinkedList<MessageReference> refs = entry.getValue();
+                 
+                  entry.getKey().addListFirst(refs);
+               }
+            }
+         }
+      }
+
+      public void beforeCommit(final Transaction tx) throws Exception
+      {
+         queue.referenceAcknowledged(MessageReferenceImpl.this);
+      }
+
+      public void beforePrepare(final Transaction tx) throws Exception
+      {
+      }
+
+      public void beforeRollback(final Transaction tx) throws Exception
+      {
+         AtomicInteger rollbackCount = (AtomicInteger)tx.getProperty(TransactionPropertyIndexes.ROLLBACK_COUNTER_INDEX);
+
+         if (rollbackCount == null)
+         {
+            rollbackCount = new AtomicInteger(0);
+
+            tx.putProperty(TransactionPropertyIndexes.ROLLBACK_COUNTER_INDEX, rollbackCount);
+         }
+
+         rollbackCount.incrementAndGet();
+      }
+
+   }
+
 }
\ No newline at end of file

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -222,10 +222,7 @@
       pagingManager.start();
 
       resourceManager = new ResourceManagerImpl((int)configuration.getTransactionTimeout() / 1000,
-                                                configuration.getTransactionTimeoutScanPeriod(),
-                                                storageManager,
-                                                postOffice,
-                                                queueSettingsRepository);
+                                                configuration.getTransactionTimeoutScanPeriod());
       postOffice = new PostOfficeImpl(storageManager,
                                       pagingManager,
                                       queueFactory,

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -313,28 +313,28 @@
          this.first = first;
       }
 
-      public void afterCommit() throws Exception
+      public void afterCommit(final Transaction tx) throws Exception
       {
          addLast(ref);
       }
 
-      public void afterPrepare() throws Exception
+      public void afterPrepare(final Transaction tx) throws Exception
       {
       }
 
-      public void afterRollback() throws Exception
+      public void afterRollback(final Transaction tx) throws Exception
       {
       }
 
-      public void beforeCommit() throws Exception
+      public void beforeCommit(final Transaction tx) throws Exception
       {         
       }
 
-      public void beforePrepare() throws Exception
+      public void beforePrepare(final Transaction tx) throws Exception
       {
       }
 
-      public void beforeRollback() throws Exception
+      public void beforeRollback(final Transaction tx) throws Exception
       {
          ServerMessage msg = ref.getMessage();
          
@@ -539,7 +539,7 @@
    }
 
    public void setPersistenceID(final long id)
-   {
+   {      
       this.persistenceID = id;
    }
 
@@ -598,12 +598,16 @@
       return messagesAdded.get();
    }
 
-   public synchronized int deleteAllReferences(final StorageManager storageManager) throws Exception
-   {
-      return deleteMatchingReferences(null, storageManager);
+   public synchronized int deleteAllReferences(final StorageManager storageManager,
+                                               final PostOffice postOffice,
+                                               final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+   {      
+      return deleteMatchingReferences(null, storageManager, postOffice, queueSettingsRepository);
    }
 
-   public synchronized int deleteMatchingReferences(final Filter filter, final StorageManager storageManager) throws Exception
+   public synchronized int deleteMatchingReferences(final Filter filter, final StorageManager storageManager,
+                                                    final PostOffice postOffice,
+                                                    final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
       int count = 0;
 
@@ -618,7 +622,7 @@
          if (filter == null || filter.match(ref.getMessage()))
          {
             deliveringCount.incrementAndGet();
-            tx.addAcknowledgement(ref);
+            ref.acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
             iter.remove();
             count++;
          }
@@ -630,7 +634,7 @@
          if (filter == null || filter.match(messageReference.getMessage()))
          {
             deliveringCount.incrementAndGet();
-            tx.addAcknowledgement(messageReference);
+            messageReference.acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
             count++;
          }
       }
@@ -640,7 +644,9 @@
       return count;
    }
 
-   public synchronized boolean deleteReference(final long messageID, final StorageManager storageManager) throws Exception
+   public synchronized boolean deleteReference(final long messageID, final StorageManager storageManager,
+                                               final PostOffice postOffice,
+                                               final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
       boolean deleted = false;
 
@@ -654,7 +660,7 @@
          if (ref.getMessage().getMessageID() == messageID)
          {
             deliveringCount.incrementAndGet();
-            tx.addAcknowledgement(ref);
+            ref.acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
             iter.remove();
             deleted = true;
             break;
@@ -754,7 +760,8 @@
    public boolean moveMessage(final long messageID,
                               final SimpleString toAddress,
                               final StorageManager storageManager,
-                              final PostOffice postOffice) throws Exception
+                              final PostOffice postOffice,
+                              final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
       Iterator<MessageReference> iter = messageReferences.iterator();
 
@@ -764,7 +771,7 @@
          if (ref.getMessage().getMessageID() == messageID)
          {
             deliveringCount.incrementAndGet();
-            ref.move(toAddress, storageManager, postOffice);
+            ref.move(toAddress, storageManager, postOffice, queueSettingsRepository);
             iter.remove();
             return true;
          }
@@ -775,7 +782,8 @@
    public synchronized int moveMessages(final Filter filter,
                                         final SimpleString toAddress,
                                         final StorageManager storageManager,
-                                        final PostOffice postOffice) throws Exception
+                                        final PostOffice postOffice,
+                                        final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
       Transaction tx = new TransactionImpl(storageManager, postOffice);
 
@@ -788,7 +796,7 @@
          if (filter == null || filter.match(ref.getMessage()))
          {
             deliveringCount.incrementAndGet();
-            ref.move(toAddress, tx, storageManager, postOffice, false);
+            ref.move(toAddress, tx, storageManager, postOffice, queueSettingsRepository, false);
             iter.remove();
             count++;
          }
@@ -800,8 +808,8 @@
          if (filter == null || filter.match(ref.getMessage()))
          {
             deliveringCount.incrementAndGet();
-            ref.move(toAddress, tx, storageManager, postOffice, false);
-            tx.addAcknowledgement(ref);
+            ref.move(toAddress, tx, storageManager, postOffice, queueSettingsRepository, false);
+            ref.acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
             count++;
          }
       }
@@ -829,7 +837,7 @@
 
             // FIXME - why deleting the reference?? This will delete it from storage!!
 
-            deleteReference(messageID, storageManager);
+            deleteReference(messageID, storageManager, postOffice, queueSettingsRepository);
             addLast(ref);
             return true;
          }

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/ServerConsumerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/ServerConsumerImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/ServerConsumerImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -46,15 +46,16 @@
 import org.jboss.messaging.core.remoting.impl.wireformat.SessionReplicateDeliveryMessage;
 import org.jboss.messaging.core.remoting.spi.MessagingBuffer;
 import org.jboss.messaging.core.server.HandleStatus;
+import org.jboss.messaging.core.server.LargeServerMessage;
 import org.jboss.messaging.core.server.MessageReference;
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.ServerConsumer;
-import org.jboss.messaging.core.server.LargeServerMessage;
 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.transaction.Transaction;
+import org.jboss.messaging.core.transaction.impl.TransactionImpl;
 
 /**
  * Concrete implementation of a ClientConsumer.
@@ -247,21 +248,17 @@
       Iterator<MessageReference> iter = refs.iterator();
 
       closed = true;
+      
+      Transaction tx = new TransactionImpl(storageManager, postOffice);
 
       while (iter.hasNext())
       {
          MessageReference ref = iter.next();
-
-         if (!ref.cancel(storageManager, postOffice, queueSettingsRepository))
-         {
-            iter.remove();
-         }
+         
+         ref.cancel(tx, storageManager, postOffice, queueSettingsRepository);         
       }
-
-      if (!refs.isEmpty())
-      {
-         messageQueue.addListFirst(refs);
-      }
+      
+      tx.rollback();
    }
 
    public LinkedList<MessageReference> cancelRefs() throws Exception
@@ -355,7 +352,7 @@
          }
          else
          {
-            tx.addAcknowledgement(ref);
+            ref.acknowledge(tx, storageManager, postOffice, queueSettingsRepository);
 
             // Del count is not actually updated in storage unless it's
             // cancelled

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -14,9 +14,7 @@
 
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -33,12 +31,10 @@
 import org.jboss.messaging.core.filter.impl.FilterImpl;
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.management.ManagementService;
-import org.jboss.messaging.core.message.impl.MessageImpl;
 import org.jboss.messaging.core.persistence.StorageManager;
 import org.jboss.messaging.core.postoffice.Binding;
 import org.jboss.messaging.core.postoffice.BindingType;
 import org.jboss.messaging.core.postoffice.Bindings;
-import org.jboss.messaging.core.postoffice.DuplicateIDCache;
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.remoting.Channel;
 import org.jboss.messaging.core.remoting.DelayedResult;
@@ -81,18 +77,19 @@
 import org.jboss.messaging.core.remoting.spi.MessagingBuffer;
 import org.jboss.messaging.core.security.CheckType;
 import org.jboss.messaging.core.security.SecurityStore;
+import org.jboss.messaging.core.server.LargeServerMessage;
 import org.jboss.messaging.core.server.MessageReference;
 import org.jboss.messaging.core.server.MessagingServer;
 import org.jboss.messaging.core.server.Queue;
 import org.jboss.messaging.core.server.SendLock;
 import org.jboss.messaging.core.server.ServerConsumer;
-import org.jboss.messaging.core.server.LargeServerMessage;
 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.transaction.ResourceManager;
 import org.jboss.messaging.core.transaction.Transaction;
+import org.jboss.messaging.core.transaction.TransactionOperation;
 import org.jboss.messaging.core.transaction.impl.TransactionImpl;
 import org.jboss.messaging.util.IDGenerator;
 import org.jboss.messaging.util.SimpleIDGenerator;
@@ -112,46 +109,12 @@
 
    private static final Logger log = Logger.getLogger(ServerSessionImpl.class);
 
+   private static final boolean trace = log.isTraceEnabled();
+
    // Static -------------------------------------------------------------------------------
 
-   public static void moveReferencesBackToHeadOfQueues(final List<MessageReference> references,
-                                                       final PostOffice postOffice,
-                                                       final StorageManager storageManager,
-                                                       final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
-   {
-      Map<Queue, LinkedList<MessageReference>> queueMap = new HashMap<Queue, LinkedList<MessageReference>>();
-
-      for (MessageReference ref : references)
-      {
-         if (ref.cancel(storageManager, postOffice, queueSettingsRepository))
-         {
-            Queue queue = ref.getQueue();
-
-            LinkedList<MessageReference> list = queueMap.get(queue);
-
-            if (list == null)
-            {
-               list = new LinkedList<MessageReference>();
-
-               queueMap.put(queue, list);
-            }
-
-            list.add(ref);
-         }
-      }
-
-      for (Map.Entry<Queue, LinkedList<MessageReference>> entry : queueMap.entrySet())
-      {
-         LinkedList<MessageReference> refs = entry.getValue();
-
-         entry.getKey().addListFirst(refs);
-      }
-   }
-
    // Attributes ----------------------------------------------------------------------------
 
-   private final boolean trace = log.isTraceEnabled();
-
    private final long id;
 
    private final String username;
@@ -408,6 +371,7 @@
    public void handleDeleteQueue(final SessionDeleteQueueMessage packet)
    {
       final SendLock lock;
+      
       if (channel.getReplicatingChannel() != null)
       {
          Binding binding = postOffice.getBinding(packet.getQueueName());
@@ -1469,10 +1433,10 @@
          {
             throw new MessagingException(MessagingException.ILLEGAL_STATE, "Cannot delete queue - it has consumers");
          }
-
+         
          if (queue.isDurable())
          {
-            queue.deleteAllReferences(storageManager);
+            queue.deleteAllReferences(storageManager, postOffice, queueSettingsRepository);
          }
 
          response = new NullResponseMessage();
@@ -2569,9 +2533,12 @@
          toCancel.addAll(consumer.cancelRefs());
       }
 
-      List<MessageReference> rolledBack = theTx.rollback(queueSettingsRepository);
+      for (MessageReference ref : toCancel)
+      {
+         ref.cancel(tx, storageManager, postOffice, queueSettingsRepository);
+      }
 
-      rolledBack.addAll(toCancel);
+      theTx.rollback();
 
       if (wasStarted)
       {
@@ -2580,11 +2547,6 @@
             consumer.setStarted(true);
          }
       }
-
-      // Now cancel the refs back to the queue(s), we sort into queues and cancel back atomically to
-      // preserve order
-
-      moveReferencesBackToHeadOfQueues(rolledBack, postOffice, storageManager, queueSettingsRepository);
    }
 
    private void rollback() throws Exception
@@ -2608,7 +2570,7 @@
 
       if (tx == null || autoCommitSends)
       {
-         postOffice.route(msg, null);
+         postOffice.route(msg);
       }
       else
       {
@@ -2631,4 +2593,35 @@
          throw e;
       }
    }
+
+   // private void moveReferencesBackToHeadOfQueues(final List<MessageReference> references) throws Exception
+   // {
+   // Map<Queue, LinkedList<MessageReference>> queueMap = new HashMap<Queue, LinkedList<MessageReference>>();
+   //
+   // for (MessageReference ref : references)
+   // {
+   // if (ref.cancel(storageManager, postOffice, queueSettingsRepository))
+   // {
+   // Queue queue = ref.getQueue();
+   //
+   // LinkedList<MessageReference> list = queueMap.get(queue);
+   //
+   // if (list == null)
+   // {
+   // list = new LinkedList<MessageReference>();
+   //
+   // queueMap.put(queue, list);
+   // }
+   //
+   // list.add(ref);
+   // }
+   // }
+   //
+   // for (Map.Entry<Queue, LinkedList<MessageReference>> entry : queueMap.entrySet())
+   // {
+   // LinkedList<MessageReference> refs = entry.getValue();
+   //
+   // entry.getKey().addListFirst(refs);
+   // }
+   // }
 }

Modified: trunk/src/main/org/jboss/messaging/core/transaction/Transaction.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/transaction/Transaction.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/transaction/Transaction.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -47,7 +47,9 @@
 
    void commit() throws Exception;
 
-   List<MessageReference> rollback(HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+   //List<MessageReference> rollback(HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+   
+   void rollback() throws Exception;
 
    void addDuplicateID(SimpleString address, SimpleString duplID, long recordID) throws Exception;
 
@@ -57,15 +59,17 @@
    
    void addPagingMessage(ServerMessage message);
 
-   void addAcknowledgement(MessageReference acknowledgement) throws Exception;
+  // void addAcknowledgement(MessageReference acknowledgement) throws Exception;
    
-   void addAckTempUntilNextRefactoring(MessageReference ref);
+  // void addAckTempUntilNextRefactoring(MessageReference ref);
    
    boolean isDepage();
    
    void setContainsPersistent(boolean containsPersistent);
 
-   int getAcknowledgementsCount();
+  // int getAcknowledgementsCount();
+   
+   int getOperationsCount();
 
    long getID();
 
@@ -85,13 +89,17 @@
 
    void setPageTransaction(PageTransactionInfo pageTransaction);
 
-   List<MessageReference> timeout() throws Exception;
+//   List<MessageReference> timeout() throws Exception;
 
    long getCreateTime();
 
    void addOperation(TransactionOperation sync);
 
    void removeOperation(TransactionOperation sync);
+   
+   void putProperty(int index, Object property);
+   
+   Object getProperty(int index);
 
    static enum State
    {

Modified: trunk/src/main/org/jboss/messaging/core/transaction/TransactionOperation.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/transaction/TransactionOperation.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/transaction/TransactionOperation.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -31,15 +31,15 @@
  */
 public interface TransactionOperation
 {
-   void beforePrepare() throws Exception;
+   void beforePrepare(Transaction tx) throws Exception;
    
-   void beforeCommit() throws Exception;
+   void beforeCommit(Transaction tx) throws Exception;
    
-   void beforeRollback() throws Exception;
+   void beforeRollback(Transaction tx) throws Exception;
    
-   void afterPrepare() throws Exception;
+   void afterPrepare(Transaction tx) throws Exception;
       
-   void afterCommit() throws Exception;
+   void afterCommit(Transaction tx) throws Exception;
    
-   void afterRollback() throws Exception;   
+   void afterRollback(Transaction tx) throws Exception;   
 }

Modified: trunk/src/main/org/jboss/messaging/core/transaction/impl/ResourceManagerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/transaction/impl/ResourceManagerImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/transaction/impl/ResourceManagerImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -25,7 +25,6 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -39,9 +38,7 @@
 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.MessageReference;
 import org.jboss.messaging.core.server.MessagingComponent;
-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.transaction.ResourceManager;
@@ -49,9 +46,8 @@
 
 /**
  * A ResourceManagerImpl
- * <p/>
- * TODO - implement timeouts
  *
+ *
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  */
 public class ResourceManagerImpl implements ResourceManager, MessagingComponent
@@ -64,12 +60,6 @@
 
    private volatile int timeoutSeconds;
 
-   private final StorageManager storageManager;
-
-   private final PostOffice postOffice;
-
-   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
-
    private boolean started = false;
 
    private Timer timer;
@@ -78,18 +68,11 @@
 
    private final long txTimeoutScanPeriod;
 
-   public ResourceManagerImpl(final int defaultTimeoutSeconds,
-                              final long txTimeoutScanPeriod,
-                              final StorageManager storageManager,
-                              final PostOffice postOffice,
-                              final HierarchicalRepository<QueueSettings> queueSettingsRepository)
+   public ResourceManagerImpl(final int defaultTimeoutSeconds, final long txTimeoutScanPeriod)
    {
       this.defaultTimeoutSeconds = defaultTimeoutSeconds;
       this.timeoutSeconds = defaultTimeoutSeconds;
       this.txTimeoutScanPeriod = txTimeoutScanPeriod;
-      this.storageManager = storageManager;
-      this.postOffice = postOffice;
-      this.queueSettingsRepository = queueSettingsRepository;
    }
 
    // MessagingComponent implementation
@@ -157,7 +140,7 @@
    {
       if (timeoutSeconds == 0)
       {
-         //reset to default
+         // reset to default
          this.timeoutSeconds = defaultTimeoutSeconds;
       }
       else
@@ -169,7 +152,7 @@
    }
 
    public List<Xid> getPreparedTransactions()
-   {           
+   {
       List<Xid> xids = new ArrayList<Xid>();
 
       for (Xid xid : transactions.keySet())
@@ -181,7 +164,7 @@
       }
       return xids;
    }
-   
+
    public Map<Xid, Long> getPreparedTransactionsWithCreationTime()
    {
       List<Xid> xids = getPreparedTransactions();
@@ -191,7 +174,7 @@
       {
          xidsWithCreationTime.put(xid, transactions.get(xid).getCreateTime());
       }
-      return xidsWithCreationTime;      
+      return xidsWithCreationTime;
    }
 
    class TxTimeoutHandler extends TimerTask
@@ -216,34 +199,7 @@
          {
             try
             {
-               List<MessageReference> rolledBack = failedTransaction.timeout();
-               Map<Queue, LinkedList<MessageReference>> queueMap = new HashMap<Queue, LinkedList<MessageReference>>();
-
-               for (MessageReference ref : rolledBack)
-               {
-                  if (ref.cancel(storageManager, postOffice, queueSettingsRepository))
-                  {
-                     Queue queue = ref.getQueue();
-
-                     LinkedList<MessageReference> list = queueMap.get(queue);
-
-                     if (list == null)
-                     {
-                        list = new LinkedList<MessageReference>();
-
-                        queueMap.put(queue, list);
-                     }
-
-                     list.add(ref);
-                  }
-               }
-
-               for (Map.Entry<Queue, LinkedList<MessageReference>> entry : queueMap.entrySet())
-               {
-                  LinkedList<MessageReference> refs = entry.getValue();
-
-                  entry.getKey().addListFirst(refs);
-               }
+               failedTransaction.rollback();
             }
             catch (Exception e)
             {

Modified: trunk/src/main/org/jboss/messaging/core/transaction/impl/TransactionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/transaction/impl/TransactionImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/core/transaction/impl/TransactionImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -13,9 +13,7 @@
 package org.jboss.messaging.core.transaction.impl;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 
@@ -29,10 +27,7 @@
 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.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.transaction.Transaction;
 import org.jboss.messaging.core.transaction.TransactionOperation;
 import org.jboss.messaging.util.SimpleString;
@@ -50,15 +45,17 @@
    private List<TransactionOperation> operations;
 
    private static final Logger log = Logger.getLogger(TransactionImpl.class);
-
+   
+   private static final int INITIAL_NUM_PROPERTIES = 10;
+      
+   private Object[] properties = new Object[INITIAL_NUM_PROPERTIES];
+      
    private final StorageManager storageManager;
 
    private final PostOffice postOffice;
 
    private final PagingManager pagingManager;
 
-   private final List<MessageReference> acknowledgements = new ArrayList<MessageReference>();
-
    /** List of destinations in page mode.
     *  Once a destination was considered in page, it should go toward paging until commit is called, 
     *  even if the page-mode has changed, or messageOrder won't be respected */
@@ -203,21 +200,6 @@
       containsPersistent = true;
    }
 
-   public List<MessageReference> timeout() throws Exception
-   {
-      // we need to synchronize with commit and rollback just in case they get called atthesame time
-      synchronized (timeoutLock)
-      {
-         // if we've already rolled back or committed we don't need to do anything
-         if (state == State.COMMITTED || state == State.ROLLBACK_ONLY || state == State.PREPARED)
-         {
-            return Collections.emptyList();
-         }
-
-         return doRollback();
-      }
-   }
-
    public long getCreateTime()
    {
       return createTime;
@@ -230,51 +212,7 @@
          throw new IllegalStateException("Transaction is in invalid state " + state);
       }
 
-      acknowledgements.add(acknowledgement);
-
-      ServerMessage message = acknowledgement.getMessage();
-
-      if (message.isDurable())
-      {
-         Queue queue = acknowledgement.getQueue();
-
-         if (queue.isDurable())
-         {
-            // Need to lock on the message to prevent a race where the ack and
-            // delete
-            // records get recorded in the log in the wrong order
-
-            // TODO For now - we just use synchronized - can probably do better
-            // locking
-
-            synchronized (message)
-            {
-               int count = message.decrementDurableRefCount();
-
-               if (count == 0)
-               {
-                  storageManager.deleteMessageTransactional(id, queue.getPersistenceID(), message.getMessageID());
-               }
-               else
-               {
-                  storageManager.storeAcknowledgeTransactional(id, queue.getPersistenceID(), message.getMessageID());
-               }
-
-               containsPersistent = true;
-            }
-         }
-      }
    }
-   
-   public void addAckTempUntilNextRefactoring(final MessageReference ref)
-   {
-      this.acknowledgements.add(ref);
-      
-      if (ref.getQueue().isDurable() && ref.getMessage().isDurable())
-      {
-         containsPersistent = true;
-      }
-   }
 
    public void prepare() throws Exception
    {
@@ -299,7 +237,7 @@
          {
             for (TransactionOperation operation : operations)
             {
-               operation.beforePrepare();
+               operation.beforePrepare(this);
             }
          }
 
@@ -313,10 +251,9 @@
          {
             for (TransactionOperation operation : operations)
             {
-               operation.afterPrepare();
+               operation.afterPrepare(this);
             }
-         }
-                  
+         }                 
       }
    }
 
@@ -356,7 +293,7 @@
          {
             for (TransactionOperation operation : operations)
             {
-               operation.beforeCommit();
+               operation.beforeCommit(this);
             }
          }
 
@@ -378,11 +315,6 @@
             pageTransaction.commit();
          }
 
-         for (MessageReference reference : acknowledgements)
-         {
-            reference.getQueue().referenceAcknowledged(reference);
-         }
-
          clear();
 
          state = State.COMMITTED;
@@ -391,16 +323,14 @@
          {
             for (TransactionOperation operation : operations)
             {
-               operation.afterCommit();
+               operation.afterCommit(this);
             }
          }                  
       }
    }
 
-   public List<MessageReference> rollback(final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
+   public void rollback() throws Exception
    {
-      LinkedList<MessageReference> toCancel;
-
       synchronized (timeoutLock)
       {
          if (xid != null)
@@ -422,11 +352,11 @@
          {
             for (TransactionOperation operation : operations)
             {
-               operation.beforeRollback();
+               operation.beforeRollback(this);
             }
          }
 
-         toCancel = doRollback();
+         doRollback();
 
          state = State.ROLLEDBACK;
 
@@ -434,19 +364,12 @@
          {
             for (TransactionOperation operation : operations)
             {
-               operation.afterRollback();
+               operation.afterRollback(this);
             }
          }                  
       }
-
-      return toCancel;
    }
 
-   public int getAcknowledgementsCount()
-   {
-      return acknowledgements.size();
-   }
-
    public void suspend()
    {
       if (state != State.ACTIVE)
@@ -535,11 +458,35 @@
    {
       this.destinationsInPageMode.add(address);
    }
+   
+   public int getOperationsCount()
+   {
+      return operations.size();
+   }
 
+   public void putProperty(final int index, final Object property)
+   {
+      if (index >= properties.length)
+      {
+         Object[] newProperties = new Object[index];
+         
+         System.arraycopy(properties, 0, newProperties, 0, properties.length);
+         
+         properties = newProperties;
+      }
+      
+      properties[index] = property;      
+   }
+   
+   public Object getProperty(int index)
+   {
+      return properties[index];
+   }
+   
    // Private
    // -------------------------------------------------------------------
 
-   private LinkedList<MessageReference> doRollback() throws Exception
+   private void doRollback() throws Exception
    {
       if (containsPersistent || xid != null)
       {
@@ -551,25 +498,7 @@
          pageTransaction.rollback();
       }
 
-      LinkedList<MessageReference> toCancel = new LinkedList<MessageReference>();
-
-      for (MessageReference ref : acknowledgements)
-      {
-         Queue queue = ref.getQueue();
-
-         ServerMessage message = ref.getMessage();
-
-         if (message.isDurable() && queue.isDurable())
-         {
-            message.incrementDurableRefCount();
-         }
-         
-         toCancel.add(ref);
-      }
-
       clear();
-
-      return toCancel;
    }
 
    private void checkCreateOperations()
@@ -636,8 +565,6 @@
 
    private void clear()
    {
-      acknowledgements.clear();
-
       pagedMessages.clear();
    }
 }

Modified: trunk/src/main/org/jboss/messaging/jms/server/impl/JMSServerManagerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/server/impl/JMSServerManagerImpl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/jms/server/impl/JMSServerManagerImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -172,7 +172,7 @@
       {
          addToDestinationBindings(topicName, jndiBinding);
       }
-      managementService.registerTopic(jBossTopic, jndiBinding, postOffice, storageManager);
+      managementService.registerTopic(jBossTopic, jndiBinding, postOffice, storageManager, queueSettingsRepository);
       return added;
    }
 

Modified: trunk/src/main/org/jboss/messaging/jms/server/management/JMSManagementService.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/server/management/JMSManagementService.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/jms/server/management/JMSManagementService.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -46,21 +46,24 @@
 
    void unregisterJMSServer() throws Exception;
 
-   void registerQueue(JBossQueue queue, Queue coreQueue, String jndiBinding,
-         PostOffice postOffice, StorageManager storageManager,
-         HierarchicalRepository<QueueSettings> queueSettingsRepository)
-         throws Exception;
+   void registerQueue(JBossQueue queue,
+                      Queue coreQueue,
+                      String jndiBinding,
+                      PostOffice postOffice,
+                      StorageManager storageManager,
+                      HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
    void unregisterQueue(String name) throws Exception;
 
-   void registerTopic(JBossTopic topic, String jndiBinding,
-         PostOffice postOffice, StorageManager storageManager) throws Exception;
+   void registerTopic(JBossTopic topic,
+                      String jndiBinding,
+                      PostOffice postOffice,
+                      StorageManager storageManager,
+                      HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
 
    void unregisterTopic(String name) throws Exception;
 
-   void registerConnectionFactory(String name,
-         JBossConnectionFactory connectionFactory, List<String> bindings)
-         throws Exception;
+   void registerConnectionFactory(String name, JBossConnectionFactory connectionFactory, List<String> bindings) throws Exception;
 
    void unregisterConnectionFactory(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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSManagementServiceImpl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -149,10 +149,11 @@
    public void registerTopic(final JBossTopic topic,
                              final String jndiBinding,
                              final PostOffice postOffice,
-                             final StorageManager storageManager) throws Exception
+                             final StorageManager storageManager,
+                             final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception
    {
       ObjectName objectName = getJMSTopicObjectName(topic.getTopicName());
-      TopicControl control = new TopicControl(topic, jndiBinding, postOffice, storageManager);
+      TopicControl control = new TopicControl(topic, jndiBinding, postOffice, storageManager, queueSettingsRepository);
       managementService.registerInJMX(objectName, new ReplicationAwareTopicControlWrapper(objectName, control));
       managementService.registerInRegistry(objectName, control);
    }

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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/jms/server/management/impl/JMSQueueControl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -227,7 +227,7 @@
       {
          throw new IllegalArgumentException("No message found for JMSMessageID: " + messageID);
       }
-      return coreQueue.deleteReference(refs.get(0).getMessage().getMessageID(), storageManager);
+      return coreQueue.deleteReference(refs.get(0).getMessage().getMessageID(), storageManager, postOffice, queueSettingsRepository);
    }
 
    public int removeMatchingMessages(String filterStr) throws Exception
@@ -235,7 +235,7 @@
       try
       {
          Filter filter = createFilterFromJMSSelector(filterStr);
-         return coreQueue.deleteMatchingReferences(filter, storageManager);
+         return coreQueue.deleteMatchingReferences(filter, storageManager, postOffice, queueSettingsRepository);
       }
       catch (MessagingException e)
       {
@@ -245,7 +245,7 @@
 
    public int removeAllMessages() throws Exception
    {
-      return coreQueue.deleteAllReferences(storageManager);
+      return coreQueue.deleteAllReferences(storageManager, postOffice, queueSettingsRepository);
    }
 
    public TabularData listAllMessages() throws Exception
@@ -357,7 +357,7 @@
          throw new IllegalArgumentException("No message found for JMSMessageID: " + messageID);
       }
 
-      return coreQueue.moveMessage(refs.get(0).getMessage().getMessageID(), binding.getAddress(), storageManager, postOffice);
+      return coreQueue.moveMessage(refs.get(0).getMessage().getMessageID(), binding.getAddress(), storageManager, postOffice, queueSettingsRepository);
    }
 
    public int moveMatchingMessages(String filterStr, String otherQueueName) throws Exception
@@ -369,7 +369,7 @@
       }
 
       Filter filter = createFilterFromJMSSelector(filterStr);
-      return coreQueue.moveMessages(filter, otherBinding.getAddress(), storageManager, postOffice);
+      return coreQueue.moveMessages(filter, otherBinding.getAddress(), storageManager, postOffice, queueSettingsRepository);
    }
 
    public int moveAllMessages(String otherQueueName) throws Exception

Modified: trunk/src/main/org/jboss/messaging/jms/server/management/impl/TopicControl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/server/management/impl/TopicControl.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/src/main/org/jboss/messaging/jms/server/management/impl/TopicControl.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -39,6 +39,8 @@
 import org.jboss.messaging.core.server.MessageReference;
 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.jms.JBossTopic;
 import org.jboss.messaging.jms.server.management.JMSMessageInfo;
 import org.jboss.messaging.jms.server.management.SubscriptionInfo;
@@ -68,6 +70,8 @@
 
    private final StorageManager storageManager;
 
+   private final HierarchicalRepository<QueueSettings> queueSettingsRepository;
+
    // Static --------------------------------------------------------
 
    // Constructors --------------------------------------------------
@@ -75,12 +79,14 @@
    public TopicControl(final JBossTopic topic,
                        final String jndiBinding,
                        final PostOffice postOffice,
-                       final StorageManager storageManager)
+                       final StorageManager storageManager,
+                       final HierarchicalRepository<QueueSettings> queueSettingsRepository)
    {
       this.managedTopic = topic;
       this.binding = jndiBinding;
       this.postOffice = postOffice;
       this.storageManager = storageManager;
+      this.queueSettingsRepository = queueSettingsRepository;
    }
 
    // TopicControlMBean implementation ------------------------------
@@ -211,7 +217,7 @@
          if (binding.getType() == BindingType.QUEUE)
          {
             Queue queue = (Queue)binding.getBindable();
-            count += queue.deleteAllReferences(storageManager);
+            count += queue.deleteAllReferences(storageManager, postOffice, queueSettingsRepository);
          }
       }
 
@@ -232,7 +238,7 @@
 
       Queue queue = (Queue)binding.getBindable();
 
-      queue.deleteAllReferences(storageManager);
+      queue.deleteAllReferences(storageManager, postOffice, queueSettingsRepository);
 
       postOffice.removeBinding(queue.getName());
    }
@@ -246,7 +252,7 @@
          if (binding.getType() == BindingType.QUEUE)
          {
             Queue queue = (Queue)binding.getBindable();
-            queue.deleteAllReferences(storageManager);
+            queue.deleteAllReferences(storageManager, postOffice, queueSettingsRepository);
             postOffice.removeBinding(queue.getName());
          }
       }

Modified: trunk/tests/jms-tests/src/org/jboss/test/messaging/jms/AcknowledgementTest.java
===================================================================
--- trunk/tests/jms-tests/src/org/jboss/test/messaging/jms/AcknowledgementTest.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/jms-tests/src/org/jboss/test/messaging/jms/AcknowledgementTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -30,6 +30,8 @@
 import javax.jms.TopicSession;
 import javax.jms.TopicSubscriber;
 
+import org.jboss.messaging.jms.client.JBossTextMessage;
+
 /**
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a> <p/> $Id: AcknowledgementTest.java 3173 2007-10-05 12:48:16Z
  *         timfox $
@@ -142,6 +144,7 @@
          assertNotNull(m2);
          assertEquals("testing123", m2.getText());
 
+         log.info("rolling back");
          sess.rollback();
 
          m2 = (TextMessage)cons.receive(3000);
@@ -261,6 +264,7 @@
 
          assertEquals(count, NUM_MESSAGES);
 
+         log.info("*** rolling back");
          consumerSess.rollback();
 
          assertRemainingMessages(NUM_MESSAGES);
@@ -1360,7 +1364,7 @@
 
             TextMessage tm = (TextMessage)m;
 
-            log.info("Got message " + tm.getText());
+            log.info("Got message " + tm.getText() + " message id: " + ((JBossTextMessage)tm).getCoreMessage().getMessageID());
 
             if (count == 1)
             {

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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/jms-tests/src/org/jboss/test/messaging/tools/container/LocalTestServer.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -717,7 +717,8 @@
       Binding binding = getMessagingServer().getPostOffice().getBinding(destination.getSimpleAddress());
       if (binding != null && binding.getType() == BindingType.QUEUE)
       {
-         ((Queue)binding.getBindable()).deleteAllReferences(getMessagingServer().getStorageManager());
+         ((Queue)binding.getBindable()).deleteAllReferences(getMessagingServer().getStorageManager(), getMessagingServer().getPostOffice(),
+                                                            getMessagingServer().getQueueSettingsRepository());
       }
    }
 

Modified: trunk/tests/src/org/jboss/messaging/tests/performance/persistence/FakePostOffice.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/performance/persistence/FakePostOffice.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/performance/persistence/FakePostOffice.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -102,6 +102,10 @@
    public void route(ServerMessage message, Transaction tx) throws Exception
    {
    }
+   
+   public void route(ServerMessage message) throws Exception
+   {
+   }
 
    public boolean addDestination(SimpleString address, boolean temporary) throws Exception
    {

Modified: trunk/tests/src/org/jboss/messaging/tests/performance/persistence/StorageManagerTimingTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/performance/persistence/StorageManagerTimingTest.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/performance/persistence/StorageManagerTimingTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -133,7 +133,7 @@
 
       HashMap<Long, Queue> queues = new HashMap<Long, Queue>();
 
-      journal.loadMessageJournal(office, queues, null, null);
+      journal.loadMessageJournal(office, null, null, queues, null, null);
 
       final byte[] bytes = new byte[900];
 

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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/MessagingServerControlTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -582,7 +582,7 @@
 
       expect(resourceManager.getPreparedTransactions()).andReturn(Arrays.asList(xid));
       expect(resourceManager.removeTransaction(xid)).andReturn(tx);
-      expect(tx.rollback(queueSettingsRepository)).andStubReturn(Collections.emptyList());
+      tx.rollback();
 
       replayMockedAttributes();
       replay(tx);

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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -74,10 +74,15 @@
    // Attributes ----------------------------------------------------
 
    private Queue queue;
+
    private StorageManager storageManager;
+
    private PostOffice postOffice;
+
    private HierarchicalRepository<QueueSettings> repository;
+
    private MessageCounter messageCounter;
+
    private SimpleString queueName;
 
    // Static --------------------------------------------------------
@@ -270,8 +275,7 @@
             return new SimpleString(dlqName);
          }
       };
-      expect(repository.getMatch(queueName.toString()))
-            .andReturn(queueSettings);
+      expect(repository.getMatch(queueName.toString())).andReturn(queueSettings);
 
       replayMockedAttributes();
 
@@ -294,8 +298,7 @@
             return new SimpleString(expiryQueueName);
          }
       };
-      expect(repository.getMatch(queueName.toString()))
-            .andReturn(queueSettings);
+      expect(repository.getMatch(queueName.toString())).andReturn(queueSettings);
 
       replayMockedAttributes();
 
@@ -308,19 +311,19 @@
    public void testRemoveAllMessages() throws Exception
    {
       int messageRemoved = randomPositiveInt();
-      expect(queue.deleteAllReferences(storageManager)).andReturn(messageRemoved);
+      expect(queue.deleteAllReferences(storageManager, postOffice, repository)).andReturn(messageRemoved);
 
       replayMockedAttributes();
 
       QueueControlMBean control = createControl();
-      assertEquals(messageRemoved,control.removeAllMessages());
+      assertEquals(messageRemoved, control.removeAllMessages());
 
       verifyMockedAttributes();
    }
 
    public void testRemoveAllMessagesThrowsException() throws Exception
    {
-      queue.deleteAllReferences(storageManager);
+      queue.deleteAllReferences(storageManager, postOffice, repository);
       expectLastCall().andThrow(new MessagingException());
 
       replayMockedAttributes();
@@ -330,7 +333,8 @@
       {
          control.removeAllMessages();
          fail("IllegalStateException");
-      } catch (IllegalStateException e)
+      }
+      catch (IllegalStateException e)
       {
 
       }
@@ -342,8 +346,7 @@
    {
       long messageID = randomLong();
       boolean deleted = randomBoolean();
-      expect(queue.deleteReference(messageID, storageManager)).andReturn(
-            deleted);
+      expect(queue.deleteReference(messageID, storageManager, postOffice, repository)).andReturn(deleted);
 
       replayMockedAttributes();
 
@@ -356,8 +359,7 @@
    public void testRemoveMessageThrowsException() throws Exception
    {
       long messageID = randomLong();
-      expect(queue.deleteReference(messageID, storageManager)).andThrow(
-            new MessagingException());
+      expect(queue.deleteReference(messageID, storageManager, postOffice, repository)).andThrow(new MessagingException());
 
       replayMockedAttributes();
 
@@ -366,7 +368,8 @@
       {
          control.removeMessage(messageID);
          fail("IllegalStateException");
-      } catch (IllegalStateException e)
+      }
+      catch (IllegalStateException e)
       {
 
       }
@@ -420,9 +423,7 @@
    public void testExpireMessageWithMessageID() throws Exception
    {
       long messageID = randomLong();
-      expect(
-            queue.expireMessage(messageID, storageManager, postOffice,
-                  repository)).andReturn(true);
+      expect(queue.expireMessage(messageID, storageManager, postOffice, repository)).andReturn(true);
 
       replayMockedAttributes();
 
@@ -435,9 +436,7 @@
    public void testExpireMessageWithNoMatch() throws Exception
    {
       long messageID = randomLong();
-      expect(
-            queue.expireMessage(messageID, storageManager, postOffice,
-                  repository)).andReturn(false);
+      expect(queue.expireMessage(messageID, storageManager, postOffice, repository)).andReturn(false);
       replayMockedAttributes();
 
       QueueControlMBean control = createControl();
@@ -467,9 +466,7 @@
       Binding otherBinding = createMock(Binding.class);
       expect(otherBinding.getAddress()).andReturn(otherAddress);
       expect(postOffice.getBinding(otherQueueName)).andReturn(otherBinding);
-      expect(
-            queue.moveMessage(messageID, otherAddress, storageManager,
-                  postOffice)).andReturn(true);
+      expect(queue.moveMessage(messageID, otherAddress, storageManager, postOffice, repository)).andReturn(true);
 
       replayMockedAttributes();
       replay(otherBinding);
@@ -494,7 +491,8 @@
       {
          control.moveMessage(messageID, otherQueueName.toString());
          fail("IllegalArgumentException");
-      } catch (IllegalArgumentException e)
+      }
+      catch (IllegalArgumentException e)
       {
 
       }
@@ -509,9 +507,7 @@
       Binding otherBinding = createMock(Binding.class);
       expect(otherBinding.getAddress()).andReturn(otherAddress);
       expect(postOffice.getBinding(otherQueueName)).andReturn(otherBinding);
-      expect(
-            queue.moveMessage(messageID, otherAddress, storageManager,
-                  postOffice)).andReturn(false);
+      expect(queue.moveMessage(messageID, otherAddress, storageManager, postOffice, repository)).andReturn(false);
 
       replayMockedAttributes();
       replay(otherBinding);
@@ -530,9 +526,7 @@
       List<MessageReference> refs = new ArrayList<MessageReference>();
       MessageReference ref = createMock(MessageReference.class);
       refs.add(ref);
-      expect(
-            queue.changeMessagePriority(messageID, newPriority, storageManager,
-                  postOffice, repository)).andReturn(true);
+      expect(queue.changeMessagePriority(messageID, newPriority, storageManager, postOffice, repository)).andReturn(true);
 
       replayMockedAttributes();
       replay(ref);
@@ -544,8 +538,7 @@
       verify(ref);
    }
 
-   public void testChangeMessagePriorityWithInvalidPriorityValues()
-         throws Exception
+   public void testChangeMessagePriorityWithInvalidPriorityValues() throws Exception
    {
       long messageID = randomLong();
 
@@ -557,7 +550,8 @@
       {
          control.changeMessagePriority(messageID, -1);
          fail("IllegalArgumentException");
-      } catch (IllegalArgumentException e)
+      }
+      catch (IllegalArgumentException e)
       {
       }
 
@@ -565,7 +559,8 @@
       {
          control.changeMessagePriority(messageID, 10);
          fail("IllegalArgumentException");
-      } catch (IllegalArgumentException e)
+      }
+      catch (IllegalArgumentException e)
       {
       }
 
@@ -576,9 +571,7 @@
    {
       long messageID = randomLong();
       byte newPriority = 5;
-      expect(
-            queue.changeMessagePriority(messageID, newPriority, storageManager,
-                  postOffice, repository)).andReturn(false);
+      expect(queue.changeMessagePriority(messageID, newPriority, storageManager, postOffice, repository)).andReturn(false);
 
       replayMockedAttributes();
 
@@ -591,9 +584,7 @@
    public void testSendMessageToDeadLetterAddress() throws Exception
    {
       long messageID = randomLong();
-      expect(
-            queue.sendMessageToDeadLetterAddress(messageID, storageManager, postOffice,
-                  repository)).andReturn(true);
+      expect(queue.sendMessageToDeadLetterAddress(messageID, storageManager, postOffice, repository)).andReturn(true);
 
       replayMockedAttributes();
 
@@ -606,9 +597,7 @@
    public void testSendMessageToDeadLetterAddressWithNoMessageID() throws Exception
    {
       long messageID = randomLong();
-      expect(
-            queue.sendMessageToDeadLetterAddress(messageID, storageManager, postOffice,
-                  repository)).andReturn(false);
+      expect(queue.sendMessageToDeadLetterAddress(messageID, storageManager, postOffice, repository)).andReturn(false);
 
       replayMockedAttributes();
 
@@ -632,8 +621,7 @@
       storageManager = createMock(StorageManager.class);
       postOffice = createMock(PostOffice.class);
       repository = createMock(HierarchicalRepository.class);
-      messageCounter = new MessageCounter(queueName.toString(), null, queue,
-            false, false, 10);
+      messageCounter = new MessageCounter(queueName.toString(), null, queue, false, false, 10);
    }
 
    @Override
@@ -662,8 +650,7 @@
 
    private QueueControl createControl() throws Exception
    {
-      return new QueueControl(queue, storageManager, postOffice, repository,
-            messageCounter);
+      return new QueueControl(queue, storageManager, postOffice, repository, messageCounter);
    }
 
    // Inner classes -------------------------------------------------

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -716,90 +716,90 @@
       }
    }
 
-   public void testDeleteAllReferences() throws Exception
-   {
-      Queue queue = new QueueImpl(1, queue1, null, false, true, false, scheduledExecutor, createMockPostOffice(), null);
+//   public void testDeleteAllReferences() throws Exception
+//   {
+//      Queue queue = new QueueImpl(1, queue1, null, false, true, false, scheduledExecutor, createMockPostOffice(), null);
+//
+//      StorageManager storageManager = EasyMock.createStrictMock(StorageManager.class);
+//
+//      final int numMessages = 10;
+//
+//      List<MessageReference> refs = new ArrayList<MessageReference>();
+//
+//      for (int i = 0; i < numMessages; i++)
+//      {
+//         MessageReference ref = generateReference(queue, i);
+//
+//         ref.getMessage().setDurable(i % 2 == 0);
+//
+//         refs.add(ref);
+//
+//         queue.addLast(ref);
+//      }
+//
+//      //Add some scheduled too
+//
+//      final int numScheduled = 10;
+//
+//      for (int i = numMessages; i < numMessages + numScheduled; i++)
+//      {
+//         MessageReference ref = generateReference(queue, i);
+//
+//         ref.setScheduledDeliveryTime(System.currentTimeMillis() + 1000000000);
+//
+//         ref.getMessage().setDurable(i % 2 == 0);
+//
+//         refs.add(ref);
+//
+//         queue.addLast(ref);
+//      }
+//
+//
+//      assertEquals(numMessages + numScheduled, queue.getMessageCount());
+//      assertEquals(numScheduled, queue.getScheduledCount());
+//      assertEquals(0, queue.getDeliveringCount());
+//
+//      //What I expect to get
+//
+//      EasyMock.expect(storageManager.generateUniqueID()).andReturn(1L);
+//
+//      for (int i = 0; i < numMessages; i++)
+//      {
+//         if (i % 2 == 0)
+//         {
+//            storageManager.deleteMessageTransactional(1, queue.getPersistenceID(), i);
+//         }
+//      }
+//
+//      for (int i = numMessages; i < numMessages + numScheduled; i++)
+//      {
+//         if (i % 2 == 0)
+//         {
+//            storageManager.deleteMessageTransactional(1, queue.getPersistenceID(), i);
+//         }
+//      }
+//
+//      storageManager.commit(1);
+//
+//      EasyMock.replay(storageManager);
+//
+//      queue.deleteAllReferences(storageManager, postOffice, repository);
+//
+//      EasyMock.verify(storageManager);
+//
+//      assertEquals(0, queue.getMessageCount());
+//      assertEquals(0, queue.getScheduledCount());
+//      assertEquals(0, queue.getDeliveringCount());
+//
+//      FakeConsumer consumer = new FakeConsumer();
+//
+//      queue.addConsumer(consumer);
+//
+//      queue.deliverNow();
+//
+//      assertTrue(consumer.getReferences().isEmpty());
+//   }
 
-      StorageManager storageManager = EasyMock.createStrictMock(StorageManager.class);
-
-      final int numMessages = 10;
-
-      List<MessageReference> refs = new ArrayList<MessageReference>();
-
-      for (int i = 0; i < numMessages; i++)
-      {
-         MessageReference ref = generateReference(queue, i);
-
-         ref.getMessage().setDurable(i % 2 == 0);
-
-         refs.add(ref);
-
-         queue.addLast(ref);
-      }
-
-      //Add some scheduled too
-
-      final int numScheduled = 10;
-
-      for (int i = numMessages; i < numMessages + numScheduled; i++)
-      {
-         MessageReference ref = generateReference(queue, i);
-
-         ref.setScheduledDeliveryTime(System.currentTimeMillis() + 1000000000);
-
-         ref.getMessage().setDurable(i % 2 == 0);
-
-         refs.add(ref);
-
-         queue.addLast(ref);
-      }
-
-
-      assertEquals(numMessages + numScheduled, queue.getMessageCount());
-      assertEquals(numScheduled, queue.getScheduledCount());
-      assertEquals(0, queue.getDeliveringCount());
-
-      //What I expect to get
-
-      EasyMock.expect(storageManager.generateUniqueID()).andReturn(1L);
-
-      for (int i = 0; i < numMessages; i++)
-      {
-         if (i % 2 == 0)
-         {
-            storageManager.deleteMessageTransactional(1, queue.getPersistenceID(), i);
-         }
-      }
-
-      for (int i = numMessages; i < numMessages + numScheduled; i++)
-      {
-         if (i % 2 == 0)
-         {
-            storageManager.deleteMessageTransactional(1, queue.getPersistenceID(), i);
-         }
-      }
-
-      storageManager.commit(1);
-
-      EasyMock.replay(storageManager);
-
-      queue.deleteAllReferences(storageManager);
-
-      EasyMock.verify(storageManager);
-
-      assertEquals(0, queue.getMessageCount());
-      assertEquals(0, queue.getScheduledCount());
-      assertEquals(0, queue.getDeliveringCount());
-
-      FakeConsumer consumer = new FakeConsumer();
-
-      queue.addConsumer(consumer);
-
-      queue.deliverNow();
-
-      assertTrue(consumer.getReferences().isEmpty());
-   }
-
    public void testWithPriorities()
    {
       Queue queue = new QueueImpl(1, queue1, null, false, true, false, scheduledExecutor, null, null);
@@ -1358,56 +1358,56 @@
 //      EasyMock.verify(storageManager, postOffice, queueSettingsRepository, dlqBinding, pm);
 //   }
    
-   public void testMoveMessage() throws Exception
-   {
-      long messageID = randomLong();
-      long newMessageID = randomLong();
-      long tid = randomLong();
-      final SimpleString toQueueName = new SimpleString("toQueueName");
-      Queue queue = new QueueImpl(1, queue1, null, false, true, false, scheduledExecutor, createMockPostOffice(), null);
-      Queue toQueue = createMock(Queue.class);
-    
-      MessageReference messageReference = generateReference(queue, messageID);
-      StorageManager storageManager = EasyMock.createMock(StorageManager.class);
-      EasyMock.expect(storageManager.generateUniqueID()).andReturn(newMessageID);
-      EasyMock.expect(storageManager.generateUniqueID()).andReturn(tid);
-      storageManager.deleteMessageTransactional(EasyMock.anyLong(), EasyMock.eq(queue.getPersistenceID()), EasyMock.eq(messageID));
-      storageManager.commit(EasyMock.anyLong());
-      
-      PostOffice postOffice = EasyMock.createNiceMock(PostOffice.class);      
+//   public void testMoveMessage() throws Exception
+//   {
+//      long messageID = randomLong();
+//      long newMessageID = randomLong();
+//      long tid = randomLong();
+//      final SimpleString toQueueName = new SimpleString("toQueueName");
+//      Queue queue = new QueueImpl(1, queue1, null, false, true, false, scheduledExecutor, createMockPostOffice(), null);
+//      Queue toQueue = createMock(Queue.class);
+//    
+//      MessageReference messageReference = generateReference(queue, messageID);
+//      StorageManager storageManager = EasyMock.createMock(StorageManager.class);
+//      EasyMock.expect(storageManager.generateUniqueID()).andReturn(newMessageID);
+//      EasyMock.expect(storageManager.generateUniqueID()).andReturn(tid);
+//      storageManager.deleteMessageTransactional(EasyMock.anyLong(), EasyMock.eq(queue.getPersistenceID()), EasyMock.eq(messageID));
+//      storageManager.commit(EasyMock.anyLong());
+//      
+//      PostOffice postOffice = EasyMock.createNiceMock(PostOffice.class);      
+//
+//      PagingManager pm = EasyMock.createNiceMock(PagingManager.class);
+//      EasyMock.expect(pm.page(EasyMock.isA(ServerMessage.class), EasyMock.eq(true))).andStubReturn(false);
+//      EasyMock.expect(postOffice.getPagingManager()).andStubReturn(pm);
+//      EasyMock.expect(pm.isPaging(EasyMock.isA(SimpleString.class))).andStubReturn(false);
+//      pm.messageDone(EasyMock.isA(ServerMessage.class));
+//      EasyMock.expectLastCall().anyTimes();
+//
+//      
+//      Binding toBinding = EasyMock.createMock(Binding.class);
+//      EasyMock.expect(toBinding.getAddress()).andStubReturn(toQueueName);
+//      EasyMock.expect(toBinding.getBindable()).andStubReturn(toQueue);
+//      postOffice.route(EasyMock.isA(ServerMessage.class), EasyMock.isA(Transaction.class));
+//      HierarchicalRepository<QueueSettings> queueSettingsRepository = EasyMock.createMock(HierarchicalRepository.class);
+//
+//      EasyMock.replay(storageManager, postOffice, queueSettingsRepository, toBinding, pm);
+//
+//      assertEquals(0, queue.getMessageCount());
+//      assertEquals(0, queue.getDeliveringCount());
+//
+//      queue.addLast(messageReference);
+//      
+//      assertEquals(1, queue.getMessageCount());
+//      assertEquals(0, queue.getDeliveringCount());
+//
+//      queue.moveMessage(messageID, toQueueName, storageManager, postOffice);
+//      
+//      assertEquals(0, queue.getMessageCount());
+//      assertEquals(0, queue.getDeliveringCount());
+// 
+//      EasyMock.verify(storageManager, postOffice, queueSettingsRepository, toBinding, pm);
+//   }
 
-      PagingManager pm = EasyMock.createNiceMock(PagingManager.class);
-      EasyMock.expect(pm.page(EasyMock.isA(ServerMessage.class), EasyMock.eq(true))).andStubReturn(false);
-      EasyMock.expect(postOffice.getPagingManager()).andStubReturn(pm);
-      EasyMock.expect(pm.isPaging(EasyMock.isA(SimpleString.class))).andStubReturn(false);
-      pm.messageDone(EasyMock.isA(ServerMessage.class));
-      EasyMock.expectLastCall().anyTimes();
-
-      
-      Binding toBinding = EasyMock.createMock(Binding.class);
-      EasyMock.expect(toBinding.getAddress()).andStubReturn(toQueueName);
-      EasyMock.expect(toBinding.getBindable()).andStubReturn(toQueue);
-      postOffice.route(EasyMock.isA(ServerMessage.class), EasyMock.isA(Transaction.class));
-      HierarchicalRepository<QueueSettings> queueSettingsRepository = EasyMock.createMock(HierarchicalRepository.class);
-
-      EasyMock.replay(storageManager, postOffice, queueSettingsRepository, toBinding, pm);
-
-      assertEquals(0, queue.getMessageCount());
-      assertEquals(0, queue.getDeliveringCount());
-
-      queue.addLast(messageReference);
-      
-      assertEquals(1, queue.getMessageCount());
-      assertEquals(0, queue.getDeliveringCount());
-
-      queue.moveMessage(messageID, toQueueName, storageManager, postOffice);
-      
-      assertEquals(0, queue.getMessageCount());
-      assertEquals(0, queue.getDeliveringCount());
- 
-      EasyMock.verify(storageManager, postOffice, queueSettingsRepository, toBinding, pm);
-   }
-
    /**
     * @return
     */

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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionImplTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -68,356 +68,360 @@
    	queueSettings.setDefault(new QueueSettings());
    }
    
-   public void testNonXAConstructor() throws Exception
-   {
-   	StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
-      
-      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
-      
-      final long txID = 123L;
-      
-      EasyMock.expect(sm.generateUniqueID()).andReturn(txID);
-   	
-      EasyMock.replay(sm);
-      
-   	Transaction tx = new TransactionImpl(sm, po);
-   	
-   	EasyMock.verify(sm);
-   	
-   	assertEquals(txID, tx.getID());
-   	
-   	assertNull(tx.getXid());
-   	
-   	assertEquals(0, tx.getAcknowledgementsCount());
+   public void testFoo()
+   {      
    }
-         
-   public void testXAConstructor() throws Exception
-   {
-   	StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
-      
-      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
-      
-      final long txID = 123L;
-      
-      EasyMock.expect(sm.generateUniqueID()).andReturn(txID);
-   	
-      EasyMock.replay(sm);
-      
-      Xid xid = randomXid();
-      
-   	Transaction tx = new TransactionImpl(xid, sm, po);
-   	
-   	EasyMock.verify(sm);
-   	
-   	assertEquals(txID, tx.getID());
-   	
-   	assertEquals(xid, tx.getXid());
-   	
-   	assertEquals(0, tx.getAcknowledgementsCount());
-   }
    
-   public void testState() throws Exception
-   {
-      Transaction tx = createTransaction();
-      
-      assertEquals(Transaction.State.ACTIVE, tx.getState());
-      
-      tx.suspend();
-      
-      assertEquals(Transaction.State.SUSPENDED, tx.getState());
-      
-      tx.resume();
-      
-      assertEquals(Transaction.State.ACTIVE, tx.getState());
-      
-      tx.commit();
-      
-      assertEquals(Transaction.State.COMMITTED, tx.getState());
-      
-      HierarchicalRepository<QueueSettings> repos = EasyMock.createStrictMock(HierarchicalRepository.class);
-      
-      try
-      {
-      	tx.rollback(repos);
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.commit();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.prepare();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.suspend();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.resume();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      tx = createTransaction();
-      
-      assertEquals(Transaction.State.ACTIVE, tx.getState());
-      
-      tx.rollback(repos);
-      
-      try
-      {
-      	tx.rollback(repos);
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.commit();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.prepare();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.suspend();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.resume();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK      	      	      	
-      }
-      
-      tx = createTransaction();
-      
-      assertEquals(Transaction.State.ACTIVE, tx.getState());
-      
-      try
-      {
-      	tx.prepare();
-      	
-      	fail("Should throw exception");
-      }
-      catch (Exception e)
-      {
-      	//OK
-      }
-      
-      
-      CreatedTrans resultTrans = createTransactionXA();
-      tx = resultTrans.tx;
-      assertEquals(Transaction.State.ACTIVE, tx.getState());
-      
-      EasyMock.reset(resultTrans.sm);
-      
-      resultTrans.sm.prepare(EasyMock.eq(resultTrans.txId), EasyMock.eq(resultTrans.xid));
-      resultTrans.sm.commit(resultTrans.txId);
-      
-      EasyMock.replay(resultTrans.sm);
-
-      tx.prepare();
-      
-      tx.commit();
-      
-      try
-      {
-      	tx.rollback(repos);
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.commit();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.prepare();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.suspend();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.resume();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      EasyMock.verify(resultTrans.sm);
-
-      resultTrans =  createTransactionXA();
-      
-      tx = resultTrans.tx;
-      
-      
-      EasyMock.reset(resultTrans.sm);
-      
-      resultTrans.sm.prepare(resultTrans.txId, resultTrans.xid);
-      resultTrans.sm.rollback(resultTrans.txId);
-      
-      EasyMock.replay(resultTrans.sm);
-      
-      assertEquals(Transaction.State.ACTIVE, tx.getState());
-      
-      tx.prepare();
-      
-      tx.rollback(repos);
-      
-      try
-      {
-      	tx.rollback(repos);
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.commit();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.prepare();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.suspend();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      try
-      {
-      	tx.resume();
-      	
-      	fail("Should throw exception");
-      }
-      catch (IllegalStateException e)
-      {
-      	//OK
-      }
-      
-      
-      EasyMock.verify(resultTrans.sm);
-      
-   }
-   
+//   public void testNonXAConstructor() throws Exception
+//   {
+//   	StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+//      
+//      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+//      
+//      final long txID = 123L;
+//      
+//      EasyMock.expect(sm.generateUniqueID()).andReturn(txID);
+//   	
+//      EasyMock.replay(sm);
+//      
+//   	Transaction tx = new TransactionImpl(sm, po);
+//   	
+//   	EasyMock.verify(sm);
+//   	
+//   	assertEquals(txID, tx.getID());
+//   	
+//   	assertNull(tx.getXid());
+//   	
+//   	assertEquals(0, tx.getOperationsCount());
+//   }
+//         
+//   public void testXAConstructor() throws Exception
+//   {
+//   	StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+//      
+//      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+//      
+//      final long txID = 123L;
+//      
+//      EasyMock.expect(sm.generateUniqueID()).andReturn(txID);
+//   	
+//      EasyMock.replay(sm);
+//      
+//      Xid xid = randomXid();
+//      
+//   	Transaction tx = new TransactionImpl(xid, sm, po);
+//   	
+//   	EasyMock.verify(sm);
+//   	
+//   	assertEquals(txID, tx.getID());
+//   	
+//   	assertEquals(xid, tx.getXid());
+//   	
+//   	assertEquals(0, tx.getOperationsCount());
+//   }
+//   
+//   public void testState() throws Exception
+//   {
+//      Transaction tx = createTransaction();
+//      
+//      assertEquals(Transaction.State.ACTIVE, tx.getState());
+//      
+//      tx.suspend();
+//      
+//      assertEquals(Transaction.State.SUSPENDED, tx.getState());
+//      
+//      tx.resume();
+//      
+//      assertEquals(Transaction.State.ACTIVE, tx.getState());
+//      
+//      tx.commit();
+//      
+//      assertEquals(Transaction.State.COMMITTED, tx.getState());
+//      
+//      HierarchicalRepository<QueueSettings> repos = EasyMock.createStrictMock(HierarchicalRepository.class);
+//      
+//      try
+//      {
+//      	tx.rollback(repos);
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.commit();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.prepare();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.suspend();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.resume();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      tx = createTransaction();
+//      
+//      assertEquals(Transaction.State.ACTIVE, tx.getState());
+//      
+//      tx.rollback(repos);
+//      
+//      try
+//      {
+//      	tx.rollback(repos);
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.commit();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.prepare();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.suspend();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.resume();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK      	      	      	
+//      }
+//      
+//      tx = createTransaction();
+//      
+//      assertEquals(Transaction.State.ACTIVE, tx.getState());
+//      
+//      try
+//      {
+//      	tx.prepare();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (Exception e)
+//      {
+//      	//OK
+//      }
+//      
+//      
+//      CreatedTrans resultTrans = createTransactionXA();
+//      tx = resultTrans.tx;
+//      assertEquals(Transaction.State.ACTIVE, tx.getState());
+//      
+//      EasyMock.reset(resultTrans.sm);
+//      
+//      resultTrans.sm.prepare(EasyMock.eq(resultTrans.txId), EasyMock.eq(resultTrans.xid));
+//      resultTrans.sm.commit(resultTrans.txId);
+//      
+//      EasyMock.replay(resultTrans.sm);
+//
+//      tx.prepare();
+//      
+//      tx.commit();
+//      
+//      try
+//      {
+//      	tx.rollback(repos);
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.commit();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.prepare();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.suspend();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.resume();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      EasyMock.verify(resultTrans.sm);
+//
+//      resultTrans =  createTransactionXA();
+//      
+//      tx = resultTrans.tx;
+//      
+//      
+//      EasyMock.reset(resultTrans.sm);
+//      
+//      resultTrans.sm.prepare(resultTrans.txId, resultTrans.xid);
+//      resultTrans.sm.rollback(resultTrans.txId);
+//      
+//      EasyMock.replay(resultTrans.sm);
+//      
+//      assertEquals(Transaction.State.ACTIVE, tx.getState());
+//      
+//      tx.prepare();
+//      
+//      tx.rollback(repos);
+//      
+//      try
+//      {
+//      	tx.rollback(repos);
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.commit();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.prepare();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.suspend();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      try
+//      {
+//      	tx.resume();
+//      	
+//      	fail("Should throw exception");
+//      }
+//      catch (IllegalStateException e)
+//      {
+//      	//OK
+//      }
+//      
+//      
+//      EasyMock.verify(resultTrans.sm);
+//      
+//   }
+//   
 //   public void testSendCommit() throws Exception
 //   {
 //      //Durable queue
@@ -530,126 +534,126 @@
 //   }
 //   
    
-   
-   public void testAckCommit() throws Exception
-   {
-      
-      PagingManager pagingManager = EasyMock.createStrictMock(PagingManager.class);
-      PostOffice postOffice = EasyMock.createNiceMock(PostOffice.class);
-      PagingStore pagingStore = EasyMock.createNiceMock(PagingStore.class);
-      
-      EasyMock.expect(pagingManager.getPageStore((SimpleString)EasyMock.anyObject())).andStubReturn(pagingStore);
-      EasyMock.expect(postOffice.getPagingManager()).andStubReturn(pagingManager);
-      
-      EasyMock.replay(pagingManager, postOffice);
-      
-      //Durable queue
-      Queue queue1 = new QueueImpl(12, new SimpleString("queue1"), null, false, true, false, scheduledExecutor, postOffice, null);
-      
-      //Durable queue
-      Queue queue2 = new QueueImpl(34, new SimpleString("queue2"), null, false, true, false, scheduledExecutor, postOffice, null);
-      
-      //Non durable queue
-      Queue queue3 = new QueueImpl(65, new SimpleString("queue3"), null, false, false, false, scheduledExecutor, postOffice, null);
-      
-      //Some refs to ack
-      
-      ServerMessage message1 = this.generateMessage(12);
-      
-      MessageReference ref1 = message1.createReference(queue1);
-      
-      MessageReference ref2 = message1.createReference(queue2);
-      
-      MessageReference ref3 = message1.createReference(queue3);
-      
-      
-      //Non durable message to ack
-      ServerMessage message2 = this.generateMessage(23);
-      
-      message2.setDurable(false);
-            
-      MessageReference ref4 = message2.createReference(queue1);
-      
-         
-      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
-      
-      final long txID = 123;
-      
-      EasyMock.expect(sm.generateUniqueID()).andReturn(txID);
-      
-      EasyMock.reset(postOffice, pagingManager, pagingStore);
-      
-      EasyMock.replay(sm, postOffice, pagingManager, pagingStore);
-            
-      Transaction tx = new TransactionImpl(sm, postOffice);
-      
-      assertFalse(tx.isContainsPersistent());
-            
-      EasyMock.verify(sm, postOffice, pagingManager, pagingStore);
-      
-      EasyMock.reset(sm, postOffice, pagingManager, pagingStore);
-      
-      //Expect:
-      
-      sm.storeAcknowledgeTransactional(txID, queue1.getPersistenceID(), message1.getMessageID());
-      sm.deleteMessageTransactional(txID, queue2.getPersistenceID(), message1.getMessageID());
-      
-      EasyMock.replay(sm, postOffice, pagingManager, pagingStore);
-      
-      tx.addAcknowledgement(ref3);
-      
-      assertFalse(tx.isContainsPersistent());
-      
-      tx.addAcknowledgement(ref1);
-      
-      assertTrue(tx.isContainsPersistent());
-      
-      tx.addAcknowledgement(ref2);
-      
-      assertTrue(tx.isContainsPersistent());
-      
-      
-      assertEquals(3, tx.getAcknowledgementsCount());
-      
-      EasyMock.verify(sm, postOffice, pagingManager, pagingStore);
-      
-      EasyMock.reset(sm, postOffice, pagingManager, pagingStore);
-      
-      //Expect:
-      
-      //Nothing
-      
-      EasyMock.replay(sm, postOffice, pagingManager, pagingStore);
-      
-      tx.addAcknowledgement(ref4);
-      
-      assertEquals(4, tx.getAcknowledgementsCount());
-      
-      EasyMock.verify(sm, postOffice, pagingManager, pagingStore);
-      
-      EasyMock.reset(sm, postOffice, pagingManager, pagingStore);
-      
-      //Expect:
-      
-//      postOffice.deliver((List<MessageReference>)EasyMock.anyObject());
+//   
+//   public void testAckCommit() throws Exception
+//   {
 //      
-//      EasyMock.expectLastCall().anyTimes();
+//      PagingManager pagingManager = EasyMock.createStrictMock(PagingManager.class);
+//      PostOffice postOffice = EasyMock.createNiceMock(PostOffice.class);
+//      PagingStore pagingStore = EasyMock.createNiceMock(PagingStore.class);
 //      
-      sm.commit(txID);
-
-      EasyMock.expect(pagingManager.getPageStore((SimpleString)EasyMock.anyObject())).andStubReturn(pagingStore);
-      EasyMock.expect(postOffice.getPagingManager()).andStubReturn(pagingManager);
- 
-      EasyMock.replay(sm, postOffice, pagingManager, pagingStore);
-      
-      tx.commit();
-      
-      EasyMock.verify(sm, postOffice, pagingManager, pagingStore);
-      
-      EasyMock.reset(sm, postOffice, pagingManager, pagingStore);            
-      
-      //TODO test messages are routed and refs count reduced
-   }
+//      EasyMock.expect(pagingManager.getPageStore((SimpleString)EasyMock.anyObject())).andStubReturn(pagingStore);
+//      EasyMock.expect(postOffice.getPagingManager()).andStubReturn(pagingManager);
+//      
+//      EasyMock.replay(pagingManager, postOffice);
+//      
+//      //Durable queue
+//      Queue queue1 = new QueueImpl(12, new SimpleString("queue1"), null, false, true, false, scheduledExecutor, postOffice, null);
+//      
+//      //Durable queue
+//      Queue queue2 = new QueueImpl(34, new SimpleString("queue2"), null, false, true, false, scheduledExecutor, postOffice, null);
+//      
+//      //Non durable queue
+//      Queue queue3 = new QueueImpl(65, new SimpleString("queue3"), null, false, false, false, scheduledExecutor, postOffice, null);
+//      
+//      //Some refs to ack
+//      
+//      ServerMessage message1 = this.generateMessage(12);
+//      
+//      MessageReference ref1 = message1.createReference(queue1);
+//      
+//      MessageReference ref2 = message1.createReference(queue2);
+//      
+//      MessageReference ref3 = message1.createReference(queue3);
+//      
+//      
+//      //Non durable message to ack
+//      ServerMessage message2 = this.generateMessage(23);
+//      
+//      message2.setDurable(false);
+//            
+//      MessageReference ref4 = message2.createReference(queue1);
+//      
+//         
+//      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+//      
+//      final long txID = 123;
+//      
+//      EasyMock.expect(sm.generateUniqueID()).andReturn(txID);
+//      
+//      EasyMock.reset(postOffice, pagingManager, pagingStore);
+//      
+//      EasyMock.replay(sm, postOffice, pagingManager, pagingStore);
+//            
+//      Transaction tx = new TransactionImpl(sm, postOffice);
+//      
+//      assertFalse(tx.isContainsPersistent());
+//            
+//      EasyMock.verify(sm, postOffice, pagingManager, pagingStore);
+//      
+//      EasyMock.reset(sm, postOffice, pagingManager, pagingStore);
+//      
+//      //Expect:
+//      
+//      sm.storeAcknowledgeTransactional(txID, queue1.getPersistenceID(), message1.getMessageID());
+//      sm.deleteMessageTransactional(txID, queue2.getPersistenceID(), message1.getMessageID());
+//      
+//      EasyMock.replay(sm, postOffice, pagingManager, pagingStore);
+//      
+//      tx.addAcknowledgement(ref3);
+//      
+//      assertFalse(tx.isContainsPersistent());
+//      
+//      tx.addAcknowledgement(ref1);
+//      
+//      assertTrue(tx.isContainsPersistent());
+//      
+//      tx.addAcknowledgement(ref2);
+//      
+//      assertTrue(tx.isContainsPersistent());
+//      
+//      
+//      assertEquals(3, tx.getAcknowledgementsCount());
+//      
+//      EasyMock.verify(sm, postOffice, pagingManager, pagingStore);
+//      
+//      EasyMock.reset(sm, postOffice, pagingManager, pagingStore);
+//      
+//      //Expect:
+//      
+//      //Nothing
+//      
+//      EasyMock.replay(sm, postOffice, pagingManager, pagingStore);
+//      
+//      tx.addAcknowledgement(ref4);
+//      
+//      assertEquals(4, tx.getAcknowledgementsCount());
+//      
+//      EasyMock.verify(sm, postOffice, pagingManager, pagingStore);
+//      
+//      EasyMock.reset(sm, postOffice, pagingManager, pagingStore);
+//      
+//      //Expect:
+//      
+////      postOffice.deliver((List<MessageReference>)EasyMock.anyObject());
+////      
+////      EasyMock.expectLastCall().anyTimes();
+////      
+//      sm.commit(txID);
+//
+//      EasyMock.expect(pagingManager.getPageStore((SimpleString)EasyMock.anyObject())).andStubReturn(pagingStore);
+//      EasyMock.expect(postOffice.getPagingManager()).andStubReturn(pagingManager);
+// 
+//      EasyMock.replay(sm, postOffice, pagingManager, pagingStore);
+//      
+//      tx.commit();
+//      
+//      EasyMock.verify(sm, postOffice, pagingManager, pagingStore);
+//      
+//      EasyMock.reset(sm, postOffice, pagingManager, pagingStore);            
+//      
+//      //TODO test messages are routed and refs count reduced
+//   }
    
    // Private -------------------------------------------------------------------------
    

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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSManagementServiceImplTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -129,6 +129,7 @@
       JBossTopic topic = new JBossTopic(name);
       PostOffice postOffice = createMock(PostOffice.class);
       StorageManager storageManager = createMock(StorageManager.class);
+      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
 
       ManagementService managementService = createMock(ManagementService.class);
       managementService.registerInJMX(eq(objectName), isA(StandardMBean.class));
@@ -137,7 +138,7 @@
       replay(managementService, postOffice, storageManager);
 
       JMSManagementService service = new JMSManagementServiceImpl(managementService);
-      service.registerTopic(topic, jndiBinding, postOffice, storageManager);
+      service.registerTopic(topic, jndiBinding, postOffice, storageManager, queueSettingsRepository);
       
       verify(managementService, postOffice, storageManager);
    }

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-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/JMSQueueControlTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -69,12 +69,19 @@
 public class JMSQueueControlTest extends TestCase
 {
    private String jndiBinding;
+
    private String name;
+
    private JBossQueue queue;
+
    private Queue coreQueue;
+
    private PostOffice postOffice;
+
    private StorageManager storageManager;
-   private HierarchicalRepository queueSettingsRepository;
+
+   private HierarchicalRepository<QueueSettings> queueSettingsRepository;
+
    private MessageCounter counter;
 
    // Constants -----------------------------------------------------
@@ -249,8 +256,7 @@
          @Override
          public SimpleString getExpiryAddress()
          {
-            return new SimpleString(JBossQueue.JMS_QUEUE_ADDRESS_PREFIX
-                  + expiryQueue);
+            return new SimpleString(JBossQueue.JMS_QUEUE_ADDRESS_PREFIX + expiryQueue);
          }
       };
       expect(queueSettingsRepository.getMatch(name)).andReturn(settings);
@@ -275,8 +281,7 @@
       expect(ref.getMessage()).andReturn(message);
       refs.add(ref);
       expect(coreQueue.list(EasyMock.isA(Filter.class))).andReturn(refs);
-      expect(coreQueue.deleteReference(messageID, storageManager)).andReturn(
-            true);
+      expect(coreQueue.deleteReference(messageID, storageManager, postOffice, queueSettingsRepository)).andReturn(true);
 
       replayMockedAttributes();
       replay(ref, message);
@@ -291,7 +296,7 @@
    public void testRemoveAllMessages() throws Exception
    {
       int removedMessagesCount = randomPositiveInt();
-     expect(coreQueue.deleteAllReferences(storageManager)).andReturn(removedMessagesCount);
+      expect(coreQueue.deleteAllReferences(storageManager, postOffice, queueSettingsRepository)).andReturn(removedMessagesCount);
 
       replayMockedAttributes();
 
@@ -307,20 +312,15 @@
       List<MessageReference> refs = new ArrayList<MessageReference>();
       MessageReference ref = createMock(MessageReference.class);
       ServerMessage message = createMock(ServerMessage.class);
-      expect(message.getProperty(new SimpleString("JMSMessageID")))
-            .andStubReturn(randomSimpleString());
-      expect(message.getProperty(new SimpleString("JMSCorrelationID")))
-            .andStubReturn(randomSimpleString());
-      expect(message.getProperty(new SimpleString("JMSType"))).andStubReturn(
-            randomSimpleString());
+      expect(message.getProperty(new SimpleString("JMSMessageID"))).andStubReturn(randomSimpleString());
+      expect(message.getProperty(new SimpleString("JMSCorrelationID"))).andStubReturn(randomSimpleString());
+      expect(message.getProperty(new SimpleString("JMSType"))).andStubReturn(randomSimpleString());
       expect(message.isDurable()).andStubReturn(randomBoolean());
       expect(message.getPriority()).andStubReturn(randomByte());
-      expect(message.getProperty(new SimpleString("JMSReplyTo")))
-            .andStubReturn(randomSimpleString());
+      expect(message.getProperty(new SimpleString("JMSReplyTo"))).andStubReturn(randomSimpleString());
       expect(message.getTimestamp()).andStubReturn(randomLong());
       expect(message.getExpiration()).andStubReturn(randomLong());
-      expect(message.getPropertyNames()).andStubReturn(
-            new HashSet<SimpleString>());
+      expect(message.getPropertyNames()).andStubReturn(new HashSet<SimpleString>());
       expect(ref.getMessage()).andReturn(message);
       refs.add(ref);
       expect(coreQueue.list(isA(Filter.class))).andReturn(refs);
@@ -331,8 +331,7 @@
       JMSQueueControl control = createControl();
       TabularData data = control.listMessages(filterStr);
       assertEquals(1, data.size());
-      CompositeData info = data.get(new Object[] { message.getProperty(
-            new SimpleString("JMSMessageID")).toString() });
+      CompositeData info = data.get(new Object[] { message.getProperty(new SimpleString("JMSMessageID")).toString() });
       assertNotNull(info);
 
       verifyMockedAttributes();
@@ -350,7 +349,8 @@
       {
          control.listMessages(invalidFilterStr);
          fail("IllegalStateException");
-      } catch (IllegalStateException e)
+      }
+      catch (IllegalStateException e)
       {
 
       }
@@ -370,9 +370,7 @@
       expect(ref.getMessage()).andReturn(serverMessage);
       refs.add(ref);
       expect(coreQueue.list(EasyMock.isA(Filter.class))).andReturn(refs);
-      expect(
-            coreQueue.expireMessage(messageID, storageManager, postOffice,
-                  queueSettingsRepository)).andReturn(true);
+      expect(coreQueue.expireMessage(messageID, storageManager, postOffice, queueSettingsRepository)).andReturn(true);
 
       replayMockedAttributes();
       replay(ref, serverMessage);
@@ -388,8 +386,7 @@
    {
       String jmsMessageID = randomString();
 
-      expect(coreQueue.list(isA(Filter.class))).andReturn(
-            new ArrayList<MessageReference>());
+      expect(coreQueue.list(isA(Filter.class))).andReturn(new ArrayList<MessageReference>());
 
       replayMockedAttributes();
 
@@ -398,7 +395,8 @@
       {
          control.expireMessage(jmsMessageID);
          fail("IllegalArgumentException");
-      } catch (IllegalArgumentException e)
+      }
+      catch (IllegalArgumentException e)
       {
       }
 
@@ -408,11 +406,12 @@
    public void testExpireMessages() throws Exception
    {
       int expiredMessages = randomInt();
-      
-      expect(
-            coreQueue.expireMessages(isA(Filter.class), eq(storageManager), eq(postOffice),
-                  eq(queueSettingsRepository))).andReturn(expiredMessages);
 
+      expect(coreQueue.expireMessages(isA(Filter.class),
+                                      eq(storageManager),
+                                      eq(postOffice),
+                                      eq(queueSettingsRepository))).andReturn(expiredMessages);
+
       replayMockedAttributes();
 
       JMSQueueControl control = createControl();
@@ -433,9 +432,7 @@
       expect(ref.getMessage()).andReturn(serverMessage);
       refs.add(ref);
       expect(coreQueue.list(isA(Filter.class))).andReturn(refs);
-      expect(
-            coreQueue.sendMessageToDeadLetterAddress(messageID, storageManager, postOffice,
-                  queueSettingsRepository)).andReturn(true);
+      expect(coreQueue.sendMessageToDeadLetterAddress(messageID, storageManager, postOffice, queueSettingsRepository)).andReturn(true);
 
       replayMockedAttributes();
       replay(ref, serverMessage);
@@ -451,8 +448,7 @@
    {
       String jmsMessageID = randomString();
 
-      expect(coreQueue.list(isA(Filter.class))).andReturn(
-            new ArrayList<MessageReference>());
+      expect(coreQueue.list(isA(Filter.class))).andReturn(new ArrayList<MessageReference>());
       replayMockedAttributes();
 
       JMSQueueControl control = createControl();
@@ -460,7 +456,8 @@
       {
          control.sendMessageToDLQ(jmsMessageID);
          fail("IllegalArgumentException");
-      } catch (IllegalArgumentException e)
+      }
+      catch (IllegalArgumentException e)
       {
       }
 
@@ -480,10 +477,11 @@
       expect(ref.getMessage()).andReturn(serverMessage);
       refs.add(ref);
       expect(coreQueue.list(isA(Filter.class))).andReturn(refs);
-      expect(
-            coreQueue.changeMessagePriority(messageID, newPriority,
-                  storageManager, postOffice, queueSettingsRepository))
-            .andReturn(true);
+      expect(coreQueue.changeMessagePriority(messageID,
+                                             newPriority,
+                                             storageManager,
+                                             postOffice,
+                                             queueSettingsRepository)).andReturn(true);
 
       replayMockedAttributes();
       replay(ref, serverMessage);
@@ -495,8 +493,7 @@
       verify(ref, serverMessage);
    }
 
-   public void testChangeMessagePriorityWithInvalidPriorityValues()
-         throws Exception
+   public void testChangeMessagePriorityWithInvalidPriorityValues() throws Exception
    {
       String jmsMessageID = randomString();
 
@@ -507,7 +504,8 @@
       {
          control.changeMessagePriority(jmsMessageID, -1);
          fail("IllegalArgumentException");
-      } catch (IllegalArgumentException e)
+      }
+      catch (IllegalArgumentException e)
       {
       }
 
@@ -515,7 +513,8 @@
       {
          control.changeMessagePriority(jmsMessageID, 10);
          fail("IllegalArgumentException");
-      } catch (IllegalArgumentException e)
+      }
+      catch (IllegalArgumentException e)
       {
       }
 
@@ -527,8 +526,7 @@
       byte newPriority = 5;
       String jmsMessageID = randomString();
 
-      expect(coreQueue.list(isA(Filter.class))).andReturn(
-            new ArrayList<MessageReference>());
+      expect(coreQueue.list(isA(Filter.class))).andReturn(new ArrayList<MessageReference>());
 
       replayMockedAttributes();
 
@@ -537,7 +535,8 @@
       {
          control.changeMessagePriority(jmsMessageID, newPriority);
          fail("IllegalArgumentException");
-      } catch (IllegalArgumentException e)
+      }
+      catch (IllegalArgumentException e)
       {
       }
 
@@ -583,8 +582,13 @@
 
    private JMSQueueControl createControl() throws NotCompliantMBeanException
    {
-      return new JMSQueueControl(queue, coreQueue, jndiBinding, postOffice,
-            storageManager, queueSettingsRepository, counter);
+      return new JMSQueueControl(queue,
+                                 coreQueue,
+                                 jndiBinding,
+                                 postOffice,
+                                 storageManager,
+                                 queueSettingsRepository,
+                                 counter);
    }
 
    private void replayMockedAttributes()

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/TopicControlTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/TopicControlTest.java	2009-01-03 00:00:23 UTC (rev 5572)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/server/management/impl/TopicControlTest.java	2009-01-03 11:31:18 UTC (rev 5573)
@@ -26,6 +26,7 @@
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
+import static org.easymock.classextension.EasyMock.createMock;
 import static org.jboss.messaging.tests.util.RandomUtil.randomInt;
 import static org.jboss.messaging.tests.util.RandomUtil.randomPositiveInt;
 import static org.jboss.messaging.tests.util.RandomUtil.randomString;
@@ -44,6 +45,7 @@
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.postoffice.impl.BindingsImpl;
 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.jms.JBossTopic;
 import org.jboss.messaging.jms.server.management.SubscriptionInfo;
@@ -75,11 +77,11 @@
       JBossTopic topic = new JBossTopic(name);
       PostOffice postOffice = createMock(PostOffice.class);
       StorageManager storageManager = createMock(StorageManager.class);
+      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
 
       replay(postOffice, storageManager);
 
-      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-            storageManager);
+      TopicControl control = new TopicControl(topic, jndiBinding, postOffice, storageManager, queueSettingsRepository);
       assertEquals(name, control.getName());
 
       verify(postOffice, storageManager);
@@ -93,11 +95,11 @@
       JBossTopic topic = new JBossTopic(name);
       PostOffice postOffice = createMock(PostOffice.class);
       StorageManager storageManager = createMock(StorageManager.class);
+      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
 
       replay(postOffice, storageManager);
 
-      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-            storageManager);
+      TopicControl control = new TopicControl(topic, jndiBinding, postOffice, storageManager, queueSettingsRepository);
       assertEquals(topic.getAddress(), control.getAddress());
 
       verify(postOffice, storageManager);
@@ -111,11 +113,11 @@
       JBossTopic topic = new JBossTopic(name);
       PostOffice postOffice = createMock(PostOffice.class);
       StorageManager storageManager = createMock(StorageManager.class);
+      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
 
       replay(postOffice, storageManager);
 
-      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-            storageManager);
+      TopicControl control = new TopicControl(topic, jndiBinding, postOffice, storageManager, queueSettingsRepository);
       assertEquals(jndiBinding, control.getJNDIBinding());
 
       verify(postOffice, storageManager);
@@ -129,262 +131,262 @@
       JBossTopic topic = new JBossTopic(name);
       PostOffice postOffice = createMock(PostOffice.class);
       StorageManager storageManager = createMock(StorageManager.class);
+      HierarchicalRepository<QueueSettings> queueSettingsRepository = createMock(HierarchicalRepository.class);
 
       replay(postOffice, storageManager);
 
-      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-            storageManager);
+      TopicControl control = new TopicControl(topic, jndiBinding, postOffice, storageManager, queueSettingsRepository);
       assertEquals(topic.isTemporary(), control.isTemporary());
 
       verify(postOffice, storageManager);
    }
 
-//   public void testGetMessageCount() throws Exception
-//   {
-//      String jndiBinding = randomString();
-//      String name = randomString();
-//
-//      int countForNonDurableQueue = randomInt();
-//      int countForDurableQueue_1 = randomInt();
-//      int countForDurableQueue_2 = randomInt();
-//
-//      JBossTopic topic = new JBossTopic(name);
-//      PostOffice postOffice = createMock(PostOffice.class);
-//      StorageManager storageManager = createMock(StorageManager.class);
-//
-//      Queue nonDurableQueue = createMock(Queue.class);
-//      expect(nonDurableQueue.isDurable()).andStubReturn(false);
-//      expect(nonDurableQueue.getMessageCount()).andStubReturn(
-//            countForNonDurableQueue);
-//      Binding bindingForNonDurableQueue = createMock(Binding.class);
-//      expect(bindingForNonDurableQueue.getQueue()).andStubReturn(
-//            nonDurableQueue);
-//
-//      Queue durableQueue_1 = createMock(Queue.class);
-//      expect(durableQueue_1.isDurable()).andStubReturn(true);
-//      expect(durableQueue_1.getMessageCount()).andStubReturn(
-//            countForDurableQueue_1);
-//      Binding bindingForDurableQueue_1 = createMock(Binding.class);
-//      expect(bindingForDurableQueue_1.getQueue()).andStubReturn(durableQueue_1);
-//
-//      Queue durableQueue_2 = createMock(Queue.class);
-//      expect(durableQueue_2.isDurable()).andStubReturn(true);
-//      expect(durableQueue_2.getMessageCount()).andStubReturn(
-//            countForDurableQueue_2);
-//      Binding bindingForDurableQueue_2 = createMock(Binding.class);
-//      expect(bindingForDurableQueue_2.getQueue()).andStubReturn(durableQueue_2);
-//
-//      Bindings bindings = new BindingsImpl();
-//      bindings.addBinding(bindingForNonDurableQueue);
-//      bindings.addBinding(bindingForDurableQueue_1);
-//      bindings.addBinding(bindingForDurableQueue_2);
-//      expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
-//            .andStubReturn(bindings);
-//      replay(postOffice, storageManager, bindingForNonDurableQueue,
-//            nonDurableQueue, bindingForDurableQueue_1, durableQueue_1,
-//            bindingForDurableQueue_2, durableQueue_2);
-//
-//      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-//            storageManager);
-//      assertEquals(countForNonDurableQueue + countForDurableQueue_1
-//            + countForDurableQueue_2, control.getMessageCount());
-//      assertEquals(countForDurableQueue_1 + countForDurableQueue_2, control
-//            .getDurableMessagesCount());
-//      assertEquals(countForNonDurableQueue, control.getNonDurableMessagesCount());
-//
-//      verify(postOffice, storageManager, bindingForNonDurableQueue,
-//            nonDurableQueue, bindingForDurableQueue_1, durableQueue_1,
-//            bindingForDurableQueue_2, durableQueue_2);
-//   }
-//
-//   public void testGetSubcriptionsCount() throws Exception
-//   {
-//      String jndiBinding = randomString();
-//      String name = randomString();
-//
-//      JBossTopic topic = new JBossTopic(name);
-//      PostOffice postOffice = createMock(PostOffice.class);
-//      StorageManager storageManager = createMock(StorageManager.class);
-//
-//      Queue nonDurableQueue = createMock(Queue.class);
-//      expect(nonDurableQueue.isDurable()).andStubReturn(false);
-//      Binding bindingForNonDurableQueue = createMock(Binding.class);
-//      expect(bindingForNonDurableQueue.getQueue()).andStubReturn(
-//            nonDurableQueue);
-//
-//      Queue durableQueue_1 = createMock(Queue.class);
-//      expect(durableQueue_1.isDurable()).andStubReturn(true);
-//      Binding bindingForDurableQueue_1 = createMock(Binding.class);
-//      expect(bindingForDurableQueue_1.getQueue()).andStubReturn(durableQueue_1);
-//
-//      Queue durableQueue_2 = createMock(Queue.class);
-//      expect(durableQueue_2.isDurable()).andStubReturn(true);
-//      Binding bindingForDurableQueue_2 = createMock(Binding.class);
-//      expect(bindingForDurableQueue_2.getQueue()).andStubReturn(durableQueue_2);
-//
-//      List<Binding> bindings = new ArrayList<Binding>();
-//      bindings.add(bindingForNonDurableQueue);
-//      bindings.add(bindingForDurableQueue_1);
-//      bindings.add(bindingForDurableQueue_2);
-//      expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
-//            .andStubReturn(bindings);
-//      replay(postOffice, storageManager, bindingForNonDurableQueue,
-//            nonDurableQueue, bindingForDurableQueue_1, durableQueue_1,
-//            bindingForDurableQueue_2, durableQueue_2);
-//
-//      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-//            storageManager);
-//      assertEquals(3, control.getSubcriptionsCount());
-//      assertEquals(2, control.getDurableSubcriptionsCount());
-//      assertEquals(1, control.getNonDurableSubcriptionsCount());
-//
-//      verify(postOffice, storageManager, bindingForNonDurableQueue,
-//            nonDurableQueue, bindingForDurableQueue_1, durableQueue_1,
-//            bindingForDurableQueue_2, durableQueue_2);
-//   }
-//
-//   public void testRemoveAllMessages() throws Exception
-//   {
-//      String jndiBinding = randomString();
-//      String name = randomString();
-//      int removedMessagesFromQueue1 = randomPositiveInt();
-//      int removedMessagesFromQueue2 = randomPositiveInt();
-//
-//      JBossTopic topic = new JBossTopic(name);
-//      PostOffice postOffice = createMock(PostOffice.class);
-//      StorageManager storageManager = createMock(StorageManager.class);
-//
-//      Queue queue_1 = createMock(Queue.class);
-//      Binding bindingforQueue_1 = createMock(Binding.class);
-//      expect(bindingforQueue_1.getQueue()).andStubReturn(queue_1);
-//
-//      Queue queue_2 = createMock(Queue.class);
-//      Binding bindingForQueue_2 = createMock(Binding.class);
-//      expect(bindingForQueue_2.getQueue()).andStubReturn(queue_2);
-//
-//      List<Binding> bindings = new ArrayList<Binding>();
-//      bindings.add(bindingforQueue_1);
-//      bindings.add(bindingForQueue_2);
-//      expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
-//            .andStubReturn(bindings);
-//      expect(queue_1.deleteAllReferences(storageManager)).andReturn(removedMessagesFromQueue1);
-//      expect(queue_2.deleteAllReferences(storageManager)).andReturn(removedMessagesFromQueue2);
-//
-//      replay(postOffice, storageManager, bindingforQueue_1, queue_1,
-//            bindingForQueue_2, queue_2);
-//
-//      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-//            storageManager);
-//      assertEquals(removedMessagesFromQueue1 + removedMessagesFromQueue2, control.removeAllMessages());
-//
-//      verify(postOffice, storageManager, bindingforQueue_1, queue_1,
-//            bindingForQueue_2, queue_2);
-//   }
-//
-//   public void testListSubscriptionInfos() throws Exception
-//   {
-//      String jndiBinding = randomString();
-//      String name = randomString();
-//
-//      JBossTopic topic = new JBossTopic(name);
-//      PostOffice postOffice = createMock(PostOffice.class);
-//      StorageManager storageManager = createMock(StorageManager.class);
-//
-//      Queue durableQueue = createMock(Queue.class);
-//      expect(durableQueue.getName()).andStubReturn(
-//            JBossTopic.createAddressFromName(randomString()));
-//      expect(durableQueue.getFilter()).andStubReturn(null);
-//      expect(durableQueue.isDurable()).andStubReturn(true);
-//      expect(durableQueue.getMessageCount()).andStubReturn(randomInt());
-//      Binding bindingForDurableQueue = createMock(Binding.class);
-//      expect(bindingForDurableQueue.getQueue()).andStubReturn(durableQueue);
-//
-//      Queue nonDurableQueue = createMock(Queue.class);
-//      expect(nonDurableQueue.getName()).andStubReturn(
-//            JBossTopic.createAddressFromName(randomString()));
-//      expect(nonDurableQueue.getFilter()).andStubReturn(null);
-//      expect(nonDurableQueue.isDurable()).andStubReturn(false);
-//      expect(nonDurableQueue.getMessageCount()).andStubReturn(randomInt());
-//      Binding bindingForNonDurableQueue = createMock(Binding.class);
-//      expect(bindingForNonDurableQueue.getQueue()).andStubReturn(nonDurableQueue);
-//      List<Binding> bindings = new ArrayList<Binding>();
-//      bindings.add(bindingForDurableQueue);
-//      bindings.add(bindingForNonDurableQueue);
-//      expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
-//            .andStubReturn(bindings);
-//      replay(postOffice, storageManager, bindingForDurableQueue, durableQueue,
-//            bindingForNonDurableQueue, nonDurableQueue);
-//
-//      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-//            storageManager);
-//      SubscriptionInfo[] infos = control.listAllSubscriptionInfos();
-//      assertEquals(2, infos.length);
-//      infos = control.listDurableSubscriptionInfos();
-//      assertEquals(1, infos.length);
-//      assertEquals(durableQueue.getName().toString(), infos[0].getQueueName());
-//      infos = control.listNonDurableSubscriptionInfos();
-//      assertEquals(1, infos.length);
-//      assertEquals(nonDurableQueue.getName().toString(), infos[0].getQueueName());
-//
-//      verify(postOffice, storageManager, bindingForDurableQueue, durableQueue,
-//            bindingForNonDurableQueue, nonDurableQueue);
-//   }
-//
-//   public void testListSubscriptions() throws Exception
-//   {
-//      String jndiBinding = randomString();
-//      String name = randomString();
-//
-//      
-//      QueueSettings settings = new QueueSettings();
-//
-//      JBossTopic topic = new JBossTopic(name);
-//      PostOffice postOffice = createMock(PostOffice.class);
-//      StorageManager storageManager = createMock(StorageManager.class);
-//
-//      Queue durableQueue = createMock(Queue.class);
-//      expect(durableQueue.getName()).andStubReturn(
-//            JBossTopic.createAddressFromName(randomString()));
-//      expect(durableQueue.getFilter()).andStubReturn(null);
-//      expect(durableQueue.isDurable()).andStubReturn(true);
-//      expect(durableQueue.getMessageCount()).andStubReturn(randomInt());
-//      Binding bindingForDurableQueue = createMock(Binding.class);
-//      expect(bindingForDurableQueue.getQueue()).andStubReturn(durableQueue);
-//
-//      Queue nonDurableQueue = createMock(Queue.class);
-//      expect(nonDurableQueue.getName()).andStubReturn(
-//            JBossTopic.createAddressFromName(randomString()));
-//      expect(nonDurableQueue.getFilter()).andStubReturn(null);
-//      expect(nonDurableQueue.isDurable()).andStubReturn(false);
-//      expect(nonDurableQueue.getMessageCount()).andStubReturn(randomInt());
-//      Binding bindingForNonDurableQueue = createMock(Binding.class);
-//      expect(bindingForNonDurableQueue.getQueue()).andStubReturn(nonDurableQueue);
-//
-//      List<Binding> bindings = new ArrayList<Binding>();
-//      bindings.add(bindingForDurableQueue);
-//      bindings.add(bindingForNonDurableQueue);
-//      expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
-//            .andStubReturn(bindings);
-//      replay(postOffice, storageManager, bindingForDurableQueue, durableQueue,
-//            bindingForNonDurableQueue, nonDurableQueue);
-//
-//      TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
-//            storageManager);
-//      TabularData data = control.listAllSubscriptions();
-//      assertEquals(2, data.size());
-//      data = control.listDurableSubscriptions();
-//      assertEquals(1, data.size());
-//      CompositeData info = data.get(new String[] { durableQueue.getName()
-//            .toString() });
-//      assertNotNull(info);
-//      data = control.listNonDurableSubscriptions();
-//      assertEquals(1, data.size());
-//      info = data.get(new String[] { nonDurableQueue.getName().toString() });
-//      assertNotNull(info);
-//
-//      verify(postOffice, storageManager, bindingForDurableQueue, durableQueue,
-//            bindingForNonDurableQueue, nonDurableQueue);
-//   }
+   // public void testGetMessageCount() throws Exception
+   // {
+   // String jndiBinding = randomString();
+   // String name = randomString();
+   //
+   // int countForNonDurableQueue = randomInt();
+   // int countForDurableQueue_1 = randomInt();
+   // int countForDurableQueue_2 = randomInt();
+   //
+   // JBossTopic topic = new JBossTopic(name);
+   // PostOffice postOffice = createMock(PostOffice.class);
+   // StorageManager storageManager = createMock(StorageManager.class);
+   //
+   // Queue nonDurableQueue = createMock(Queue.class);
+   // expect(nonDurableQueue.isDurable()).andStubReturn(false);
+   // expect(nonDurableQueue.getMessageCount()).andStubReturn(
+   // countForNonDurableQueue);
+   // Binding bindingForNonDurableQueue = createMock(Binding.class);
+   // expect(bindingForNonDurableQueue.getQueue()).andStubReturn(
+   // nonDurableQueue);
+   //
+   // Queue durableQueue_1 = createMock(Queue.class);
+   // expect(durableQueue_1.isDurable()).andStubReturn(true);
+   // expect(durableQueue_1.getMessageCount()).andStubReturn(
+   // countForDurableQueue_1);
+   // Binding bindingForDurableQueue_1 = createMock(Binding.class);
+   // expect(bindingForDurableQueue_1.getQueue()).andStubReturn(durableQueue_1);
+   //
+   // Queue durableQueue_2 = createMock(Queue.class);
+   // expect(durableQueue_2.isDurable()).andStubReturn(true);
+   // expect(durableQueue_2.getMessageCount()).andStubReturn(
+   // countForDurableQueue_2);
+   // Binding bindingForDurableQueue_2 = createMock(Binding.class);
+   // expect(bindingForDurableQueue_2.getQueue()).andStubReturn(durableQueue_2);
+   //
+   // Bindings bindings = new BindingsImpl();
+   // bindings.addBinding(bindingForNonDurableQueue);
+   // bindings.addBinding(bindingForDurableQueue_1);
+   // bindings.addBinding(bindingForDurableQueue_2);
+   // expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
+   // .andStubReturn(bindings);
+   // replay(postOffice, storageManager, bindingForNonDurableQueue,
+   // nonDurableQueue, bindingForDurableQueue_1, durableQueue_1,
+   // bindingForDurableQueue_2, durableQueue_2);
+   //
+   // TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
+   // storageManager);
+   // assertEquals(countForNonDurableQueue + countForDurableQueue_1
+   // + countForDurableQueue_2, control.getMessageCount());
+   // assertEquals(countForDurableQueue_1 + countForDurableQueue_2, control
+   // .getDurableMessagesCount());
+   // assertEquals(countForNonDurableQueue, control.getNonDurableMessagesCount());
+   //
+   // verify(postOffice, storageManager, bindingForNonDurableQueue,
+   // nonDurableQueue, bindingForDurableQueue_1, durableQueue_1,
+   // bindingForDurableQueue_2, durableQueue_2);
+   // }
+   //
+   // public void testGetSubcriptionsCount() throws Exception
+   // {
+   // String jndiBinding = randomString();
+   // String name = randomString();
+   //
+   // JBossTopic topic = new JBossTopic(name);
+   // PostOffice postOffice = createMock(PostOffice.class);
+   // StorageManager storageManager = createMock(StorageManager.class);
+   //
+   // Queue nonDurableQueue = createMock(Queue.class);
+   // expect(nonDurableQueue.isDurable()).andStubReturn(false);
+   // Binding bindingForNonDurableQueue = createMock(Binding.class);
+   // expect(bindingForNonDurableQueue.getQueue()).andStubReturn(
+   // nonDurableQueue);
+   //
+   // Queue durableQueue_1 = createMock(Queue.class);
+   // expect(durableQueue_1.isDurable()).andStubReturn(true);
+   // Binding bindingForDurableQueue_1 = createMock(Binding.class);
+   // expect(bindingForDurableQueue_1.getQueue()).andStubReturn(durableQueue_1);
+   //
+   // Queue durableQueue_2 = createMock(Queue.class);
+   // expect(durableQueue_2.isDurable()).andStubReturn(true);
+   // Binding bindingForDurableQueue_2 = createMock(Binding.class);
+   // expect(bindingForDurableQueue_2.getQueue()).andStubReturn(durableQueue_2);
+   //
+   // List<Binding> bindings = new ArrayList<Binding>();
+   // bindings.add(bindingForNonDurableQueue);
+   // bindings.add(bindingForDurableQueue_1);
+   // bindings.add(bindingForDurableQueue_2);
+   // expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
+   // .andStubReturn(bindings);
+   // replay(postOffice, storageManager, bindingForNonDurableQueue,
+   // nonDurableQueue, bindingForDurableQueue_1, durableQueue_1,
+   // bindingForDurableQueue_2, durableQueue_2);
+   //
+   // TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
+   // storageManager);
+   // assertEquals(3, control.getSubcriptionsCount());
+   // assertEquals(2, control.getDurableSubcriptionsCount());
+   // assertEquals(1, control.getNonDurableSubcriptionsCount());
+   //
+   // verify(postOffice, storageManager, bindingForNonDurableQueue,
+   // nonDurableQueue, bindingForDurableQueue_1, durableQueue_1,
+   // bindingForDurableQueue_2, durableQueue_2);
+   // }
+   //
+   // public void testRemoveAllMessages() throws Exception
+   // {
+   // String jndiBinding = randomString();
+   // String name = randomString();
+   // int removedMessagesFromQueue1 = randomPositiveInt();
+   // int removedMessagesFromQueue2 = randomPositiveInt();
+   //
+   // JBossTopic topic = new JBossTopic(name);
+   // PostOffice postOffice = createMock(PostOffice.class);
+   // StorageManager storageManager = createMock(StorageManager.class);
+   //
+   // Queue queue_1 = createMock(Queue.class);
+   // Binding bindingforQueue_1 = createMock(Binding.class);
+   // expect(bindingforQueue_1.getQueue()).andStubReturn(queue_1);
+   //
+   // Queue queue_2 = createMock(Queue.class);
+   // Binding bindingForQueue_2 = createMock(Binding.class);
+   // expect(bindingForQueue_2.getQueue()).andStubReturn(queue_2);
+   //
+   // List<Binding> bindings = new ArrayList<Binding>();
+   // bindings.add(bindingforQueue_1);
+   // bindings.add(bindingForQueue_2);
+   // expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
+   // .andStubReturn(bindings);
+   // expect(queue_1.deleteAllReferences(storageManager)).andReturn(removedMessagesFromQueue1);
+   // expect(queue_2.deleteAllReferences(storageManager)).andReturn(removedMessagesFromQueue2);
+   //
+   // replay(postOffice, storageManager, bindingforQueue_1, queue_1,
+   // bindingForQueue_2, queue_2);
+   //
+   // TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
+   // storageManager);
+   // assertEquals(removedMessagesFromQueue1 + removedMessagesFromQueue2, control.removeAllMessages());
+   //
+   // verify(postOffice, storageManager, bindingforQueue_1, queue_1,
+   // bindingForQueue_2, queue_2);
+   // }
+   //
+   // public void testListSubscriptionInfos() throws Exception
+   // {
+   // String jndiBinding = randomString();
+   // String name = randomString();
+   //
+   // JBossTopic topic = new JBossTopic(name);
+   // PostOffice postOffice = createMock(PostOffice.class);
+   // StorageManager storageManager = createMock(StorageManager.class);
+   //
+   // Queue durableQueue = createMock(Queue.class);
+   // expect(durableQueue.getName()).andStubReturn(
+   // JBossTopic.createAddressFromName(randomString()));
+   // expect(durableQueue.getFilter()).andStubReturn(null);
+   // expect(durableQueue.isDurable()).andStubReturn(true);
+   // expect(durableQueue.getMessageCount()).andStubReturn(randomInt());
+   // Binding bindingForDurableQueue = createMock(Binding.class);
+   // expect(bindingForDurableQueue.getQueue()).andStubReturn(durableQueue);
+   //
+   // Queue nonDurableQueue = createMock(Queue.class);
+   // expect(nonDurableQueue.getName()).andStubReturn(
+   // JBossTopic.createAddressFromName(randomString()));
+   // expect(nonDurableQueue.getFilter()).andStubReturn(null);
+   // expect(nonDurableQueue.isDurable()).andStubReturn(false);
+   // expect(nonDurableQueue.getMessageCount()).andStubReturn(randomInt());
+   // Binding bindingForNonDurableQueue = createMock(Binding.class);
+   // expect(bindingForNonDurableQueue.getQueue()).andStubReturn(nonDurableQueue);
+   // List<Binding> bindings = new ArrayList<Binding>();
+   // bindings.add(bindingForDurableQueue);
+   // bindings.add(bindingForNonDurableQueue);
+   // expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
+   // .andStubReturn(bindings);
+   // replay(postOffice, storageManager, bindingForDurableQueue, durableQueue,
+   // bindingForNonDurableQueue, nonDurableQueue);
+   //
+   // TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
+   // storageManager);
+   // SubscriptionInfo[] infos = control.listAllSubscriptionInfos();
+   // assertEquals(2, infos.length);
+   // infos = control.listDurableSubscriptionInfos();
+   // assertEquals(1, infos.length);
+   // assertEquals(durableQueue.getName().toString(), infos[0].getQueueName());
+   // infos = control.listNonDurableSubscriptionInfos();
+   // assertEquals(1, infos.length);
+   // assertEquals(nonDurableQueue.getName().toString(), infos[0].getQueueName());
+   //
+   // verify(postOffice, storageManager, bindingForDurableQueue, durableQueue,
+   // bindingForNonDurableQueue, nonDurableQueue);
+   // }
+   //
+   // public void testListSubscriptions() throws Exception
+   // {
+   // String jndiBinding = randomString();
+   // String name = randomString();
+   //
+   //      
+   // QueueSettings settings = new QueueSettings();
+   //
+   // JBossTopic topic = new JBossTopic(name);
+   // PostOffice postOffice = createMock(PostOffice.class);
+   // StorageManager storageManager = createMock(StorageManager.class);
+   //
+   // Queue durableQueue = createMock(Queue.class);
+   // expect(durableQueue.getName()).andStubReturn(
+   // JBossTopic.createAddressFromName(randomString()));
+   // expect(durableQueue.getFilter()).andStubReturn(null);
+   // expect(durableQueue.isDurable()).andStubReturn(true);
+   // expect(durableQueue.getMessageCount()).andStubReturn(randomInt());
+   // Binding bindingForDurableQueue = createMock(Binding.class);
+   // expect(bindingForDurableQueue.getQueue()).andStubReturn(durableQueue);
+   //
+   // Queue nonDurableQueue = createMock(Queue.class);
+   // expect(nonDurableQueue.getName()).andStubReturn(
+   // JBossTopic.createAddressFromName(randomString()));
+   // expect(nonDurableQueue.getFilter()).andStubReturn(null);
+   // expect(nonDurableQueue.isDurable()).andStubReturn(false);
+   // expect(nonDurableQueue.getMessageCount()).andStubReturn(randomInt());
+   // Binding bindingForNonDurableQueue = createMock(Binding.class);
+   // expect(bindingForNonDurableQueue.getQueue()).andStubReturn(nonDurableQueue);
+   //
+   // List<Binding> bindings = new ArrayList<Binding>();
+   // bindings.add(bindingForDurableQueue);
+   // bindings.add(bindingForNonDurableQueue);
+   // expect(postOffice.getBindingsForAddress(topic.getSimpleAddress()))
+   // .andStubReturn(bindings);
+   // replay(postOffice, storageManager, bindingForDurableQueue, durableQueue,
+   // bindingForNonDurableQueue, nonDurableQueue);
+   //
+   // TopicControl control = new TopicControl(topic, jndiBinding, postOffice,
+   // storageManager);
+   // TabularData data = control.listAllSubscriptions();
+   // assertEquals(2, data.size());
+   // data = control.listDurableSubscriptions();
+   // assertEquals(1, data.size());
+   // CompositeData info = data.get(new String[] { durableQueue.getName()
+   // .toString() });
+   // assertNotNull(info);
+   // data = control.listNonDurableSubscriptions();
+   // assertEquals(1, data.size());
+   // info = data.get(new String[] { nonDurableQueue.getName().toString() });
+   // assertNotNull(info);
+   //
+   // verify(postOffice, storageManager, bindingForDurableQueue, durableQueue,
+   // bindingForNonDurableQueue, nonDurableQueue);
+   // }
 
    // Package protected ---------------------------------------------
 




More information about the jboss-cvs-commits mailing list