diff --git a/activemq-core-client/src/main/java/org/apache/activemq/core/protocol/core/impl/BackwardsCompatibilityUtils.java b/activemq-core-client/src/main/java/org/apache/activemq/core/protocol/core/impl/BackwardsCompatibilityUtils.java new file mode 100644 index 0000000000..1ca4293032 --- /dev/null +++ b/activemq-core-client/src/main/java/org/apache/activemq/core/protocol/core/impl/BackwardsCompatibilityUtils.java @@ -0,0 +1,52 @@ +/** + * 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.activemq.core.protocol.core.impl; + +import org.apache.activemq.api.core.Pair; +import org.apache.activemq.api.core.TransportConfiguration; +import org.apache.activemq.api.core.client.TopologyMember; + +/** + * This is a utility class to house any HornetQ client specific backwards compatibility methods. + * + * @author mtaylor + */ + +public class BackwardsCompatibilityUtils +{ + private static int INITIAL_ACTIVEMQ_INCREMENTING_VERSION = 126; + + public static Pair getTCPair(int clientIncrementingVersion, TopologyMember member) + { + if (clientIncrementingVersion < INITIAL_ACTIVEMQ_INCREMENTING_VERSION) + { + return new Pair<>(replaceClassName(member.getLive()), replaceClassName(member.getBackup())); + } + return new Pair<>(member.getLive(), member.getBackup()); + } + + private static TransportConfiguration replaceClassName(TransportConfiguration tc) + { + if (tc != null) + { + String className = tc.getFactoryClassName().replace("org.apache.activemq", "org.hornetq").replace("ActiveMQ", "HornetQ"); + return new TransportConfiguration(className, tc.getParams(), tc.getName()); + } + return tc; + } +} diff --git a/activemq-server/src/main/java/org/apache/activemq/core/protocol/core/impl/CoreProtocolManager.java b/activemq-server/src/main/java/org/apache/activemq/core/protocol/core/impl/CoreProtocolManager.java index 5e14697b67..eb6ea5a205 100644 --- a/activemq-server/src/main/java/org/apache/activemq/core/protocol/core/impl/CoreProtocolManager.java +++ b/activemq-server/src/main/java/org/apache/activemq/core/protocol/core/impl/CoreProtocolManager.java @@ -234,9 +234,9 @@ class CoreProtocolManager implements ProtocolManager { try { - final Pair connectorPair = - new Pair(topologyMember.getLive(), - topologyMember.getBackup()); + final Pair connectorPair = BackwardsCompatibilityUtils + .getTCPair(channel0.getConnection().getClientVersion(), topologyMember); + final String nodeID = topologyMember.getNodeId(); // Using an executor as most of the notifications on the Topology // may come from a channel itself