[
https://issues.apache.org/jira/browse/AMQ-5298?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14080102#comment-14080102
]
Timothy Bish edited comment on AMQ-5298 at 7/30/14 10:40 PM:
-------------------------------------------------------------
This patch fixes the crash but there are issues with the retained messages
because it's a VurtualTopic.
{noformat}
diff --git
a/activemq-mqtt/src/main/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java
b/activemq-mqtt/src/main/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java
index cc51ce7..af5f003 100644
---
a/activemq-mqtt/src/main/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java
+++
b/activemq-mqtt/src/main/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java
@@ -40,6 +40,7 @@
import org.apache.activemq.broker.region.Subscription;
import org.apache.activemq.broker.region.TopicRegion;
import
org.apache.activemq.broker.region.policy.RetainedMessageSubscriptionRecoveryPolicy;
+import org.apache.activemq.broker.region.virtual.VirtualTopicInterceptor;
import org.apache.activemq.command.ActiveMQBytesMessage;
import org.apache.activemq.command.ActiveMQDestination;
import org.apache.activemq.command.ActiveMQMapMessage;
@@ -503,7 +504,11 @@
for (Subscription subscription : dest.getConsumers()) {
if
(subscription.getConsumerInfo().getConsumerId().equals(consumerId)) {
try {
-
((org.apache.activemq.broker.region.Topic)dest).recoverRetroactiveMessages(connectionContext,
subscription);
+ if (dest instanceof
org.apache.activemq.broker.region.Topic) {
+
((org.apache.activemq.broker.region.Topic)dest).recoverRetroactiveMessages(connectionContext,
subscription);
+ } else if (dest instanceof VirtualTopicInterceptor) {
+
((VirtualTopicInterceptor)dest).getTopic().recoverRetroactiveMessages(connectionContext,
subscription);
+ }
if (subscription instanceof PrefetchSubscription) {
// request dispatch for prefetch subs
PrefetchSubscription prefetchSubscription =
(PrefetchSubscription) subscription;
{noformat}
was (Author: tabish121):
This patch fixes the crash but there are issues with the retained messages
because it's a VurtualTopic.
{code}
diff --git
a/activemq-mqtt/src/main/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java
b/activemq-mqtt/src/main/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java
index cc51ce7..af5f003 100644
---
a/activemq-mqtt/src/main/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java
+++
b/activemq-mqtt/src/main/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java
@@ -40,6 +40,7 @@
import org.apache.activemq.broker.region.Subscription;
import org.apache.activemq.broker.region.TopicRegion;
import
org.apache.activemq.broker.region.policy.RetainedMessageSubscriptionRecoveryPolicy;
+import org.apache.activemq.broker.region.virtual.VirtualTopicInterceptor;
import org.apache.activemq.command.ActiveMQBytesMessage;
import org.apache.activemq.command.ActiveMQDestination;
import org.apache.activemq.command.ActiveMQMapMessage;
@@ -503,7 +504,11 @@
for (Subscription subscription : dest.getConsumers()) {
if
(subscription.getConsumerInfo().getConsumerId().equals(consumerId)) {
try {
-
((org.apache.activemq.broker.region.Topic)dest).recoverRetroactiveMessages(connectionContext,
subscription);
+ if (dest instanceof
org.apache.activemq.broker.region.Topic) {
+
((org.apache.activemq.broker.region.Topic)dest).recoverRetroactiveMessages(connectionContext,
subscription);
+ } else if (dest instanceof VirtualTopicInterceptor) {
+
((VirtualTopicInterceptor)dest).getTopic().recoverRetroactiveMessages(connectionContext,
subscription);
+ }
if (subscription instanceof PrefetchSubscription) {
// request dispatch for prefetch subs
PrefetchSubscription prefetchSubscription =
(PrefetchSubscription) subscription;
{code}
> MQTT Transport can generate class cast exception when subscription is to a
> Virtual Topic
> ----------------------------------------------------------------------------------------
>
> Key: AMQ-5298
> URL: https://issues.apache.org/jira/browse/AMQ-5298
> Project: ActiveMQ
> Issue Type: Bug
> Components: MQTT
> Affects Versions: 5.10.0
> Reporter: Timothy Bish
> Fix For: 5.11.0
>
>
> When a client subscribes to a Virtual Topic and sends a duplicate
> subscription request the method that resends the old retained messages tries
> to cast the destination from the TopicRegion is finds to a Topic but in this
> case it would be a VirtualTopicIntercepter and an exception is thrown
> disconnecting the client.
--
This message was sent by Atlassian JIRA
(v6.2#6252)