diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2009-06-22 13:21:50 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2009-06-22 13:21:50 +0000 |
| commit | bf3ace9ec0a1c6749963e0c0cf24ddfdfd15a0b3 (patch) | |
| tree | bb8d093c88efca1b8ea67cfceae5f7e8decf824f /qpid/java | |
| parent | d8861ac8381d1feaf53c5af668a7c323ce3eac84 (diff) | |
| download | qpid-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')
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"); |
