[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