You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2014/09/26 14:08:27 UTC
[1/2] git commit: update envelope toString/equals/hashCode
implementations,
add sequence number and tweak facade to avoid message-id conversion cost for
envelope use
Repository: qpid-jms
Updated Branches:
refs/heads/master 63ab8c1bc -> 191fa4ce1
update envelope toString/equals/hashCode implementations, add sequence number and tweak facade to avoid message-id conversion cost for envelope use
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/82b0842a
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/82b0842a
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/82b0842a
Branch: refs/heads/master
Commit: 82b0842a1f5d9a4cdd48b5e49c3d57245112614e
Parents: 63ab8c1
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 12:14:09 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 12:14:09 2014 +0100
----------------------------------------------------------------------
.../jms/message/JmsInboundMessageDispatch.java | 68 ++++++++++++++++----
.../jms/message/facade/JmsMessageFacade.java | 12 ++++
.../defaults/JmsDefaultMessageFacade.java | 5 ++
.../qpid/jms/provider/amqp/AmqpConsumer.java | 12 +++-
.../jms/provider/amqp/AmqpQueueBrowser.java | 4 +-
.../amqp/message/AmqpJmsMessageFacade.java | 8 ++-
6 files changed, 88 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/82b0842a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsInboundMessageDispatch.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsInboundMessageDispatch.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsInboundMessageDispatch.java
index 46bd4d5..94a99b2 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsInboundMessageDispatch.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsInboundMessageDispatch.java
@@ -22,11 +22,17 @@ import org.apache.qpid.jms.meta.JmsConsumerId;
/**
* Envelope used to deliver incoming messages to their targeted consumer.
*/
-public class JmsInboundMessageDispatch extends JmsAbstractResourceId{
+public class JmsInboundMessageDispatch extends JmsAbstractResourceId {
private JmsConsumerId consumerId;
+ private Object messageId;
+ private long sequence;
private JmsMessage message;
- private String dispatchId;
+
+ public JmsInboundMessageDispatch(long sequence)
+ {
+ this.sequence = sequence;
+ }
public JmsMessage getMessage() {
return message;
@@ -48,23 +54,59 @@ public class JmsInboundMessageDispatch extends JmsAbstractResourceId{
this.message.incrementRedeliveryCount();
}
- public void setDispatchId(String dispatchId)
- {
- this.dispatchId = dispatchId;
+ public void setMessageId(Object object) {
+ this.messageId = object;
}
@Override
public String toString() {
- String result = "JmsInboundMessageDispatch {dispatchId = ";
- String id = dispatchId;
- if (id == null) {
- result = result + "<null>}";
- } else {
- result = result + id + "}";
- }
+ return "JmsInboundMessageDispatch {sequence = " + sequence
+ + ", messageId = " + messageId
+ + ", consumerId = " + consumerId
+ + "}";
+ }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((consumerId == null) ? 0 : consumerId.hashCode());
+ result = prime * result + ((messageId == null) ? 0 : messageId.hashCode());
+ result = prime * result + (int) (sequence ^ (sequence >>> 32));
return result;
}
- //TODO: equals and hashcode?
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null || getClass() != obj.getClass()) {
+ return false;
+ }
+
+ JmsInboundMessageDispatch other = (JmsInboundMessageDispatch) obj;
+ if (sequence != other.sequence) {
+ return false;
+ }
+
+ if (messageId == null) {
+ if (other.messageId != null) {
+ return false;
+ }
+ } else if (!messageId.equals(other.messageId)) {
+ return false;
+ }
+
+ if (consumerId == null) {
+ if (other.consumerId != null) {
+ return false;
+ }
+ } else if (!consumerId.equals(other.consumerId)) {
+ return false;
+ }
+
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/82b0842a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java
index c2d9e8a..9f4717d 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java
@@ -129,6 +129,8 @@ public interface JmsMessageFacade {
/**
* Returns the correlation ID set on this message if one exists, null otherwise.
+ * The returned value will include the JMS mandated 'ID:' prefix if the value
+ * represents a JMSMessageID rather than an application-specific string.
*
* @return the set correlation ID or null if not set.
*/
@@ -165,12 +167,22 @@ public interface JmsMessageFacade {
/**
* Returns the message ID set on this message if one exists, null otherwise.
+ * The returned value will include the JMS mandated 'ID:' prefix.
*
* @return the set message ID or null if not set.
*/
String getMessageId();
/**
+ * Returns the underlying providers message ID object for this message if one
+ * exists, null otherwise. In the case the returned value is a String, it is not
+ * defined whether the JMS mandated 'ID:' prefix will be present.
+ *
+ * @return the set provider message ID or null if not set.
+ */
+ Object getProviderMessageIdObject();
+
+ /**
* Sets the message ID for this message.
*
* @param messageId
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/82b0842a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java
index 32e501a..330ddfb 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java
@@ -148,6 +148,11 @@ public class JmsDefaultMessageFacade implements JmsMessageFacade {
}
@Override
+ public Object getProviderMessageIdObject() {
+ return messageId;
+ }
+
+ @Override
public void setMessageId(String messageId) {
this.messageId = messageId;
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/82b0842a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java
index d827287..57c6b35 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
import javax.jms.JMSException;
@@ -74,6 +75,8 @@ public class AmqpConsumer extends AbstractAmqpResource<JmsConsumerInfo, Receiver
private final ByteArrayOutputStream streamBuffer = new ByteArrayOutputStream();
private final byte incomingBuffer[] = new byte[1024 * 64];
+ private AtomicLong _incomingSequence = new AtomicLong(0);
+
public AmqpConsumer(AmqpSession session, JmsConsumerInfo info) {
super(info);
this.session = session;
@@ -335,13 +338,12 @@ public class AmqpConsumer extends AbstractAmqpResource<JmsConsumerInfo, Receiver
// mode and the consumer will see it as a normal received message.
message.onSend();
- JmsInboundMessageDispatch envelope = new JmsInboundMessageDispatch();
+ JmsInboundMessageDispatch envelope = new JmsInboundMessageDispatch(getNextIncomingSequenceNumber());
envelope.setMessage(message);
envelope.setConsumerId(info.getConsumerId());
// Store link to delivery in the hint for use in acknowledge requests.
envelope.setProviderHint(incoming);
- //TODO: the below messageId retrieval may result in type conversion costs
- envelope.setDispatchId(message.getJMSMessageID());
+ envelope.setMessageId(message.getFacade().getProviderMessageIdObject());
// Store reference to envelope in delivery context for recovery
incoming.setContext(envelope);
@@ -349,6 +351,10 @@ public class AmqpConsumer extends AbstractAmqpResource<JmsConsumerInfo, Receiver
deliver(envelope);
}
+ protected long getNextIncomingSequenceNumber() {
+ return _incomingSequence.incrementAndGet();
+ }
+
@Override
protected void doClose() {
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/82b0842a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpQueueBrowser.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpQueueBrowser.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpQueueBrowser.java
index e23b4c0..10e165b 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpQueueBrowser.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpQueueBrowser.java
@@ -75,7 +75,7 @@ public class AmqpQueueBrowser extends AmqpConsumer {
@Override
public void processFlowUpdates() throws IOException {
if (endpoint.getDrain() && endpoint.getCredit() == endpoint.getRemoteCredit()) {
- JmsInboundMessageDispatch browseDone = new JmsInboundMessageDispatch();
+ JmsInboundMessageDispatch browseDone = new JmsInboundMessageDispatch(getNextIncomingSequenceNumber());
browseDone.setConsumerId(getConsumerId());
try {
deliver(browseDone);
@@ -99,7 +99,7 @@ public class AmqpQueueBrowser extends AmqpConsumer {
super.processDeliveryUpdates();
if (endpoint.getDrain() && endpoint.getCredit() == endpoint.getRemoteCredit()) {
- JmsInboundMessageDispatch browseDone = new JmsInboundMessageDispatch();
+ JmsInboundMessageDispatch browseDone = new JmsInboundMessageDispatch(getNextIncomingSequenceNumber());
browseDone.setConsumerId(getConsumerId());
try {
deliver(browseDone);
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/82b0842a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
index aa34d24..5eb5ede 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
@@ -312,9 +312,6 @@ public class AmqpJmsMessageFacade implements JmsMessageFacade {
// Ensure the ID: prefix is present.
// TODO: should we always do this when non-null? AMQP JMS Mapping says never to send the "ID:" prefix.
- // TODO: should we make this part of the JmsMessageId, or JmsMessage object responsibilities?
- // I Ended up putting it in JmsMessage after the above comment, as a workaround for the
- // current JmsDefaultMessageFacade usage.
if (baseStringId != null && !helper.hasMessageIdPrefix(baseStringId)) {
baseStringId = AmqpMessageIdHelper.JMS_ID_PREFIX + baseStringId;
}
@@ -322,6 +319,11 @@ public class AmqpJmsMessageFacade implements JmsMessageFacade {
}
@Override
+ public Object getProviderMessageIdObject() {
+ return message.getMessageId();
+ }
+
+ @Override
public void setMessageId(String messageId) {
if (messageId == null) {
message.setMessageId(null);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[2/2] git commit: add some tests for JmsInboundMessageDispatch
Posted by ro...@apache.org.
add some tests for JmsInboundMessageDispatch
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/191fa4ce
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/191fa4ce
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/191fa4ce
Branch: refs/heads/master
Commit: 191fa4ce12a78494cd7804a7800c5d5bf829dca1
Parents: 82b0842
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 12:45:58 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 12:45:58 2014 +0100
----------------------------------------------------------------------
.../message/JmsInboundMessageDispatchTest.java | 185 +++++++++++++++++++
1 file changed, 185 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/191fa4ce/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsInboundMessageDispatchTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsInboundMessageDispatchTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsInboundMessageDispatchTest.java
new file mode 100644
index 0000000..f40f3b2
--- /dev/null
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsInboundMessageDispatchTest.java
@@ -0,0 +1,185 @@
+/*
+ * 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.qpid.jms.message;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.UUID;
+
+import org.apache.qpid.jms.meta.JmsConsumerId;
+import org.apache.qpid.jms.meta.JmsSessionId;
+import org.apache.qpid.proton.amqp.Binary;
+import org.apache.qpid.proton.amqp.UnsignedLong;
+import org.junit.Test;
+
+public class JmsInboundMessageDispatchTest {
+
+ @Test
+ public void testEqualAndHashCodeWithSameSequenceOnly() {
+ int sequence = 1;
+ JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
+ JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
+
+ assertTrue("objects should be equal", envelope1.equals(envelope2));
+ assertTrue("objects should still be equal", envelope2.equals(envelope1));
+
+ assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
+ }
+
+ @Test
+ public void testEqualAndHashCodeWithDifferentSequenceOnly() {
+ int sequence = 1;
+ JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
+ JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence + 1);
+
+ assertFalse("objects should not be equal", envelope1.equals(envelope2));
+ assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+
+ // Not strictly a requirement, but expected in this case
+ assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+ }
+
+ @Test
+ public void testEqualAndHashCodeWithSameSequenceDifferentConsumerId() {
+ JmsSessionId sessionId = new JmsSessionId("con", 1);
+
+ long sequence = 1;
+ JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
+ JmsConsumerId consumerId1 = new JmsConsumerId(sessionId, 1);
+ envelope1.setConsumerId(consumerId1);
+
+ JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
+ JmsConsumerId consumerId2 = new JmsConsumerId(sessionId, 2);
+ envelope2.setConsumerId(consumerId2);
+
+ assertFalse("objects should not be equal", envelope1.equals(envelope2));
+ assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+
+ // Not strictly a requirement, but expected in this case
+ assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+ }
+
+ @Test
+ public void testEqualAndHashCodeWithSameSequenceSameConsumerId() {
+ JmsSessionId sessionId = new JmsSessionId("con", 1);
+ JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
+
+ long sequence = 1;
+ JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
+ envelope1.setConsumerId(consumerId);
+
+ JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
+ envelope2.setConsumerId(consumerId);
+
+ assertTrue("objects should be equal", envelope1.equals(envelope2));
+ assertTrue("objects should still be equal", envelope2.equals(envelope1));
+
+ assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
+ }
+
+ @Test
+ public void testEqualAndHashCodeWithSameSequenceSameConsumerIdSameMessageId() {
+ JmsSessionId sessionId = new JmsSessionId("con", 1);
+ JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
+ Object messageId = "myMessageId";
+
+ long sequence = 1;
+ JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
+ envelope1.setConsumerId(consumerId);
+ envelope1.setMessageId(messageId);
+
+ JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
+ envelope2.setConsumerId(consumerId);
+ envelope2.setMessageId(messageId);
+
+ assertTrue("objects should be equal", envelope1.equals(envelope2));
+ assertTrue("objects should still be equal", envelope2.equals(envelope1));
+
+ assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
+ }
+
+ @Test
+ public void testEqualAndHashCodeWithSameSequenceSameConsumerIdDifferentMessageIdTypes() {
+ JmsSessionId sessionId = new JmsSessionId("con", 1);
+ JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
+ Object messageId1 = new Binary(new byte[] { (byte) 1, (byte) 0 });
+ Object messageId2 = UnsignedLong.valueOf(2);
+
+ long sequence = 1;
+ JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
+ envelope1.setConsumerId(consumerId);
+ envelope1.setMessageId(messageId1);
+
+ JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
+ envelope2.setConsumerId(consumerId);
+ envelope2.setMessageId(messageId2);
+
+ assertFalse("objects should not be equal", envelope1.equals(envelope2));
+ assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+
+ // Not strictly a requirement, but expected in this case
+ assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+ }
+
+ @Test
+ public void testEqualAndHashCodeWithSameSequenceSameConsumerIdDifferentMessageIdTypes2() {
+ JmsSessionId sessionId = new JmsSessionId("con", 1);
+ JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
+ Object messageId1 = UUID.randomUUID();
+ Object messageId2 = messageId1.toString();
+
+ long sequence = 1;
+ JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
+ envelope1.setConsumerId(consumerId);
+ envelope1.setMessageId(messageId1);
+
+ JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
+ envelope2.setConsumerId(consumerId);
+ envelope2.setMessageId(messageId2);
+
+ assertFalse("objects should not be equal", envelope1.equals(envelope2));
+ assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+
+ // Not strictly a requirement, but expected in this case
+ assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+ }
+
+ @Test
+ public void testEqualAndHashCodeWithDifferentSequenceSameConsumerIdSameMessageId() {
+ JmsSessionId sessionId = new JmsSessionId("con", 1);
+ JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
+ Object messageId = "myMessageId";
+
+ long sequence = 1;
+ JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
+ envelope1.setConsumerId(consumerId);
+ envelope1.setMessageId(messageId);
+
+ JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence + 1);
+ envelope2.setConsumerId(consumerId);
+ envelope2.setMessageId(messageId);
+
+ assertFalse("objects should not be equal", envelope1.equals(envelope2));
+ assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+
+ // Not strictly a requirement, but expected in this case
+ assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org