summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorRobert Greig <rgreig@apache.org>2006-12-12 15:50:54 +0000
committerRobert Greig <rgreig@apache.org>2006-12-12 15:50:54 +0000
commit3e34c533845a24e7db4547157e399b46baa92eec (patch)
treeadeeb8d3fbdf42c621a1d3a97e79df3b6df65af1 /java
parentf070ee75ec20b07a5676461f44b1e263fb1a0370 (diff)
downloadqpid-python-3e34c533845a24e7db4547157e399b46baa92eec.tar.gz
QPID-171 Patch supplied by Rob Godfrey to fix problem where close check for publisher methods did not appear to be done.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@486198 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/AMQSession.java26
-rw-r--r--java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java70
2 files changed, 84 insertions, 12 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQSession.java b/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
index 03c18903e4..5a16a148cb 100644
--- a/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
+++ b/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
@@ -7,9 +7,9 @@
* 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
@@ -728,10 +728,12 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
public Object operation() throws JMSException
{
checkNotClosed();
-
- return new BasicMessageProducer(_connection, (AMQDestination) destination, _transacted, _channelId,
- AMQSession.this, _connection.getProtocolHandler(),
- getNextProducerId(), immediate, mandatory, waitUntilSent);
+ long producerId = getNextProducerId();
+ BasicMessageProducer producer = new BasicMessageProducer(_connection, (AMQDestination) destination, _transacted, _channelId,
+ AMQSession.this, _connection.getProtocolHandler(),
+ producerId, immediate, mandatory, waitUntilSent);
+ registerProducer(producerId, producer);
+ return producer;
}
}.execute(_connection);
}
@@ -745,7 +747,7 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
*/
public QueueReceiver createQueueReceiver(Destination destination) throws JMSException
{
- checkValidDestination(destination);
+ checkValidDestination(destination);
AMQQueue dest = (AMQQueue) destination;
BasicMessageConsumer consumer = (BasicMessageConsumer) createConsumer(destination);
return new QueueReceiverAdaptor(dest, consumer);
@@ -1024,7 +1026,7 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
public Topic createTopic(String topicName) throws JMSException
{
checkNotClosed();
-
+
if (topicName.indexOf('/') == -1)
{
return new AMQTopic(topicName);
@@ -1142,7 +1144,7 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
public void unsubscribe(String name) throws JMSException
{
checkNotClosed();
-
+
//send a queue.delete for the subscription
String queue = _connection.getClientID() + ":" + name;
AMQFrame frame = QueueDeleteBody.createAMQFrame(_channelId, 0, queue, false, false, true);
@@ -1344,7 +1346,7 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
AMQFrame channelFlowFrame = ChannelFlowBody.createAMQFrame(_channelId, true);
_connection.getProtocolHandler().writeFrame(channelFlowFrame);
}
-
+
/*
* I could have combined the last 3 methods, but this way it improves readability
*/
@@ -1353,13 +1355,13 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
throw new javax.jms.InvalidDestinationException("Invalid Topic");
}
}
-
+
private void checkValidQueue(Queue queue) throws InvalidDestinationException{
if (queue == null){
throw new javax.jms.InvalidDestinationException("Invalid Queue");
}
}
-
+
private void checkValidDestination(Destination destination) throws InvalidDestinationException{
if (destination == null){
throw new javax.jms.InvalidDestinationException("Invalid Queue");
diff --git a/java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java b/java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java
new file mode 100644
index 0000000000..c9240e9be7
--- /dev/null
+++ b/java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java
@@ -0,0 +1,70 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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.apache.qpid.test.unit.close;
+
+import org.apache.qpid.client.transport.TransportConnection;
+import org.apache.qpid.client.*;
+import junit.framework.TestCase;
+
+import javax.jms.Session;
+import javax.jms.TopicPublisher;
+import javax.jms.TopicSession;
+import javax.jms.Topic;
+
+/**
+ * @author Apache Software Foundation
+ */
+public class TopicPublisherCloseTest extends TestCase
+{
+
+ public String _connectionString = "vm://:1";
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ TransportConnection.createVMBroker(1);
+ }
+
+
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ TransportConnection.killAllVMBrokers();
+ }
+
+ public void testAllMethodsThrowAfterConnectionClose() throws Exception
+ {
+ AMQConnection connection = new AMQConnection(_connectionString, "guest", "guest", "Client", "/test_path");
+
+ Topic destination1 = new AMQTopic("t1");
+ TopicSession session1 = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
+ TopicPublisher pub = session1.createPublisher(destination1);
+ connection.close();
+ try
+ {
+ pub.getDeliveryMode();
+ fail("Expected exception not thrown");
+ }
+ catch (javax.jms.IllegalStateException e)
+ {
+ // PASS
+ }
+ }
+}