[jboss-cvs] JBoss Messaging SVN: r4745 - in branches/Branch_JBMESSAGING-1303: src/main/org/jboss/messaging/core/management/impl and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jul 29 11:40:12 EDT 2008


Author: jmesnil
Date: 2008-07-29 11:40:12 -0400 (Tue, 29 Jul 2008)
New Revision: 4745

Modified:
   branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/QueueControlMBean.java
   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/MessageReference.java
   branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/impl/MessageReferenceImpl.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/MessageReferenceImplTest.java
Log:
JBMESSAGING-1303: Revisit management interfaces
* added operation moveMessage(messageID, otheQueue) to QueueControlMBean
* added method move() to MessageReference

Modified: branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/QueueControlMBean.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/QueueControlMBean.java	2008-07-29 13:42:17 UTC (rev 4744)
+++ branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/QueueControlMBean.java	2008-07-29 15:40:12 UTC (rev 4745)
@@ -90,5 +90,12 @@
    boolean expireMessage(
          @Parameter(name = "messageID", desc = "A message ID") long messageID)
          throws Exception;
+   
+   @Operation(desc = "Move the message corresponding to the given messageID to another queue", impact = ACTION)
+   boolean moveMessage(
+         @Parameter(name = "messageID", desc = "A message ID") long messageID,
+         @Parameter(name = "otherQueueName", desc = "The name of the queue to move the message to") String otherQueueName)
+         throws Exception;
+   
 
 }

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-29 13:42:17 UTC (rev 4744)
+++ branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/management/impl/QueueControl.java	2008-07-29 15:40:12 UTC (rev 4745)
@@ -35,6 +35,7 @@
 import org.jboss.messaging.core.management.MessageInfo;
 import org.jboss.messaging.core.management.QueueControlMBean;
 import org.jboss.messaging.core.persistence.StorageManager;
+import org.jboss.messaging.core.postoffice.Binding;
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.MessageReference;
 import org.jboss.messaging.core.server.Queue;
@@ -242,6 +243,26 @@
          throw new IllegalStateException(e.getMessage());
       }
    }
+   
+   public boolean moveMessage(long messageID, String otherQueueName) throws Exception
+   {
+      Binding binding = postOffice.getBinding(new SimpleString(otherQueueName));
+      if (binding == null)
+      {
+         throw new IllegalArgumentException("No queue found for " + otherQueueName);
+      }
+      
+      List<MessageReference> refs = queue.list(null);
+      for (MessageReference ref : refs)
+      {
+         if (ref.getMessage().getMessageID() == messageID)
+         {
+            ref.move(binding, storageManager, postOffice);
+            return true;
+         }
+      }
+      return false;
+   }
 
    // StandardMBean overrides ---------------------------------------
 

Modified: branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/MessageReference.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/MessageReference.java	2008-07-29 13:42:17 UTC (rev 4744)
+++ branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/MessageReference.java	2008-07-29 15:40:12 UTC (rev 4745)
@@ -23,6 +23,7 @@
 package org.jboss.messaging.core.server;
 
 import org.jboss.messaging.core.persistence.StorageManager;
+import org.jboss.messaging.core.postoffice.Binding;
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
 import org.jboss.messaging.core.settings.impl.QueueSettings;
@@ -67,7 +68,10 @@
    
    void expire(StorageManager persistenceManager, PostOffice postOffice,
    		      HierarchicalRepository<QueueSettings> queueSettingsRepository) throws Exception;
+   
+   void move(final Binding otherBinding, final StorageManager persistenceManager, final PostOffice postOffice) throws Exception;
 
+
 }
 
 

Modified: branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/impl/MessageReferenceImpl.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/impl/MessageReferenceImpl.java	2008-07-29 13:42:17 UTC (rev 4744)
+++ branches/Branch_JBMESSAGING-1303/src/main/org/jboss/messaging/core/server/impl/MessageReferenceImpl.java	2008-07-29 15:40:12 UTC (rev 4745)
@@ -205,7 +205,24 @@
       
       tx.commit();
    }
+   
+   public void move(final Binding otherBinding, final StorageManager persistenceManager, final PostOffice postOffice) throws Exception
+   {
+      Transaction tx = new TransactionImpl(persistenceManager, postOffice);
 
+      MessageReference copyRef = getMessage().createReference(otherBinding.getQueue());
+      ServerMessage copyMessage = copyRef.getMessage();
+      
+      copyMessage.setDestination(otherBinding.getAddress());
+
+      tx.addMessage(copyMessage);
+
+      queue.deleteReference(message.getMessageID(), persistenceManager);
+
+      tx.commit();
+      
+   }
+
    // Public --------------------------------------------------------
 
    public String toString()

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-29 13:42:17 UTC (rev 4744)
+++ branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java	2008-07-29 15:40:12 UTC (rev 4745)
@@ -22,7 +22,6 @@
 
 package org.jboss.messaging.tests.unit.core.management.impl;
 
-import static org.easymock.EasyMock.anyLong;
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
@@ -45,12 +44,12 @@
 
 import junit.framework.TestCase;
 
-import org.easymock.EasyMock;
 import org.jboss.messaging.core.exception.MessagingException;
 import org.jboss.messaging.core.filter.Filter;
 import org.jboss.messaging.core.management.QueueControlMBean;
 import org.jboss.messaging.core.management.impl.QueueControl;
 import org.jboss.messaging.core.persistence.StorageManager;
+import org.jboss.messaging.core.postoffice.Binding;
 import org.jboss.messaging.core.postoffice.PostOffice;
 import org.jboss.messaging.core.server.MessageReference;
 import org.jboss.messaging.core.server.Queue;
@@ -566,6 +565,83 @@
             message_1, message_2);
    }
 
+   public void testMoveMessage() throws Exception
+   {
+      long messageID = randomLong();
+      SimpleString otherQueueName = randomSimpleString();
+      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);
+      Binding otherBinding = createMock(Binding.class);
+      StorageManager storageManager = createMock(StorageManager.class);
+      expect(queue.list(null)).andReturn(refs);
+      PostOffice postOffice = createMock(PostOffice.class);
+      expect(postOffice.getBinding(otherQueueName)).andReturn(otherBinding);
+      HierarchicalRepository<QueueSettings> repository = createMock(HierarchicalRepository.class);
+      ref.move(otherBinding, storageManager, postOffice);
+
+      replay(queue, storageManager, postOffice, repository, ref, message, otherBinding);
+
+      QueueControlMBean control = new QueueControl(queue, storageManager,
+            postOffice, repository);
+      assertTrue(control.moveMessage(messageID, otherQueueName.toString()));
+
+      verify(queue, storageManager, postOffice, repository, ref, message, otherBinding);
+   }
+
+   public void testMoveMessageWithNoQueue() throws Exception
+   {
+      long messageID = randomLong();
+      SimpleString otherQueueName = randomSimpleString();
+
+      Queue queue = createMock(Queue.class);
+      StorageManager storageManager = createMock(StorageManager.class);
+      PostOffice postOffice = createMock(PostOffice.class);
+      expect(postOffice.getBinding(otherQueueName)).andReturn(null);
+      HierarchicalRepository<QueueSettings> repository = createMock(HierarchicalRepository.class);
+
+      replay(queue, storageManager, postOffice, repository);
+
+      QueueControl control = new QueueControl(queue, storageManager,
+            postOffice, repository);
+      try
+      {
+         control.moveMessage(messageID, otherQueueName.toString());
+         fail("IllegalArgumentException");
+      } catch (IllegalArgumentException e)
+      {
+
+      }
+      verify(queue, storageManager, postOffice, repository);
+   }
+
+   public void testMoveMessageWithNoMessageID() throws Exception
+   {
+      long messageID = randomLong();
+      SimpleString otherQueueName = randomSimpleString();
+      List<MessageReference> refs = new ArrayList<MessageReference>();
+      Queue queue = createMock(Queue.class);
+      Binding otherBinding = createMock(Binding.class);
+      StorageManager storageManager = createMock(StorageManager.class);
+      expect(queue.list(null)).andReturn(refs);
+      PostOffice postOffice = createMock(PostOffice.class);
+      expect(postOffice.getBinding(otherQueueName)).andReturn(otherBinding);
+      HierarchicalRepository<QueueSettings> repository = createMock(HierarchicalRepository.class);
+
+      replay(queue, storageManager, postOffice, repository,otherBinding);
+
+      QueueControl control = new QueueControl(queue, storageManager,
+            postOffice, repository);
+      assertFalse(control.moveMessage(messageID, otherQueueName.toString()));
+
+      verify(queue, storageManager, postOffice, repository, otherBinding);
+   }
+
+
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------

Modified: branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/server/impl/MessageReferenceImplTest.java
===================================================================
--- branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/server/impl/MessageReferenceImplTest.java	2008-07-29 13:42:17 UTC (rev 4744)
+++ branches/Branch_JBMESSAGING-1303/tests/src/org/jboss/messaging/tests/unit/core/server/impl/MessageReferenceImplTest.java	2008-07-29 15:40:12 UTC (rev 4745)
@@ -32,6 +32,7 @@
 import org.jboss.messaging.core.server.impl.MessageReferenceImpl;
 import org.jboss.messaging.core.settings.HierarchicalRepository;
 import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.tests.util.RandomUtil;
 import org.jboss.messaging.tests.util.UnitTestCase;
 import org.jboss.messaging.util.SimpleString;
 
@@ -294,6 +295,38 @@
       EasyMock.verify(sm, po, repos, serverMessage, queue, expQBinding);
    }
 
+   public void testMove() throws Exception
+   {
+      SimpleString address = RandomUtil.randomSimpleString();
+      long messageID = RandomUtil.randomLong();
+      Queue queue = EasyMock.createStrictMock(Queue.class);
+      Binding otherBinding = EasyMock.createStrictMock(Binding.class);
+      Queue otherQueue = EasyMock.createStrictMock(Queue.class);
+      EasyMock.expect(otherBinding.getQueue()).andReturn(otherQueue);
+      EasyMock.expect(otherBinding.getAddress()).andReturn(address);
+      PostOffice postOffice = EasyMock.createMock(PostOffice.class);
+      StorageManager persistenceManager = EasyMock.createMock(StorageManager.class);
+      ServerMessage serverMessage = EasyMock.createStrictMock(ServerMessage.class);
+      MessageReference copyReference = EasyMock.createStrictMock(MessageReference.class);
+      ServerMessage copyMessage = EasyMock.createStrictMock(ServerMessage.class);
+      
+      EasyMock.expect(persistenceManager.generateTransactionID()).andReturn(1l);
+      EasyMock.expect(serverMessage.createReference(otherQueue)).andReturn(copyReference);
+      EasyMock.expect(copyReference.getMessage()).andReturn(copyMessage);
+      copyMessage.setDestination(address);
+      EasyMock.expect(postOffice.route(copyMessage)).andReturn(new ArrayList<MessageReference>());
+      EasyMock.expect(copyMessage.getDurableRefCount()).andReturn(0);
+      EasyMock.expect(serverMessage.getMessageID()).andReturn(messageID);
+      EasyMock.expect(queue.deleteReference(messageID, persistenceManager)).andReturn(true);
+
+      EasyMock.replay(queue, otherBinding, otherQueue, postOffice, persistenceManager, serverMessage, copyReference, copyMessage);
+      
+      MessageReferenceImpl messageReference = new DummyMessageReference(serverMessage, queue);
+      messageReference.move(otherBinding, persistenceManager, postOffice);
+      
+      EasyMock.verify(queue, otherBinding, otherQueue, postOffice, persistenceManager, serverMessage, copyReference, copyMessage);
+   }
+   
    //we need to override the constructor for creation
    class DummyMessageReference extends MessageReferenceImpl
    {




More information about the jboss-cvs-commits mailing list