[jboss-cvs] JBoss Messaging SVN: r4759 - in branches/Branch_JBMESSAGING-1303: src/main/org/jboss/messaging/core/server and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jul 31 09:10:12 EDT 2008


Author: jmesnil
Date: 2008-07-31 09:10:12 -0400 (Thu, 31 Jul 2008)
New Revision: 4759

Modified:
   branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/impl/QueueControl.java
   branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/Queue.java
   branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java
   branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java
   branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java
Log:
JBMESSAGING-1303: Revisit management interfaces
* added method Queue.sendMessageToDLQ()

Modified: branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/impl/QueueControl.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/impl/QueueControl.java	2008-07-31 12:10:55 UTC (rev 4758)
+++ branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/impl/QueueControl.java	2008-07-31 13:10:12 UTC (rev 4759)
@@ -267,17 +267,7 @@
 
    public boolean sendMessageToDLQ(long messageID) throws Exception
    {
-      List<MessageReference> refs = queue.list(null);
-      for (MessageReference ref : refs)
-      {
-         ServerMessage message = ref.getMessage();
-         if (message.getMessageID() == messageID)
-         {
-            ref.sendToDLQ(storageManager, postOffice, queueSettingsRepository);
-            return queue.deleteReference(messageID, storageManager);
-         }
-      }
-      return false;
+      return queue.sendMessageToDLQ(messageID, storageManager, postOffice, queueSettingsRepository);
    }
 
    public boolean changeMessagePriority(long messageID, int newPriority)

Modified: branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/Queue.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/Queue.java	2008-07-31 12:10:55 UTC (rev 4758)
+++ branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/Queue.java	2008-07-31 13:10:12 UTC (rev 4759)
@@ -121,8 +121,16 @@
    boolean deleteReference(long messageID, StorageManager storageManager)
    throws Exception;
 
-  boolean expireMessage(long messageID, StorageManager storageManager, PostOffice postOffice, HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception; 
+  boolean expireMessage(long messageID, StorageManager storageManager,
+         PostOffice postOffice,
+         HierarchicalRepository<QueueSettings> queueSettingsRepository)
+         throws Exception; 
 
+  boolean sendMessageToDLQ(long messageID, StorageManager storageManager,
+         PostOffice postOffice,
+         HierarchicalRepository<QueueSettings> queueSettingsRepository)
+         throws Exception;
+
    void lock();
    
    void unlock();

Modified: branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java	2008-07-31 12:10:55 UTC (rev 4758)
+++ branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java	2008-07-31 13:10:12 UTC (rev 4759)
@@ -543,7 +543,26 @@
       }
       return false;
    }
+   
+   public boolean sendMessageToDLQ(final long messageID, final StorageManager storageManager, 
+         final PostOffice postOffice, final HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception 
+   {
+      Iterator<MessageReference> iter = messageReferences.iterator();
 
+      while (iter.hasNext())
+      {
+         MessageReference ref = iter.next();
+         if (ref.getMessage().getMessageID() == messageID)
+         {        
+            deliveringCount.incrementAndGet();
+            ref.sendToDLQ(storageManager, postOffice, queueSettingsRepository);
+            iter.remove();
+            return true;
+         }
+      }
+      return false;
+   }
+
    // Public
    // -----------------------------------------------------------------------------
 

Modified: branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java	2008-07-31 12:10:55 UTC (rev 4758)
+++ branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java	2008-07-31 13:10:12 UTC (rev 4759)
@@ -770,27 +770,19 @@
    {
       long messageID = randomLong();
 
-      List<MessageReference> refs = new ArrayList<MessageReference>();
-      MessageReference ref = createMock(MessageReference.class);
-      ServerMessage message = createMock(ServerMessage.class);
-      expect(message.getMessageID()).andStubReturn(messageID);
-      expect(ref.getMessage()).andReturn(message);
-      refs.add(ref);
       Queue queue = createMock(Queue.class);
       StorageManager storageManager = createMock(StorageManager.class);
-      expect(queue.list(null)).andReturn(refs);
       PostOffice postOffice = createMock(PostOffice.class);
       HierarchicalRepository<QueueSettings> repository = createMock(HierarchicalRepository.class);
-      ref.sendToDLQ(storageManager, postOffice, repository);
-      expect(queue.deleteReference(messageID, storageManager)).andReturn(true);
+      expect(queue.sendMessageToDLQ(messageID, storageManager, postOffice, repository)).andReturn(true);
 
-      replay(queue, storageManager, postOffice, repository, ref, message);
+      replay(queue, storageManager, postOffice, repository);
 
       QueueControlMBean control = new QueueControl(queue, storageManager,
             postOffice, repository);
       assertTrue(control.sendMessageToDLQ(messageID));
 
-      verify(queue, storageManager, postOffice, repository, ref, message);
+      verify(queue, storageManager, postOffice, repository);
    }
    
    public void testSendMessageToDLQWithNoMessageID() throws Exception
@@ -799,9 +791,9 @@
 
       Queue queue = createMock(Queue.class);
       StorageManager storageManager = createMock(StorageManager.class);
-      expect(queue.list(null)).andReturn(new ArrayList<MessageReference>());
       PostOffice postOffice = createMock(PostOffice.class);
       HierarchicalRepository<QueueSettings> repository = createMock(HierarchicalRepository.class);
+      expect(queue.sendMessageToDLQ(messageID, storageManager, postOffice, repository)).andReturn(false);
 
       replay(queue, storageManager, postOffice, repository);
 

Modified: branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java	2008-07-31 12:10:55 UTC (rev 4758)
+++ branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java	2008-07-31 13:10:12 UTC (rev 4759)
@@ -1433,11 +1433,11 @@
       HierarchicalRepository<QueueSettings> queueSettingsRepository = EasyMock.createMock(HierarchicalRepository.class);
       QueueSettings queueSettings = new QueueSettings() 
       {
-      @Override
-      public SimpleString getExpiryQueue()
-      {
-         return expiryQueue;
-      } 
+         @Override
+         public SimpleString getExpiryQueue()
+         {
+            return expiryQueue;
+         } 
       };
       EasyMock.expect(queueSettingsRepository.getMatch(queue1.toString())).andStubReturn(queueSettings);
 
@@ -1462,7 +1462,54 @@
       EasyMock.verify(storageManager, postOffice, queueSettingsRepository, expiryBinding);
    }
 
+   public void testSendMessageToDLQ() throws Exception
+   {
+      long messageID = randomLong();
+      final SimpleString dlqName = new SimpleString("dlq");
+      Queue queue = new QueueImpl(1, queue1, null, false, true, false, -1, scheduledExecutor);
+      MessageReference messageReference = generateReference(queue, messageID);
+      StorageManager storageManager = EasyMock.createMock(StorageManager.class);
+      EasyMock.expect(storageManager.generateTransactionID()).andReturn(randomLong());
+      EasyMock.expect(storageManager.generateMessageID()).andReturn(randomLong());
+      storageManager.storeDeleteTransactional(EasyMock.anyLong(), EasyMock.eq(messageID));
+      storageManager.commit(EasyMock.anyLong());
+      PostOffice postOffice = EasyMock.createMock(PostOffice.class);      
+      Binding dlqBinding = EasyMock.createMock(Binding.class);
+      EasyMock.expect(dlqBinding.getAddress()).andStubReturn(dlqName);
+      EasyMock.expect(postOffice.getBinding(dlqName)).andReturn(dlqBinding );
+      EasyMock.expect(postOffice.route(EasyMock.isA(ServerMessage.class))).andReturn(new ArrayList<MessageReference>());
+      HierarchicalRepository<QueueSettings> queueSettingsRepository = EasyMock.createMock(HierarchicalRepository.class);
+      QueueSettings queueSettings = new QueueSettings() 
+      {
+         @Override
+         public SimpleString getDLQ()
+         {
+            return dlqName;
+         } 
+      };
+      EasyMock.expect(queueSettingsRepository.getMatch(queue1.toString())).andStubReturn(queueSettings);
 
+      EasyMock.replay(storageManager, postOffice, queueSettingsRepository, dlqBinding);
+
+      assertEquals(0, queue.getMessageCount());
+      assertEquals(0, queue.getDeliveringCount());
+      assertEquals(0, queue.getSizeBytes());
+      
+      queue.addLast(messageReference);
+      
+      assertEquals(1, queue.getMessageCount());
+      assertEquals(0, queue.getDeliveringCount());
+      assertTrue(queue.getSizeBytes() > 0);
+      
+      queue.sendMessageToDLQ(messageID, storageManager , postOffice, queueSettingsRepository);
+      
+      assertEquals(0, queue.getMessageCount());
+      assertEquals(0, queue.getDeliveringCount());
+      assertEquals(0, queue.getSizeBytes());
+
+      EasyMock.verify(storageManager, postOffice, queueSettingsRepository, dlqBinding);
+   }
+   
    // Inner classes ---------------------------------------------------------------
 
    class AddtoQueueRunner implements Runnable




More information about the jboss-cvs-commits mailing list