From fb1b1d90c69da2100496a9882ed610fb105e77a7 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Wed, 15 May 2013 08:52:06 +0000 Subject: QPID-4845 : [JMS AMQP 1.0] Client incorrectly reports temporary destinations as deleted git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1482729 13f79535-47bb-0310-9956-ffa450edef68 --- .../amqp_1_0/jms/impl/MessageConsumerImpl.java | 28 ++++++++++++++++++++-- .../qpid/amqp_1_0/jms/impl/TemporaryQueueImpl.java | 6 +++-- 2 files changed, 30 insertions(+), 4 deletions(-) (limited to 'java') diff --git a/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java b/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java index b6e11ab44e..d2b34e0f13 100644 --- a/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java +++ b/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import javax.jms.Destination; +import javax.jms.ExceptionListener; import javax.jms.IllegalStateException; import javax.jms.InvalidDestinationException; import javax.jms.InvalidSelectorException; @@ -117,6 +118,29 @@ public class MessageConsumerImpl implements MessageConsumer, QueueReceiver, Topi _session = session; _receiver = createClientReceiver(); + _receiver.setRemoteErrorListener(new Runnable() + { + @Override + public void run() + { + try + { + final ExceptionListener exceptionListener = _session.getConnection().getExceptionListener(); + + if(exceptionListener != null) + { + final Error receiverError = _receiver.getError(); + exceptionListener.onException(new JMSException(receiverError.getDescription(), + receiverError.getCondition().getValue().toString())); + + } + } + catch (JMSException e) + { + + } + } + }); } @@ -125,8 +149,8 @@ public class MessageConsumerImpl implements MessageConsumer, QueueReceiver, Topi { try { - return _session.getClientSession(). createReceiver(_session.toAddress(_destination), AcknowledgeMode.ALO, - _linkName, _durable, getFilters(), null); + return _session.getClientSession().createReceiver(_session.toAddress(_destination), AcknowledgeMode.ALO, + _linkName, _durable, getFilters(), null); } catch (ConnectionErrorException e) { diff --git a/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/TemporaryQueueImpl.java b/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/TemporaryQueueImpl.java index 76608c421b..2c48a6b20f 100644 --- a/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/TemporaryQueueImpl.java +++ b/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/TemporaryQueueImpl.java @@ -34,6 +34,7 @@ public class TemporaryQueueImpl extends QueueImpl implements TemporaryQueue private SessionImpl _session; private final Set _consumers = Collections.synchronizedSet(new HashSet()); + private boolean _deleted; protected TemporaryQueueImpl(String address, Sender sender, SessionImpl session) { @@ -56,7 +57,8 @@ public class TemporaryQueueImpl extends QueueImpl implements TemporaryQueue { if(_consumers.isEmpty()) { - close(); + close(); + _deleted = true; } else { @@ -100,6 +102,6 @@ public class TemporaryQueueImpl extends QueueImpl implements TemporaryQueue public boolean isDeleted() { - return _sender == null; + return _deleted; } } -- cgit v1.2.1