[jboss-cvs] JBoss Messaging SVN: r8518 - in branches/Branch_1_4: src/main/org/jboss/messaging/core/contract and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Apr 5 08:32:13 EDT 2012


Author: gaohoward
Date: 2012-04-05 08:32:12 -0400 (Thu, 05 Apr 2012)
New Revision: 8518

Added:
   branches/Branch_1_4/src/main/org/jboss/messaging/core/impl/postoffice/RouteResult.java
Modified:
   branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
   branches/Branch_1_4/src/main/org/jboss/messaging/core/contract/PostOffice.java
   branches/Branch_1_4/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java
   branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/PostOfficeTestBase.java
   branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/postoffice/ClusteredPostOfficeTest.java
   branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/postoffice/PostOfficeTest.java
Log:
JBMESSAGING-1919


Modified: branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2012-04-03 03:42:26 UTC (rev 8517)
+++ branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java	2012-04-05 12:32:12 UTC (rev 8518)
@@ -65,6 +65,7 @@
 import org.jboss.messaging.core.contract.MessageStore;
 import org.jboss.messaging.core.contract.PostOffice;
 import org.jboss.messaging.core.contract.Queue;
+import org.jboss.messaging.core.impl.postoffice.RouteResult;
 import org.jboss.messaging.core.impl.tx.Transaction;
 import org.jboss.messaging.core.impl.tx.TransactionRepository;
 import org.jboss.messaging.util.ExceptionUtil;
@@ -783,7 +784,8 @@
       else if (dest.isQueue())
       {
          if (trace) { log.trace(this + " routing " + msg + " to queue"); }
-         if (!postOffice.route(ref, new JMSCondition(true, dest.getName()), tx))
+         RouteResult result = postOffice.route(ref, new JMSCondition(true, dest.getName()), tx);
+         if (!result.getResult())
          {
             throw new JMSException("Failed to route " + ref + " to " + dest.getName());
          }
@@ -791,7 +793,11 @@
       else
       {
          if (trace) { log.trace(this + " routing " + msg + " to postoffice"); }
-         postOffice.route(ref, new JMSCondition(false, dest.getName()), tx);
+         RouteResult result = postOffice.route(ref, new JMSCondition(false, dest.getName()), tx);
+         if (result.isFailue())
+         {
+            throw new JMSException("Failed to route " + ref + " to " + dest.getName());
+         }
       }
 
       if (trace) { log.trace("sent " + msg); }

Modified: branches/Branch_1_4/src/main/org/jboss/messaging/core/contract/PostOffice.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/messaging/core/contract/PostOffice.java	2012-04-03 03:42:26 UTC (rev 8517)
+++ branches/Branch_1_4/src/main/org/jboss/messaging/core/contract/PostOffice.java	2012-04-05 12:32:12 UTC (rev 8518)
@@ -27,6 +27,7 @@
 
 import org.jboss.jms.server.JMSCondition;
 import org.jboss.jms.server.destination.ManagedDestination;
+import org.jboss.messaging.core.impl.postoffice.RouteResult;
 import org.jboss.messaging.core.impl.tx.Transaction;
 
 /**
@@ -82,7 +83,7 @@
     *
     * @return true if reference was accepted by at least one queue.
     */
-   boolean route(MessageReference ref, Condition condition, Transaction tx) throws Exception; 
+   RouteResult route(MessageReference ref, Condition condition, Transaction tx) throws Exception; 
    
    /**
     * Get all queues that match the condition

Modified: branches/Branch_1_4/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java	2012-04-03 03:42:26 UTC (rev 8517)
+++ branches/Branch_1_4/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java	2012-04-05 12:32:12 UTC (rev 8518)
@@ -966,7 +966,7 @@
    	return binding;
    }      
                  
-   public boolean route(MessageReference ref, Condition condition, Transaction tx) throws Exception
+   public RouteResult route(MessageReference ref, Condition condition, Transaction tx) throws Exception
    {
       if (ref == null)
       {
@@ -3007,13 +3007,13 @@
    	}
    }
    
-   private boolean routeInternal(MessageReference ref, Condition condition, Transaction tx, boolean fromCluster, Set names) throws Exception
+   private RouteResult routeInternal(MessageReference ref, Condition condition, Transaction tx, boolean fromCluster, Set names) throws Exception
    {
    	if (trace) { log.trace(this + " routing " + ref + " with condition '" +
    			                 condition + "'" + (tx == null ? "" : " transactionally in " + tx) + 
    			                 " from cluster " + fromCluster); }
    	
-      boolean routed = false;
+      RouteResult routed = new RouteResult(false);
 
       boolean intr = Thread.interrupted();
       for (;;)
@@ -3167,7 +3167,7 @@
 
                if (del != null && del.isSelectorAccepted())
                {
-                  routed = true;
+                  routed.setTrue();
                   
                   if (remoteSet != null)
                   {
@@ -3181,6 +3181,10 @@
                   	queueNames.add(queue.getName());
                   }
                }
+               else if (del == null)
+               {
+                  routed.setFailure();
+               }
          	}
          	            
             if (remoteSet != null)
@@ -3215,7 +3219,7 @@
          			callback.afterCommit(true);
          		}
          		
-         		routed = true;
+         		routed.setTrue();
          	}          
             
             if (startedTx)

Added: branches/Branch_1_4/src/main/org/jboss/messaging/core/impl/postoffice/RouteResult.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/messaging/core/impl/postoffice/RouteResult.java	                        (rev 0)
+++ branches/Branch_1_4/src/main/org/jboss/messaging/core/impl/postoffice/RouteResult.java	2012-04-05 12:32:12 UTC (rev 8518)
@@ -0,0 +1,64 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2012, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+
+package org.jboss.messaging.core.impl.postoffice;
+
+/**
+ * A RouteResult
+ *
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ * 
+ * Created Mar 27, 2012 2:34:51 PM
+ *
+ */
+public class RouteResult
+{
+   private boolean result = false;
+   private boolean failure = false;
+
+   public RouteResult(boolean b)
+   {
+      result = b;
+   }
+
+   public void setTrue()
+   {
+      result = true;
+   }
+   
+   public boolean getResult()
+   {
+      return result;
+   }
+
+   public void setFailure()
+   {
+      failure = true;
+   }
+   
+   public boolean isFailue()
+   {
+      return failure;
+   }
+
+}

Modified: branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/PostOfficeTestBase.java
===================================================================
--- branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/PostOfficeTestBase.java	2012-04-03 03:42:26 UTC (rev 8517)
+++ branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/PostOfficeTestBase.java	2012-04-05 12:32:12 UTC (rev 8518)
@@ -40,6 +40,7 @@
 import org.jboss.messaging.core.impl.JDBCPersistenceManager;
 import org.jboss.messaging.core.impl.message.SimpleMessageStore;
 import org.jboss.messaging.core.impl.postoffice.MessagingPostOffice;
+import org.jboss.messaging.core.impl.postoffice.RouteResult;
 import org.jboss.messaging.core.impl.tx.Transaction;
 import org.jboss.messaging.core.impl.tx.TransactionRepository;
 import org.jboss.test.messaging.MessagingTestCase;
@@ -174,9 +175,9 @@
 
          Condition condition = conditionFactory.createCondition(conditionText);
 
-         boolean routed = office.route(ref, condition, null);
+         RouteResult routed = office.route(ref, condition, null);
 
-         assertTrue(routed);
+         assertTrue(routed.getResult());
 
          list.add(msg);
       }

Modified: branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/postoffice/ClusteredPostOfficeTest.java
===================================================================
--- branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/postoffice/ClusteredPostOfficeTest.java	2012-04-03 03:42:26 UTC (rev 8517)
+++ branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/postoffice/ClusteredPostOfficeTest.java	2012-04-05 12:32:12 UTC (rev 8518)
@@ -34,6 +34,7 @@
 import org.jboss.messaging.core.contract.PostOffice;
 import org.jboss.messaging.core.contract.Queue;
 import org.jboss.messaging.core.impl.MessagingQueue;
+import org.jboss.messaging.core.impl.postoffice.RouteResult;
 import org.jboss.messaging.core.impl.tx.Transaction;
 import org.jboss.test.messaging.core.PostOfficeTestBase;
 import org.jboss.test.messaging.core.SimpleCondition;
@@ -1427,18 +1428,18 @@
 
    		Message msg1 = CoreMessageFactory.createCoreMessage(1, true, null);      
    		MessageReference ref1 = ms.reference(msg1);  
-   		boolean routed = office1.route(ref1, new SimpleCondition("condition1"), null);   
-   		assertTrue(routed);
+   		RouteResult routed = office1.route(ref1, new SimpleCondition("condition1"), null);   
+   		assertTrue(routed.getResult());
 
    		Message msg2 = CoreMessageFactory.createCoreMessage(2, true, null);      
    		MessageReference ref2 = ms.reference(msg2);         
    		routed = office1.route(ref2, new SimpleCondition("condition1"), null);      
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
 
    		Message msg3 = CoreMessageFactory.createCoreMessage(3, true, null);      
    		MessageReference ref3 = ms.reference(msg3);         
    		routed = office1.route(ref3, new SimpleCondition("condition1"), null);      
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
 
    		Thread.sleep(3000);
    		
@@ -1718,10 +1719,10 @@
          
          Transaction tx = tr.createTransaction();
 
-         boolean routed = office1.route(ref1, new SimpleCondition("condition1"), tx);         
-         assertTrue(routed);
+         RouteResult routed = office1.route(ref1, new SimpleCondition("condition1"), tx);         
+         assertTrue(routed.getResult());
          routed = office1.route(ref2, new SimpleCondition("condition1"), tx);         
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          for (int i = 0; i < 16; i++)
          {
@@ -1783,9 +1784,9 @@
          tx = tr.createTransaction();
 
          routed = office1.route(ref1, new SimpleCondition("condition1"), tx);         
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          routed = office1.route(ref2, new SimpleCondition("condition1"), tx);         
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          //Messages are sent asych so may take some finite time to arrive
          Thread.sleep(3000);         
@@ -1824,9 +1825,9 @@
          tx = tr.createTransaction();
 
          routed = office2.route(ref1, new SimpleCondition("condition2"), tx);         
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          routed = office2.route(ref2, new SimpleCondition("condition2"), tx);         
-         assertTrue(routed);
+         assertTrue(routed.getResult());
                            
          for (int i = 0; i < 16; i++)
          {
@@ -1885,9 +1886,9 @@
          tx = tr.createTransaction();
 
          routed = office1.route(ref1, new SimpleCondition("condition1"), tx);         
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          routed = office1.route(ref2, new SimpleCondition("condition1"), tx);         
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          for (int i = 0; i < 16; i++)
          {
@@ -1987,19 +1988,19 @@
 
    		Message msg1 = CoreMessageFactory.createCoreMessage(1, persistentMessage, null);      
    		MessageReference ref1 = ms.reference(msg1);  
-   		boolean routed = office1.route(ref1, new SimpleCondition("condition1"), null);   
-   		assertTrue(routed);
+   		RouteResult routed = office1.route(ref1, new SimpleCondition("condition1"), null);   
+   		assertTrue(routed.getResult());
 
 
    		Message msg2 = CoreMessageFactory.createCoreMessage(2, persistentMessage, null);      
    		MessageReference ref2 = ms.reference(msg2);         
    		routed = office1.route(ref2, new SimpleCondition("condition1"), null);      
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
 
    		Message msg3 = CoreMessageFactory.createCoreMessage(3, persistentMessage, null);      
    		MessageReference ref3 = ms.reference(msg3);         
    		routed = office1.route(ref3, new SimpleCondition("condition1"), null);      
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
 
    		Thread.sleep(3000);
 
@@ -2106,18 +2107,18 @@
 
    		Message msg1 = CoreMessageFactory.createCoreMessage(1, persistentMessage, null);      
    		MessageReference ref1 = ms.reference(msg1);  
-   		boolean routed = office1.route(ref1, new SimpleCondition("condition1"), null);   
-   		assertTrue(routed);
+   		RouteResult routed = office1.route(ref1, new SimpleCondition("condition1"), null);   
+   		assertTrue(routed.getResult());
 
    		Message msg2 = CoreMessageFactory.createCoreMessage(2, persistentMessage, null);      
    		MessageReference ref2 = ms.reference(msg2);         
    		routed = office1.route(ref2, new SimpleCondition("condition1"), null);      
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
 
    		Message msg3 = CoreMessageFactory.createCoreMessage(3, persistentMessage, null);      
    		MessageReference ref3 = ms.reference(msg3);         
    		routed = office1.route(ref3, new SimpleCondition("condition1"), null);      
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
 
    		Thread.sleep(3000);
    		
@@ -2337,8 +2338,8 @@
    		Message msg = CoreMessageFactory.createCoreMessage(1, persistentMessage, null);      
    		MessageReference ref = ms.reference(msg);         
 
-   		boolean routed = office1.route(ref, new SimpleCondition("condition1"), null);         
-   		assertTrue(routed);
+   		RouteResult routed = office1.route(ref, new SimpleCondition("condition1"), null);         
+   		assertTrue(routed.getResult());
 
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
@@ -2365,7 +2366,7 @@
    		ref = ms.reference(msg);         
 
    		routed = office2.route(ref, new SimpleCondition("condition2"), null);         
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
 
@@ -2530,8 +2531,8 @@
    		Message msg = CoreMessageFactory.createCoreMessage(1, persistentMessage, null);      
    		MessageReference ref = ms.reference(msg);         
 
-   		boolean routed = office1.route(ref, new SimpleCondition("condition1"), null);         
-   		assertTrue(routed);
+   		RouteResult routed = office1.route(ref, new SimpleCondition("condition1"), null);         
+   		assertTrue(routed.getResult());
 
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
@@ -2558,7 +2559,7 @@
    		ref = ms.reference(msg);         
 
    		routed = office2.route(ref, new SimpleCondition("condition2"), null);         
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
 
@@ -2675,8 +2676,8 @@
    		Message msg = CoreMessageFactory.createCoreMessage(1, persistentMessage, null);      
    		MessageReference ref = ms.reference(msg);         
 
-   		boolean routed = office1.route(ref, new SimpleCondition("myqueue1"), null);         
-   		assertTrue(routed);
+   		RouteResult routed = office1.route(ref, new SimpleCondition("myqueue1"), null);         
+   		assertTrue(routed.getResult());
 
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
@@ -2696,7 +2697,7 @@
    		ref = ms.reference(msg);         
 
    		routed = office2.route(ref, new SimpleCondition("myqueue1"), null);         
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
 
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
@@ -2717,7 +2718,7 @@
    		ref = ms.reference(msg);         
 
    		routed = office1.route(ref, new SimpleCondition("myqueue2"), null);         
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
 
@@ -2737,7 +2738,7 @@
    		ref = ms.reference(msg);         
 
    		routed = office2.route(ref, new SimpleCondition("myqueue2"), null);         
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
 
@@ -2818,8 +2819,8 @@
    		Message msg = CoreMessageFactory.createCoreMessage(1, persistentMessage, null);      
    		MessageReference ref = ms.reference(msg);         
 
-   		boolean routed = office1.route(ref, new SimpleCondition("myqueue1"), null);         
-   		assertTrue(routed);
+   		RouteResult routed = office1.route(ref, new SimpleCondition("myqueue1"), null);         
+   		assertTrue(routed.getResult());
 
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
@@ -2839,7 +2840,7 @@
    		ref = ms.reference(msg);         
 
    		routed = office2.route(ref, new SimpleCondition("myqueue1"), null);         
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
 
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
@@ -2860,7 +2861,7 @@
    		ref = ms.reference(msg);         
 
    		routed = office1.route(ref, new SimpleCondition("myqueue2"), null);         
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
 
@@ -2880,7 +2881,7 @@
    		ref = ms.reference(msg);         
 
    		routed = office2.route(ref, new SimpleCondition("myqueue2"), null);         
-   		assertTrue(routed);
+   		assertTrue(routed.getResult());
    		//Messages are sent asych so may take some finite time to arrive
    		Thread.sleep(3000);
 

Modified: branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/postoffice/PostOfficeTest.java
===================================================================
--- branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/postoffice/PostOfficeTest.java	2012-04-03 03:42:26 UTC (rev 8517)
+++ branches/Branch_1_4/tests/src/org/jboss/test/messaging/core/postoffice/PostOfficeTest.java	2012-04-05 12:32:12 UTC (rev 8518)
@@ -23,14 +23,24 @@
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
+import javax.jms.JMSException;
+
 import org.jboss.messaging.core.contract.Binding;
 import org.jboss.messaging.core.contract.Condition;
+import org.jboss.messaging.core.contract.Delivery;
+import org.jboss.messaging.core.contract.DeliveryObserver;
+import org.jboss.messaging.core.contract.Distributor;
+import org.jboss.messaging.core.contract.Filter;
 import org.jboss.messaging.core.contract.Message;
 import org.jboss.messaging.core.contract.MessageReference;
 import org.jboss.messaging.core.contract.PostOffice;
 import org.jboss.messaging.core.contract.Queue;
 import org.jboss.messaging.core.impl.MessagingQueue;
+import org.jboss.messaging.core.impl.SimpleDelivery;
+import org.jboss.messaging.core.impl.clusterconnection.MessageSucker;
+import org.jboss.messaging.core.impl.postoffice.RouteResult;
 import org.jboss.messaging.core.impl.tx.Transaction;
 import org.jboss.test.messaging.core.PostOfficeTestBase;
 import org.jboss.test.messaging.core.SimpleCondition;
@@ -563,8 +573,8 @@
          Message msg1 = CoreMessageFactory.createCoreMessage(1);      
          MessageReference ref1 = ms.reference(msg1);
          
-         boolean routed = postOffice.route(ref1, condition1, null);      
-         assertTrue(routed);
+         RouteResult routed = postOffice.route(ref1, condition1, null);      
+         assertTrue(routed.getResult());
          
          List msgs = receiver1.getMessages();
          assertNotNull(msgs);
@@ -602,7 +612,7 @@
          MessageReference ref2 = ms.reference(msg2);
          
          routed = postOffice.route(ref2, condition2, null);      
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          msgs = receiver1.getMessages();
          assertNotNull(msgs);
@@ -668,9 +678,9 @@
          
          MessageReference ref1 = ms.reference(msg1);
          
-         boolean routed = postOffice.route(ref1, new SimpleCondition("this won't match anything"), null);
+         RouteResult routed = postOffice.route(ref1, new SimpleCondition("this won't match anything"), null);
          
-         assertFalse(routed);
+         assertFalse(routed.getResult());
                
          List msgs = receiver1.getMessages();
          assertNotNull(msgs);
@@ -721,8 +731,8 @@
          Message msg1 = CoreMessageFactory.createCoreMessage(1);      
          MessageReference ref1 = ms.reference(msg1);
          
-         boolean routed = postOffice.route(ref1, condition1, null);      
-         assertTrue(routed);
+         RouteResult routed = postOffice.route(ref1, condition1, null);      
+         assertTrue(routed.getResult());
          
          List msgs = receiver1.getMessages();
          assertNotNull(msgs);
@@ -775,7 +785,7 @@
 
          //all received
          routed = postOffice.route(ref1, condition1, null);      
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          msgs = receiver1.getMessages();
          assertNotNull(msgs);
@@ -804,7 +814,51 @@
    
    }   
    
+
+   public final void testRouteTopicPersistenceFailure() throws Throwable
+   {
+      PostOffice postOffice = null;
+      
+      try
+      {      
+         postOffice = createNonClusteredPostOffice();
+         
+         Condition condition1 = new SimpleCondition("topic1");
+         
+         FakeCoreQueue queue1 =  new FakeCoreQueue("queue1", 1);
+         queue1.activate();
+
+         postOffice.addBinding(new Binding(condition1, queue1, false), false);
+         
+         FakeCoreQueue queue2 =  new FakeCoreQueue("queue2", 2);
+         queue2.activate();
+         
+         postOffice.addBinding(new Binding(condition1, queue2, false), false);
+         
+         FakeCoreQueue queue3 = new FakeCoreQueue("queue3", 3);
+         queue3.activate();
+         
+         postOffice.addBinding(new Binding(condition1, queue3, false), false);
+         
+         queue2.setFailure(true);
+         
+         Message msg1 = CoreMessageFactory.createCoreMessage(1);
+         MessageReference ref1 = ms.reference(msg1);
+         
+         RouteResult routed = postOffice.route(ref1, condition1, null);      
+         assertTrue(routed.isFailue());
+      }
+      finally
+      {
+         if (postOffice != null)
+         {
+            postOffice.stop();
+         }
+         
+      }
    
+   }   
+   
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------
@@ -888,8 +942,8 @@
          Message msg1 = CoreMessageFactory.createCoreMessage(1, persistentMessage, null);      
          MessageReference ref1 = ms.reference(msg1);
          
-         boolean routed = postOffice.route(ref1, condition1, null);      
-         assertTrue(routed);
+         RouteResult routed = postOffice.route(ref1, condition1, null);      
+         assertTrue(routed.getResult());
          
          List msgs = receiver1.getMessages();
          assertNotNull(msgs);
@@ -942,7 +996,7 @@
          MessageReference ref2 = ms.reference(msg2);
          
          routed = postOffice.route(ref2, condition2, null);      
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          msgs = receiver4.getMessages();
          assertNotNull(msgs);
@@ -1040,10 +1094,10 @@
          
          Transaction tx = tr.createTransaction();
          
-         boolean routed = postOffice.route(ref1, condition1, tx);            
-         assertTrue(routed);
+         RouteResult routed = postOffice.route(ref1, condition1, tx);            
+         assertTrue(routed.getResult());
          routed = postOffice.route(ref2, condition1, tx);            
-         assertTrue(routed);
+         assertTrue(routed.getResult());
                
          List msgs = queue1.browse(null);
          assertNotNull(msgs);
@@ -1099,9 +1153,9 @@
          tx = tr.createTransaction();
          
          routed = postOffice.route(ref3, condition1, tx);            
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          routed = postOffice.route(ref4, condition1, tx);            
-         assertTrue(routed);
+         assertTrue(routed.getResult());
                
          msgs = queue1.browse(null);
          assertNotNull(msgs);
@@ -1133,9 +1187,9 @@
          MessageReference ref6 = ms.reference(msg6);
                
          routed = postOffice.route(ref5, new SimpleCondition("topic1"), null);            
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          routed = postOffice.route(ref6, new SimpleCondition("topic1"), null);            
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          msgs = receiver1.getMessages();
          assertNotNull(msgs);
@@ -1190,9 +1244,9 @@
          MessageReference ref8 = ms.reference(msg8);
                
          routed = postOffice.route(ref7, new SimpleCondition("topic1"), null);            
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          routed = postOffice.route(ref8, new SimpleCondition("topic1"), null);            
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          msgs = receiver1.getMessages();
          assertNotNull(msgs);
@@ -1289,16 +1343,16 @@
          
          Message msg1 = CoreMessageFactory.createCoreMessage(1);      
          MessageReference ref1 = ms.reference(msg1);         
-         boolean routed = postOffice.route(ref1, condition1, null);      
-         assertTrue(routed);
+         RouteResult routed = postOffice.route(ref1, condition1, null);      
+         assertTrue(routed.getResult());
          Message msg2 = CoreMessageFactory.createCoreMessage(2);      
          MessageReference ref2 = ms.reference(msg2);         
          routed = postOffice.route(ref2, condition1, null);      
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          Message msg3 = CoreMessageFactory.createCoreMessage(3);      
          MessageReference ref3 = ms.reference(msg3);         
          routed = postOffice.route(ref3, condition1, null);      
-         assertTrue(routed);
+         assertTrue(routed.getResult());
          
          List msgs = receiver1.getMessages();
          assertNotNull(msgs);           
@@ -1355,6 +1409,250 @@
    }
 
    // Inner classes -------------------------------------------------
+   class FakeCoreQueue implements org.jboss.messaging.core.contract.Queue
+   {
+      private String queueName;
+      
+      private boolean failure = false;
+      
+      private long chid;
 
+      public FakeCoreQueue(String name, long chid) throws JMSException
+      {
+         queueName = name;
+         this.chid = chid;
+      }
+
+      /**
+       * @param b
+       */
+      public void setFailure(boolean b)
+      {
+         failure = b;
+      }
+
+      public String getName()
+      {
+         return queueName;
+      }
+
+      public void addAllToRecoveryArea(int nodeID, Map ids)
+      {
+      }
+
+      public void addToRecoveryArea(int nodeID, long messageID, String sessionID)
+      {
+      }
+
+      public int getDownCacheSize()
+      {
+         return 0;
+      }
+
+      public Filter getFilter()
+      {
+         return null;
+      }
+
+      public int getFullSize()
+      {
+         return 0;
+      }
+
+      public Distributor getLocalDistributor()
+      {
+         return null;
+      }
+
+      public int getNodeID()
+      {
+         return 1;
+      }
+
+      public int getPageSize()
+      {
+         return 0;
+      }
+
+      public long getRecoverDeliveriesTimeout()
+      {
+         return 0;
+      }
+
+      public Map getRecoveryArea()
+      {
+         return null;
+      }
+
+      public int getRecoveryMapSize()
+      {
+         return 0;
+      }
+
+      public Distributor getRemoteDistributor()
+      {
+         return null;
+      }
+
+      public Delivery handleMove(MessageReference ref, long sourceChannelID)
+      {
+         return null;
+      }
+
+      public boolean isClustered()
+      {
+         return false;
+      }
+
+      public void mergeIn(long channelID, int nodeID) throws Exception
+      {
+      }
+
+      public List recoverDeliveries(List messageIds)
+      {
+         return null;
+      }
+
+      public void registerSucker(MessageSucker sucker)
+      {
+      }
+
+      public void removeAllFromRecoveryArea(int nodeID)
+      {
+      }
+
+      public void removeFromRecoveryArea(int nodeID, long messageID)
+      {
+      }
+
+      public void removeStrandedReferences(String sessionID)
+      {
+      }
+
+      public void setPagingParams(int fullSize, int pageSize, int downCacheSize)
+      {
+      }
+
+      public boolean unregisterSucker(MessageSucker sucker)
+      {
+         return false;
+      }
+
+      public void activate()
+      {
+      }
+
+      public List browse(Filter filter)
+      {
+         return null;
+      }
+
+      public void close()
+      {
+      }
+
+      public void deactivate()
+      {
+      }
+
+      public void deliver()
+      {
+      }
+
+      public long getChannelID()
+      {
+         return chid;
+      }
+
+      public int getDeliveringCount()
+      {
+         return 0;
+      }
+
+      public int getMaxSize()
+      {
+         return 0;
+      }
+
+      public int getMessageCount()
+      {
+         return 0;
+      }
+
+      public int getMessagesAdded()
+      {
+         return 0;
+      }
+
+      public int getScheduledCount()
+      {
+         return 0;
+      }
+
+      public boolean isActive()
+      {
+         return false;
+      }
+
+      public boolean isRecoverable()
+      {
+         return false;
+      }
+
+      public void load() throws Exception
+      {
+      }
+
+      public void removeAllReferences() throws Throwable
+      {
+      }
+
+      public void setMaxSize(int newSize)
+      {
+      }
+
+      public void unload() throws Exception
+      {
+      }
+
+      public void acknowledge(Delivery d, Transaction tx) throws Throwable
+      {
+      }
+
+      public void acknowledgeNoPersist(Delivery d) throws Throwable
+      {
+      }
+
+      public void cancel(Delivery d) throws Throwable
+      {
+      }
+
+      public Delivery handle(DeliveryObserver observer, MessageReference reference, Transaction tx)
+      {
+         if (failure)
+         {
+            return null;
+         }
+         return new SimpleDelivery();
+      }
+
+      public void setClustered(boolean isClustered)
+      {
+      }
+
+      public void staticMerge(org.jboss.messaging.core.contract.Queue queue) throws Exception
+      {
+      }
+
+      public List listInProcessMessages()
+      {
+         return null;
+      }
+
+      public void setDeliveringCounterLevel(int delCounterLevel)
+      {
+      }
+   }
+
 }
 



More information about the jboss-cvs-commits mailing list