[prev in list] [next in list] [prev in thread] [next in thread]
List: activemq-dev
Subject: [jira] Created: (AMQ-2144) Can't unsubscribe a durable subscription
From: Cláudio_de_Miranda_Luz_(JIRA) <jira () apache ! org>
Date: 2009-02-26 19:36:00
Message-ID: 1622677766.1235676960005.JavaMail.jira () brutus
[Download RAW message or body]
Can't unsubscribe a durable subscription when there's a virtual topic present on the \
broker
-------------------------------------------------------------------------------------------
Key: AMQ-2144
URL: https://issues.apache.org/activemq/browse/AMQ-2144
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 5.2.0
Environment: Ubuntu
Reporter: Cláudio de Miranda Luz
The scenario is:
There's a virtual topic being used. (i.e. topic VirtualTopic.Orders).
A consumer subscribes to any topic present on the broker and after some time it tries \
to unsubscribe the durable subscription.
When it calls session.unsubscribe(consumerName) to unsubscribe a durable \
subscription, it receives the following exception:
Caught: javax.jms.JMSException: \
org.apache.activemq.broker.region.virtual.VirtualTopicInterceptor cannot be cast to \
org.apache.activemq.broker.region.Topic
javax.jms.JMSException: \
org.apache.activemq.broker.region.virtual.VirtualTopicInterceptor cannot be cast to \
org.apache.activemq.broker.region.Topic at \
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49) at \
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1244) \
at org.apache.activemq.ActiveMQConnection.unsubscribe(ActiveMQConnection.java:2052) \
at org.apache.activemq.ActiveMQSession.unsubscribe(ActiveMQSession.java:1431) at \
DurableSubscriber.consumeMessagesAndClose(DurableSubscriber.java:206) at \
DurableSubscriber.run(DurableSubscriber.java:112) at \
DurableSubscriber.main(DurableSubscriber.java:70) Caused by: \
java.lang.ClassCastException: \
org.apache.activemq.broker.region.virtual.VirtualTopicInterceptor cannot be cast to \
org.apache.activemq.broker.region.Topic at \
org.apache.activemq.broker.region.TopicRegion.removeSubscription(TopicRegion.java:139)
at org.apache.activemq.broker.region.RegionBroker.removeSubscription(RegionBroker.java:409)
at org.apache.activemq.broker.BrokerFilter.removeSubscription(BrokerFilter.java:98)
at org.apache.activemq.broker.BrokerFilter.removeSubscription(BrokerFilter.java:98)
at org.apache.activemq.broker.BrokerFilter.removeSubscription(BrokerFilter.java:98)
at org.apache.activemq.broker.MutableBrokerFilter.removeSubscription(MutableBrokerFilter.java:105)
at org.apache.activemq.broker.TransportConnection.processRemoveSubscription(TransportConnection.java:339)
at org.apache.activemq.command.RemoveSubscriptionInfo.visit(RemoveSubscriptionInfo.java:83)
at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:305)
at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:179)
at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:143)
at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:206)
at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203)
at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
at java.lang.Thread.run(Thread.java:619)
The error happens on the following method of \
org.apache.activemq.broker.region.TopicRegion class:
public void removeSubscription(ConnectionContext context, RemoveSubscriptionInfo \
info) throws Exception {
SubscriptionKey key = new SubscriptionKey(info.getClientId(), \
info.getSubscriptionName()); DurableTopicSubscription sub = \
durableSubscriptions.get(key); if (sub == null) {
throw new InvalidDestinationException("No durable subscription exists \
for: " + info.getSubscriptionName()); }
if (sub.isActive()) {
throw new JMSException("Durable consumer is in use");
}
durableSubscriptions.remove(key);
synchronized (destinationsMutex) {
for (Iterator<Destination> iter = destinations.values().iterator(); \
iter.hasNext();) { Topic topic = (Topic)iter.next();
topic.deleteSubscription(context, key);
}
}
super.removeConsumer(context, sub.getConsumerInfo());
}
The virtual topic is present on the destinations collection being iterated but its \
type is not Topic and that is what causes the error.
If there is no virtual topics present on the broker, unsubscriptions work well.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic