Author: rgodfrey
Date: Sun Feb 21 23:13:47 2016
New Revision: 1731571

URL: http://svn.apache.org/viewvc?rev=1731571&view=rev
Log:
QPID-6703 : Add system test and properly implement JMS semantics on 
TemporaryQueue association with Connection (not Session)

Modified:
    qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java
    qpid/java/trunk/test-profiles/CPPExcludes

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java?rev=1731571&r1=1731570&r2=1731571&view=diff
==============================================================================
--- qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java 
(original)
+++ qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java 
Sun Feb 21 23:13:47 2016
@@ -1496,7 +1496,9 @@ public abstract class AMQSession<C exten
             Map<String, Object> args;
             if(_connection.getDelegate().isQueueLifetimePolicySupported())
             {
-                args = 
Collections.<String,Object>singletonMap("qpid.lifetime_policy", 
"DELETE_ON_CONNECTION_CLOSE");
+                args = new HashMap<>();
+                args.put("qpid.lifetime_policy", "DELETE_ON_CONNECTION_CLOSE");
+                args.put("qpid.exclusivity_policy", "CONNECTION");
             }
             else
             {
@@ -2482,10 +2484,10 @@ public abstract class AMQSession<C exten
         {
             _logger.debug("destination is temporary");
             final TemporaryDestination tempDest = (TemporaryDestination) 
destination;
-            if (tempDest.getSession() != this)
+            if (tempDest.getSession().getAMQConnection() != 
this.getAMQConnection())
             {
-                _logger.debug("destination is on different session");
-                throw new JMSException("Cannot consume from a temporary 
destination created on another session");
+                _logger.debug("destination is on different conection");
+                throw new JMSException("Cannot consume from a temporary 
destination created on another connection");
             }
 
             if (tempDest.isDeleted())

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java?rev=1731571&r1=1731570&r2=1731571&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java
 Sun Feb 21 23:13:47 2016
@@ -27,6 +27,7 @@ import org.apache.qpid.test.utils.QpidBr
 
 import javax.jms.Connection;
 import javax.jms.JMSException;
+import javax.jms.Message;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageProducer;
 import javax.jms.Session;
@@ -57,13 +58,14 @@ public class TemporaryQueueTest extends
     }
 
     /**
-     * Tests that a temporary queue cannot be used by another {@link Session}.
+     * Tests that a temporary queue cannot be used by another {@link 
Connection}.
      */
-    public void testUseFromAnotherSessionProhibited() throws Exception
+    public void testUseFromAnotherConnectionProhibited() throws Exception
     {
         final Connection conn = getConnection();
+        final Connection conn2 = getConnection();
         final Session session1 = conn.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
-        final Session session2 = conn.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+        final Session session2 = conn2.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
         final TemporaryQueue queue = session1.createTemporaryQueue();
         assertNotNull(queue);
 
@@ -75,10 +77,67 @@ public class TemporaryQueueTest extends
         catch (JMSException je)
         {
             //pass
-            assertEquals("Cannot consume from a temporary destination created 
on another session", je.getMessage());
+            assertEquals("Cannot consume from a temporary destination created 
on another connection", je.getMessage());
         }
     }
 
+
+    public void testClosingConsumerDoesNotDeleteQueue() throws Exception
+    {
+        final Connection conn = getConnection();
+        final Session session1 = conn.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+        final TemporaryQueue queue = session1.createTemporaryQueue();
+        assertNotNull(queue);
+
+        MessageConsumer consumer1 = session1.createConsumer(queue);
+
+        MessageProducer producer = session1.createProducer(queue);
+
+        producer.send(session1.createTextMessage("Hello World!"));
+
+        consumer1.close();
+
+        conn.start();
+
+        MessageConsumer consumer2 = session1.createConsumer(queue);
+
+        Message message = consumer2.receive(1000l);
+
+        assertNotNull("Message should have been received", message);
+        assertTrue("Received message not a text message", message instanceof 
TextMessage);
+        assertEquals("Incorrect message text", "Hello World!",  
((TextMessage)message).getText());
+    }
+
+
+    public void testClosingSessionDoesNotDeleteQueue() throws Exception
+    {
+        final Connection conn = getConnection();
+        final Session session1 = conn.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+        final Session session2 = conn.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+
+        final TemporaryQueue queue = session1.createTemporaryQueue();
+        assertNotNull(queue);
+
+        MessageConsumer consumer1 = session1.createConsumer(queue);
+
+        MessageProducer producer = session1.createProducer(queue);
+
+        producer.send(session1.createTextMessage("Hello World!"));
+
+        session1.close();
+
+        conn.start();
+
+        MessageConsumer consumer2 = session2.createConsumer(queue);
+
+        Message message = consumer2.receive(1000l);
+
+        assertNotNull("Message should have been received", message);
+        assertTrue("Received message not a text message", message instanceof 
TextMessage);
+        assertEquals("Incorrect message text", "Hello World!",  
((TextMessage)message).getText());
+    }
+
+
     /**
      * Tests that the client is able to explicitly delete a temporary queue 
using
      * {@link TemporaryQueue#delete()} and is prevented from deleting one that

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java?rev=1731571&r1=1731570&r2=1731571&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/topic/TemporaryTopicTest.java
 Sun Feb 21 23:13:47 2016
@@ -107,24 +107,25 @@ public class TemporaryTopicTest extends
     }
 
     /**
-     * Tests that a temporary topic cannot be used by another {@link Session}.
+     * Tests that a temporary topic cannot be used by another {@link 
Connection}.
      */
     public void testUseFromAnotherSessionProhibited() throws Exception
     {
         final Connection conn = getConnection();
+        final Connection conn2 = getConnection();
         final Session session1 = conn.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
-        final Session session2 = conn.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+        final Session session2 = conn2.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
         final TemporaryTopic topic = session1.createTemporaryTopic();
 
         try
         {
             session2.createConsumer(topic);
-            fail("Expected a JMSException when subscribing to a temporary 
topic created on a different session");
+            fail("Expected a JMSException when subscribing to a temporary 
topic created on a different connection");
         }
         catch (JMSException je)
         {
             // pass
-            assertEquals("Cannot consume from a temporary destination created 
on another session", je.getMessage());
+            assertEquals("Cannot consume from a temporary destination created 
on another connection", je.getMessage());
         }
     }
 

Modified: qpid/java/trunk/test-profiles/CPPExcludes
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/test-profiles/CPPExcludes?rev=1731571&r1=1731570&r2=1731571&view=diff
==============================================================================
--- qpid/java/trunk/test-profiles/CPPExcludes (original)
+++ qpid/java/trunk/test-profiles/CPPExcludes Sun Feb 21 23:13:47 2016
@@ -227,3 +227,6 @@ org.apache.qpid.test.unit.basic.Property
 
 // QPID-6786 Sending headers larger than [first] transfer/frame size (which is 
outside the spec) isn't supported against the C++ broker
 
org.apache.qpid.test.unit.basic.PropertyValueTest#testLargeHeader_010_HeadersFillContentHeaderFrame
+
+// QPID-6703 Use of Java Broker specific queue creation arguments to properly 
fulfill JMS TemporaryQueue contract
+org.apache.qpid.test.unit.client.temporaryqueue.TemporaryQueueTest#testClosingSessionDoesNotDeleteQueue



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to