You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2016/10/19 17:39:20 UTC
[2/2] activemq-artemis git commit: ARTEMIS-805 old JMS clients
failing on new broker
ARTEMIS-805 old JMS clients failing on new broker
Old JMS clients are getting a CCE related to SessionBindingQueryResponseMessage
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/b2b6743b
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/b2b6743b
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/b2b6743b
Branch: refs/heads/master
Commit: b2b6743b5846fd6dfc7cb97021e70dacd0082e0f
Parents: b7d79f3
Author: Tomas Hofman <th...@redhat.com>
Authored: Mon Oct 17 16:31:27 2016 +0200
Committer: Clebert Suconic <cl...@apache.org>
Committed: Wed Oct 19 13:22:56 2016 -0400
----------------------------------------------------------------------
.../artemis/core/protocol/core/Channel.java | 5 +++++
.../core/impl/ActiveMQSessionContext.java | 18 +++++++++++++++---
.../core/protocol/core/impl/ChannelImpl.java | 5 ++++-
.../integration/cluster/util/BackupSyncDelay.java | 5 +++++
4 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2b6743b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/Channel.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/Channel.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/Channel.java
index bb7b381..9771795 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/Channel.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/Channel.java
@@ -53,6 +53,11 @@ public interface Channel {
boolean supports(byte packetID);
/**
+ * For protocol check
+ */
+ boolean supports(byte packetID, int version);
+
+ /**
* Sends a packet on this channel.
*
* @param packet the packet to send
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2b6743b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java
index c03f76c..c72e19b 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java
@@ -61,6 +61,8 @@ import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.RollbackMe
import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.SessionAcknowledgeMessage;
import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.SessionAddMetaDataMessageV2;
import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.SessionBindingQueryMessage;
+import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.SessionBindingQueryResponseMessage;
+import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.SessionBindingQueryResponseMessage_V2;
import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.SessionBindingQueryResponseMessage_V3;
import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.SessionCloseMessage;
import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.SessionConsumerCloseMessage;
@@ -290,9 +292,19 @@ public class ActiveMQSessionContext extends SessionContext {
@Override
public ClientSession.AddressQuery addressQuery(final SimpleString address) throws ActiveMQException {
- SessionBindingQueryResponseMessage_V3 response = (SessionBindingQueryResponseMessage_V3) sessionChannel.sendBlocking(new SessionBindingQueryMessage(address), PacketImpl.SESS_BINDINGQUERY_RESP_V3);
-
- return new AddressQueryImpl(response.isExists(), response.getQueueNames(), response.isAutoCreateJmsQueues(), response.isAutoCreateJmsTopics());
+ if (sessionChannel.supports(PacketImpl.SESS_BINDINGQUERY_RESP_V3, getServerVersion())) {
+ Packet packet = sessionChannel.sendBlocking(new SessionBindingQueryMessage(address), PacketImpl.SESS_BINDINGQUERY_RESP_V3);
+ SessionBindingQueryResponseMessage_V3 response = (SessionBindingQueryResponseMessage_V3) packet;
+ return new AddressQueryImpl(response.isExists(), response.getQueueNames(), response.isAutoCreateJmsQueues(), response.isAutoCreateJmsTopics());
+ } else if (sessionChannel.supports(PacketImpl.SESS_BINDINGQUERY_RESP_V2, getServerVersion())) {
+ Packet packet = sessionChannel.sendBlocking(new SessionBindingQueryMessage(address), PacketImpl.SESS_BINDINGQUERY_RESP_V2);
+ SessionBindingQueryResponseMessage_V2 response = (SessionBindingQueryResponseMessage_V2) packet;
+ return new AddressQueryImpl(response.isExists(), response.getQueueNames(), response.isAutoCreateJmsQueues(), false);
+ } else {
+ Packet packet = sessionChannel.sendBlocking(new SessionBindingQueryMessage(address), PacketImpl.SESS_BINDINGQUERY_RESP);
+ SessionBindingQueryResponseMessage response = (SessionBindingQueryResponseMessage) packet;
+ return new AddressQueryImpl(response.isExists(), response.getQueueNames(), false, false);
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2b6743b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ChannelImpl.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ChannelImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ChannelImpl.java
index a51b7b9..41be080 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ChannelImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ChannelImpl.java
@@ -152,8 +152,11 @@ public final class ChannelImpl implements Channel {
@Override
public boolean supports(final byte packetType) {
- int version = connection.getClientVersion();
+ return supports(packetType, connection.getClientVersion());
+ }
+ @Override
+ public boolean supports(final byte packetType, int version) {
switch (packetType) {
case PacketImpl.CLUSTER_TOPOLOGY_V2:
return version >= 122;
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b2b6743b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/util/BackupSyncDelay.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/util/BackupSyncDelay.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/util/BackupSyncDelay.java
index 7247ede..e4afb5b 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/util/BackupSyncDelay.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/util/BackupSyncDelay.java
@@ -345,5 +345,10 @@ public class BackupSyncDelay implements Interceptor {
return true;
}
+ @Override
+ public boolean supports(byte packetID, int version) {
+ return true;
+ }
+
}
}