[hornetq-commits] JBoss hornetq SVN: r9164 - in trunk: src/main/org/hornetq/jms/client and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Apr 26 09:18:13 EDT 2010


Author: jmesnil
Date: 2010-04-26 09:18:12 -0400 (Mon, 26 Apr 2010)
New Revision: 9164

Added:
   trunk/tests/src/org/hornetq/tests/integration/jms/cluster/TemporaryQueueClusterTest.java
Modified:
   trunk/src/main/org/hornetq/core/server/impl/ServerSessionImpl.java
   trunk/src/main/org/hornetq/jms/client/HornetQSession.java
Log:
https://jira.jboss.org/jira/browse/HORNETQ-286: Temporary Queue not accessible on remote node

* use bindinqQuery() to check if the JMS Destination has bindings on the server before creating producer or consumer
* bindingQuery() returns both local and remote queue bindings for the given address
* added TemporaryQueueClusterTest to check JMS temporary queue behavior

Modified: trunk/src/main/org/hornetq/core/server/impl/ServerSessionImpl.java
===================================================================
--- trunk/src/main/org/hornetq/core/server/impl/ServerSessionImpl.java	2010-04-26 12:51:27 UTC (rev 9163)
+++ trunk/src/main/org/hornetq/core/server/impl/ServerSessionImpl.java	2010-04-26 13:18:12 UTC (rev 9164)
@@ -498,11 +498,17 @@
 
       List<SimpleString> names = new ArrayList<SimpleString>();
 
+      // make an exception for the management address (see HORNETQ-29)
+      if (address.equals(managementAddress))
+      {
+         return new BindingQueryResult(true, names);
+      }
+
       Bindings bindings = postOffice.getMatchingBindings(address);
 
       for (Binding binding : bindings.getBindings())
       {
-         if (binding.getType() == BindingType.LOCAL_QUEUE)
+         if (binding.getType() == BindingType.LOCAL_QUEUE || binding.getType() == BindingType.REMOTE_QUEUE)
          {
             names.add(binding.getUniqueName());
          }

Modified: trunk/src/main/org/hornetq/jms/client/HornetQSession.java
===================================================================
--- trunk/src/main/org/hornetq/jms/client/HornetQSession.java	2010-04-26 12:51:27 UTC (rev 9163)
+++ trunk/src/main/org/hornetq/jms/client/HornetQSession.java	2010-04-26 13:18:12 UTC (rev 9164)
@@ -322,23 +322,11 @@
 
          if (jbd != null)
          {
-            if (jbd.isQueue())
-            {
-               QueueQuery response = session.queueQuery(jbd.getSimpleAddress());
+            BindingQuery response = session.bindingQuery(jbd.getSimpleAddress());
 
-               if (!response.isExists())
-               {
-                  throw new InvalidDestinationException("Queue " + jbd.getName() + " does not exist");
-               }
-            }
-            else
+            if (!response.isExists())
             {
-               BindingQuery response = session.bindingQuery(jbd.getSimpleAddress());
-
-               if (!response.isExists())
-               {
-                  throw new InvalidDestinationException("Topic " + jbd.getName() + " does not exist");
-               }
+               throw new InvalidDestinationException("Destination " + jbd.getName() + " does not exist");
             }
          }
 
@@ -525,7 +513,7 @@
 
          if (dest.isQueue())
          {            
-            QueueQuery response = session.queueQuery(dest.getSimpleAddress());
+            BindingQuery response = session.bindingQuery(dest.getSimpleAddress());
 
             if (!response.isExists())
             {

Added: trunk/tests/src/org/hornetq/tests/integration/jms/cluster/TemporaryQueueClusterTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/jms/cluster/TemporaryQueueClusterTest.java	                        (rev 0)
+++ trunk/tests/src/org/hornetq/tests/integration/jms/cluster/TemporaryQueueClusterTest.java	2010-04-26 13:18:12 UTC (rev 9164)
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package org.hornetq.tests.integration.jms.cluster;
+
+import javax.jms.Connection;
+import javax.jms.DeliveryMode;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TemporaryQueue;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+
+import org.hornetq.tests.util.JMSClusteredTestBase;
+
+/**
+ * A TopicClusterTest
+ *
+ * @author <mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ *
+ *
+ */
+public class TemporaryQueueClusterTest extends JMSClusteredTestBase
+{
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   protected void tearDown() throws Exception
+   {
+      super.tearDown();
+   }
+
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+   }
+
+   public void testTemporaryQueue() throws Exception
+   {
+      jmsServer1.createQueue(false, "target", null, false, "/queue/target");
+      jmsServer2.createQueue(false, "target", null, false, "/queue/target");
+
+      Connection conn1 = cf1.createConnection();
+      Connection conn2 = cf2.createConnection();
+
+      conn1.start();
+      conn2.start();
+
+      try
+      {
+         Session session1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         Queue targetQueue1 = session1.createQueue("target");
+         Queue tempQueue = session1.createTemporaryQueue();
+         System.out.println("temp queue is " + tempQueue.getQueueName());
+         Session session2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         Queue targetQueue2 = session2.createQueue("target");
+
+         // sleep a little bit to have the temp queue propagated to server #2
+         Thread.sleep(3000);
+         MessageProducer prod1 = session1.createProducer(targetQueue1);
+         MessageConsumer cons2 = session2.createConsumer(targetQueue2);
+         MessageConsumer tempCons1 = session1.createConsumer(tempQueue);
+
+         for (int i = 0; i < 10; i++)
+         {
+            TextMessage message = session1.createTextMessage("" + i);
+            message.setJMSReplyTo(tempQueue);
+            prod1.send(message);
+         }
+
+         for (int i = 0; i < 10; i++)
+         {
+            if (i % 2 == 0)
+            {
+               TextMessage received = (TextMessage)cons2.receive(5000);
+               System.out.println(received.getText());
+               System.out.println("check temp queue on server #2");
+               MessageProducer tempProducer = session2.createProducer(received.getJMSReplyTo());
+               tempProducer.send(session2.createTextMessage(">>> " + received.getText()));
+               tempProducer.close();
+            }
+         }
+
+         for (int i = 0; i < 10; i++)
+         {
+            if (i % 2 == 0)
+            {
+               TextMessage received = (TextMessage)tempCons1.receive(5000);
+               System.out.println(received.getText());
+            }
+         }
+      }
+      finally
+      {
+         conn1.close();
+         conn2.close();
+      }
+
+      jmsServer1.destroyQueue("target");
+      jmsServer2.destroyQueue("target");
+
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+}



More information about the hornetq-commits mailing list