summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2009-06-22 13:21:50 +0000
committerRafael H. Schloming <rhs@apache.org>2009-06-22 13:21:50 +0000
commitbf3ace9ec0a1c6749963e0c0cf24ddfdfd15a0b3 (patch)
treebb8d093c88efca1b8ea67cfceae5f7e8decf824f /qpid/java
parentd8861ac8381d1feaf53c5af668a7c323ce3eac84 (diff)
downloadqpid-python-bf3ace9ec0a1c6749963e0c0cf24ddfdfd15a0b3.tar.gz
QPID-1923: made createDurableSubscriber fail on a temporary topic
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@787231 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java15
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java2
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java2
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java27
4 files changed, 42 insertions, 4 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
index 3529cfa6ad..a40295a9b7 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
@@ -944,7 +944,7 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
throws JMSException
{
checkNotClosed();
- checkValidTopic(topic);
+ checkValidTopic(topic, true);
if (_subscriptions.containsKey(name))
{
_subscriptions.get(name).close();
@@ -2063,7 +2063,7 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
/*
* I could have combined the last 3 methods, but this way it improves readability
*/
- protected AMQTopic checkValidTopic(Topic topic) throws JMSException
+ protected AMQTopic checkValidTopic(Topic topic, boolean durable) throws JMSException
{
if (topic == null)
{
@@ -2076,6 +2076,12 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
"Cannot create a subscription on a temporary topic created in another session");
}
+ if ((topic instanceof TemporaryDestination) && durable)
+ {
+ throw new javax.jms.InvalidDestinationException
+ ("Cannot create a durable subscription with a temporary topic: " + topic);
+ }
+
if (!(topic instanceof AMQTopic))
{
throw new javax.jms.InvalidDestinationException(
@@ -2086,6 +2092,11 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
return (AMQTopic) topic;
}
+ protected AMQTopic checkValidTopic(Topic topic) throws JMSException
+ {
+ return checkValidTopic(topic, false);
+ }
+
/**
* Called to close message consumers cleanly. This may or may <b>not</b> be as a result of an error.
*
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
index 1515a07507..7ce51c8918 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
@@ -788,7 +788,7 @@ public class AMQSession_0_10 extends AMQSession<BasicMessageConsumer_0_10, Basic
{
checkNotClosed();
- AMQTopic origTopic=checkValidTopic(topic);
+ AMQTopic origTopic=checkValidTopic(topic, true);
AMQTopic dest=AMQTopic.createDurable010Topic(origTopic, name, _connection);
TopicSubscriberAdaptor<BasicMessageConsumer_0_10> subscriber=_subscriptions.get(name);
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java
index ff8631c12e..fa4e08f62b 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java
@@ -427,7 +427,7 @@ public final class AMQSession_0_8 extends AMQSession<BasicMessageConsumer_0_8, B
{
checkNotClosed();
- AMQTopic origTopic = checkValidTopic(topic);
+ AMQTopic origTopic = checkValidTopic(topic, true);
AMQTopic dest = AMQTopic.createDurableTopic(origTopic, name, _connection);
TopicSubscriberAdaptor<BasicMessageConsumer_0_8> subscriber = _subscriptions.get(name);
if (subscriber != null)
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java
index cbe25e4f32..c5cdb83bbf 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java
@@ -37,6 +37,7 @@ import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
+import javax.jms.Topic;
import javax.jms.TopicSubscriber;
/**
@@ -389,6 +390,32 @@ public class DurableSubscriptionTest extends QpidTestCase
session.unsubscribe("testResubscribeWithChangedSelector");
}
+ public void testDurableSubscribeWithTemporaryTopic() throws Exception
+ {
+ Connection conn = getConnection();
+ conn.start();
+ Session ssn = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ Topic topic = ssn.createTemporaryTopic();
+ try
+ {
+ ssn.createDurableSubscriber(topic, "test");
+ fail("expected InvalidDestinationException");
+ }
+ catch (InvalidDestinationException ex)
+ {
+ // this is expected
+ }
+ try
+ {
+ ssn.createDurableSubscriber(topic, "test", null, false);
+ fail("expected InvalidDestinationException");
+ }
+ catch (InvalidDestinationException ex)
+ {
+ // this is expected
+ }
+ }
+
private void sendMatchingAndNonMatchingMessage(Session session, MessageProducer producer) throws JMSException
{
TextMessage msg = session.createTextMessage("testResubscribeWithChangedSelector1");