You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2016/02/22 00:13:47 UTC
svn commit: r1731571 - in /qpid/java/trunk:
client/src/main/java/org/apache/qpid/client/
systests/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/
systests/src/test/java/org/apache/qpid/test/unit/topic/ test-profiles/
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: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org