[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