You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2017/05/04 13:12:24 UTC
qpid-broker-j git commit: QPID-7753: Address thread safety comments
from Rob Godfrey
Repository: qpid-broker-j
Updated Branches:
refs/heads/master 54b58c603 -> 2c0e54fd1
QPID-7753: Address thread safety comments from Rob Godfrey
Refactor AMQP 1.0 message section implementations to avoid duplication
Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/2c0e54fd
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/2c0e54fd
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/2c0e54fd
Branch: refs/heads/master
Commit: 2c0e54fd1c4138845be340c2790222758bfeffbe
Parents: 54b58c6
Author: Alex Rudyy <or...@apache.org>
Authored: Thu May 4 11:41:25 2017 +0100
Committer: Alex Rudyy <or...@apache.org>
Committed: Thu May 4 13:56:09 2017 +0100
----------------------------------------------------------------------
.../protocol/v1_0/ConsumerTarget_1_0.java | 3 +-
.../v1_0/type/messaging/AbstractSection.java | 91 ++++++++++++++++++--
.../v1_0/type/messaging/AmqpSequence.java | 6 +-
.../type/messaging/AmqpSequenceSection.java | 65 ++------------
.../protocol/v1_0/type/messaging/AmqpValue.java | 6 +-
.../v1_0/type/messaging/AmqpValueSection.java | 67 ++------------
.../type/messaging/ApplicationProperties.java | 6 +-
.../messaging/ApplicationPropertiesSection.java | 62 ++-----------
.../protocol/v1_0/type/messaging/Data.java | 6 +-
.../v1_0/type/messaging/DataSection.java | 67 ++------------
.../type/messaging/DeliveryAnnotations.java | 5 +-
.../messaging/DeliveryAnnotationsSection.java | 62 ++-----------
.../protocol/v1_0/type/messaging/Footer.java | 5 +-
.../v1_0/type/messaging/FooterSection.java | 67 ++------------
.../protocol/v1_0/type/messaging/Header.java | 6 +-
.../v1_0/type/messaging/HeaderSection.java | 67 ++------------
.../v1_0/type/messaging/MessageAnnotations.java | 5 +-
.../messaging/MessageAnnotationsSection.java | 60 ++-----------
.../v1_0/type/messaging/Properties.java | 3 +-
.../v1_0/type/messaging/PropertiesSection.java | 68 ++-------------
.../AbstractEncodingRetainingConstructor.java | 4 +
.../codec/AmqpValueSectionConstructor.java | 4 +
.../messaging/codec/DataSectionConstructor.java | 4 +
.../codec/DescribedListSectionConstructor.java | 4 +
.../codec/DescribedMapSectionConstructor.java | 4 +
25 files changed, 187 insertions(+), 560 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java
index 182b14a..41a3fbc 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java
@@ -46,7 +46,6 @@ import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoderImpl;
import org.apache.qpid.server.protocol.v1_0.type.Binary;
import org.apache.qpid.server.protocol.v1_0.type.DeliveryState;
import org.apache.qpid.server.protocol.v1_0.type.Outcome;
-import org.apache.qpid.server.protocol.v1_0.type.BaseTarget;
import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
import org.apache.qpid.server.protocol.v1_0.type.codec.AMQPDescribedTypeRegistry;
import org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted;
@@ -56,7 +55,6 @@ import org.apache.qpid.server.protocol.v1_0.type.messaging.HeaderSection;
import org.apache.qpid.server.protocol.v1_0.type.messaging.Modified;
import org.apache.qpid.server.protocol.v1_0.type.messaging.Rejected;
import org.apache.qpid.server.protocol.v1_0.type.messaging.Released;
-import org.apache.qpid.server.protocol.v1_0.type.messaging.Target;
import org.apache.qpid.server.protocol.v1_0.type.transaction.TransactionalState;
import org.apache.qpid.server.protocol.v1_0.type.transport.SenderSettleMode;
import org.apache.qpid.server.protocol.v1_0.type.transport.Transfer;
@@ -151,6 +149,7 @@ class ConsumerTarget_1_0 extends AbstractConsumerTarget<ConsumerTarget_1_0>
headerSection = new HeaderSection(_typeRegistry);
headerSection.setEncodedForm(Collections.singletonList(headerPayload));
+ headerPayload.dispose();
}
List<QpidByteBuffer> payload = new ArrayList<>();
if(headerSection != null)
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
index 36a2b7e..768d500 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
@@ -21,23 +21,59 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
+import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
-public abstract class AbstractSection<T> implements EncodingRetainingSection<T>
+public abstract class AbstractSection<T, S extends NonEncodingRetainingSection<T>> implements EncodingRetainingSection<T>
{
+ private final DescribedTypeConstructorRegistry _typeRegistry;
+ private T _value;
private List<QpidByteBuffer> _encodedForm;
+ protected AbstractSection(final DescribedTypeConstructorRegistry registry)
+ {
+ _typeRegistry = registry;
+ }
+
+ protected AbstractSection(final S section, final SectionEncoder encoder)
+ {
+ _value = section.getValue();
+ _typeRegistry = encoder.getRegistry();
+ _encodedForm = Collections.singletonList(encoder.encodeObject(section));
+ }
+
@Override
- public final void setEncodedForm(final List<QpidByteBuffer> encodedForm)
+ public synchronized T getValue()
{
- _encodedForm = encodedForm;
+ if(_value == null)
+ {
+ S section = decode(createNonEncodingRetainingSectionConstructor());
+ _value = section.getValue();
+ }
+ return _value;
}
@Override
- public final List<QpidByteBuffer> getEncodedForm()
+ public synchronized final void setEncodedForm(final List<QpidByteBuffer> encodedForm)
+ {
+ _encodedForm = new ArrayList<>();
+ for(QpidByteBuffer encodedChunk : encodedForm)
+ {
+ _encodedForm.add(encodedChunk.duplicate());
+ }
+ }
+
+ @Override
+ public synchronized final List<QpidByteBuffer> getEncodedForm()
{
List<QpidByteBuffer> returnVal = new ArrayList<>(_encodedForm.size());
for(int i = 0; i < _encodedForm.size(); i++)
@@ -48,7 +84,7 @@ public abstract class AbstractSection<T> implements EncodingRetainingSection<T>
}
@Override
- public final void dispose()
+ public synchronized final void dispose()
{
for(int i = 0; i < _encodedForm.size(); i++)
{
@@ -58,25 +94,62 @@ public abstract class AbstractSection<T> implements EncodingRetainingSection<T>
}
-
@Override
- public final void reallocate(final long smallestAllowedBufferId)
+ public synchronized final void reallocate(final long smallestAllowedBufferId)
{
_encodedForm = QpidByteBuffer.reallocateIfNecessary(smallestAllowedBufferId, _encodedForm);
}
@Override
- public final long getEncodedSize()
+ public synchronized final long getEncodedSize()
{
return QpidByteBufferUtils.remaining(_encodedForm);
}
@Override
- public void writeTo(final QpidByteBuffer dest)
+ public synchronized void writeTo(final QpidByteBuffer dest)
{
for(QpidByteBuffer buf : _encodedForm)
{
dest.putCopyOf(buf);
}
}
+
+ @Override
+ public String toString()
+ {
+ return getValue().toString();
+ }
+
+ protected abstract AbstractDescribedTypeConstructor<S> createNonEncodingRetainingSectionConstructor();
+
+ private S decode(AbstractDescribedTypeConstructor<S> constructor)
+ {
+ List<QpidByteBuffer> input = getEncodedForm();
+ int[] originalPositions = new int[input.size()];
+ for(int i = 0; i < input.size(); i++)
+ {
+ originalPositions[i] = input.get(i).position();
+ }
+ int describedByte = QpidByteBufferUtils.get(input);
+ ValueHandler handler = new ValueHandler(_typeRegistry);
+ try
+ {
+ Object descriptor = handler.parse(input);
+ return constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler);
+ }
+ catch (AmqpErrorException e)
+ {
+ throw new ConnectionScopedRuntimeException("Cannot decode section", e);
+ }
+ finally
+ {
+ for (QpidByteBuffer anInput : input)
+ {
+ anInput.dispose();
+ }
+
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequence.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequence.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequence.java
index 7b40a70..da5a860 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequence.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequence.java
@@ -23,11 +23,8 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-
-import java.util.Collections;
import java.util.List;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
public class AmqpSequence implements NonEncodingRetainingSection<List>
@@ -55,7 +52,6 @@ public class AmqpSequence implements NonEncodingRetainingSection<List>
@Override
public AmqpSequenceSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);;
- return new AmqpSequenceSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new AmqpSequenceSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequenceSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequenceSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequenceSection.java
index c187434..7de8d36 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequenceSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpSequenceSection.java
@@ -23,76 +23,27 @@ package org.apache.qpid.server.protocol.v1_0.type.messaging;
import java.util.List;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.AmqpSequenceConstructor;
-public class AmqpSequenceSection extends AbstractSection<List>
+public class AmqpSequenceSection extends AbstractSection<List, AmqpSequence>
{
-
- private final DescribedTypeConstructorRegistry _typeRegistry;
- private List _value;
-
public AmqpSequenceSection(final DescribedTypeConstructorRegistry describedTypeRegistry)
{
- _typeRegistry = describedTypeRegistry;
- }
-
- public AmqpSequenceSection(final AmqpSequence sequence,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
- {
- _value = sequence.getValue();
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(describedTypeRegistry);
}
- @Override
- public String toString()
+ AmqpSequenceSection(final AmqpSequence sequence, final SectionEncoder sectionEncoder)
{
- return getValue().toString();
+ super(sequence, sectionEncoder);
}
@Override
- public synchronized List getValue()
+ protected AbstractDescribedTypeConstructor<AmqpSequence> createNonEncodingRetainingSectionConstructor()
{
- if(_value == null)
- {
- decode();
- }
- return _value;
+ return new AmqpSequenceConstructor();
}
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- AmqpSequenceConstructor constructor = new AmqpSequenceConstructor();
- _value = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler).getValue();
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
- }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValue.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValue.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValue.java
index 8ab034b..09b77c6 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValue.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValue.java
@@ -24,9 +24,6 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.Collections;
-
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
public class AmqpValue implements NonEncodingRetainingSection<Object>
@@ -57,7 +54,6 @@ public class AmqpValue implements NonEncodingRetainingSection<Object>
@Override
public AmqpValueSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);
- return new AmqpValueSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new AmqpValueSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValueSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValueSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValueSection.java
index 8793f4c..423052c 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValueSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AmqpValueSection.java
@@ -21,78 +21,27 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.List;
-
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.AmqpValueConstructor;
-public class AmqpValueSection extends AbstractSection<Object>
+public class AmqpValueSection extends AbstractSection<Object, AmqpValue>
{
-
- private final DescribedTypeConstructorRegistry _typeRegistry;
- private Object _value;
-
public AmqpValueSection(final DescribedTypeConstructorRegistry describedTypeRegistry)
{
- _typeRegistry = describedTypeRegistry;
+ super(describedTypeRegistry);
}
- public AmqpValueSection(final AmqpValue amqpValue,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
+ AmqpValueSection(final AmqpValue amqpValue, SectionEncoder sectionEncoder)
{
- _value = amqpValue.getValue();
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(amqpValue, sectionEncoder);
}
@Override
- public String toString()
+ protected AbstractDescribedTypeConstructor<AmqpValue> createNonEncodingRetainingSectionConstructor()
{
- return getValue().toString();
+ return new AmqpValueConstructor();
}
- @Override
- public synchronized Object getValue()
- {
- if(_value == null)
- {
- decode();
- }
- return _value;
- }
-
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- AmqpValueConstructor constructor = new AmqpValueConstructor();
- _value = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler).getValue();
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
- }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java
index 5ddf075..bd63785 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationProperties.java
@@ -23,11 +23,8 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-
-import java.util.Collections;
import java.util.Map;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
public class ApplicationProperties implements NonEncodingRetainingSection<Map<String,Object>>
@@ -48,7 +45,6 @@ public class ApplicationProperties implements NonEncodingRetainingSection<Map<St
@Override
public ApplicationPropertiesSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);
- return new ApplicationPropertiesSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new ApplicationPropertiesSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationPropertiesSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationPropertiesSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationPropertiesSection.java
index c706f31..cd75019 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationPropertiesSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/ApplicationPropertiesSection.java
@@ -21,73 +21,29 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.List;
import java.util.Map;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.ApplicationPropertiesConstructor;
-public class ApplicationPropertiesSection extends AbstractSection<Map<String,Object>>
+public class ApplicationPropertiesSection extends AbstractSection<Map<String,Object>, ApplicationProperties>
{
- private Map<String,Object> _value;
- private final DescribedTypeConstructorRegistry _typeRegistry;
- public ApplicationPropertiesSection(DescribedTypeConstructorRegistry registry)
+ public ApplicationPropertiesSection(final DescribedTypeConstructorRegistry registry)
{
- _typeRegistry = registry;
+ super(registry);
}
- public ApplicationPropertiesSection(final ApplicationProperties applicationProperties,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
+ ApplicationPropertiesSection(final ApplicationProperties section, final SectionEncoder encoder)
{
- _value = applicationProperties.getValue();
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(section, encoder);
}
@Override
- public synchronized Map<String,Object> getValue()
+ protected AbstractDescribedTypeConstructor<ApplicationProperties> createNonEncodingRetainingSectionConstructor()
{
- if(_value == null)
- {
- decode();
- }
- return _value;
- }
-
-
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- ApplicationPropertiesConstructor constructor = new ApplicationPropertiesConstructor();
- _value = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler).getValue();
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
+ return new ApplicationPropertiesConstructor();
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Data.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Data.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Data.java
index 9bb6c46..9a10fa3 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Data.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Data.java
@@ -21,9 +21,6 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.Collections;
-
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.Binary;
@@ -52,7 +49,6 @@ public class Data implements NonEncodingRetainingSection<Binary>
@Override
public DataSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);
- return new DataSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new DataSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DataSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DataSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DataSection.java
index 34e847a..754f306 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DataSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DataSection.java
@@ -21,79 +21,28 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.List;
-
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.Binary;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.DataConstructor;
-public class DataSection extends AbstractSection<Binary>
+public class DataSection extends AbstractSection<Binary, Data>
{
-
- private final DescribedTypeConstructorRegistry _typeRegistry;
- private Binary _value;
-
public DataSection(final DescribedTypeConstructorRegistry describedTypeRegistry)
{
- _typeRegistry = describedTypeRegistry;
+ super(describedTypeRegistry);
}
- public DataSection(final Data data,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
+ DataSection(final Data data, SectionEncoder sectionEncoder)
{
- _value = data.getValue();
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(data, sectionEncoder);
}
@Override
- public String toString()
+ protected AbstractDescribedTypeConstructor<Data> createNonEncodingRetainingSectionConstructor()
{
- return getValue().toString();
+ return new DataConstructor();
}
- @Override
- public synchronized Binary getValue()
- {
- if(_value == null)
- {
- decode();
- }
- return _value;
- }
-
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- DataConstructor constructor = new DataConstructor();
- _value = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler).getValue();
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
- }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotations.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotations.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotations.java
index a799efc..8a65b3f 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotations.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotations.java
@@ -21,10 +21,8 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.Collections;
import java.util.Map;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.Symbol;
@@ -46,7 +44,6 @@ public class DeliveryAnnotations implements NonEncodingRetainingSection<Map<Symb
@Override
public DeliveryAnnotationsSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);
- return new DeliveryAnnotationsSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new DeliveryAnnotationsSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotationsSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotationsSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotationsSection.java
index 7e4a3df..6c1fc40 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotationsSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/DeliveryAnnotationsSection.java
@@ -21,74 +21,30 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.List;
import java.util.Map;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.Symbol;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.DeliveryAnnotationsConstructor;
-public class DeliveryAnnotationsSection extends AbstractSection<Map<Symbol,Object>>
+public class DeliveryAnnotationsSection extends AbstractSection<Map<Symbol,Object>, DeliveryAnnotations>
{
- private Map<Symbol,Object> _value;
- private final DescribedTypeConstructorRegistry _typeRegistry;
-
- public DeliveryAnnotationsSection(DescribedTypeConstructorRegistry registry)
+ public DeliveryAnnotationsSection(final DescribedTypeConstructorRegistry describedTypeRegistry)
{
- _typeRegistry = registry;
+ super(describedTypeRegistry);
}
- public DeliveryAnnotationsSection(final DeliveryAnnotations deliveryAnnotations,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
+ DeliveryAnnotationsSection(final DeliveryAnnotations deliveryAnnotations, final SectionEncoder sectionEncoder)
{
- _value = deliveryAnnotations.getValue();
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(deliveryAnnotations, sectionEncoder);
}
@Override
- public synchronized Map<Symbol,Object> getValue()
+ protected AbstractDescribedTypeConstructor<DeliveryAnnotations> createNonEncodingRetainingSectionConstructor()
{
- if(_value == null)
- {
- decode();
- }
- return _value;
+ return new DeliveryAnnotationsConstructor();
}
-
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- DeliveryAnnotationsConstructor constructor = new DeliveryAnnotationsConstructor();
- _value = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler).getValue();
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
- }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Footer.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Footer.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Footer.java
index 0777c0b..fd89a03 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Footer.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Footer.java
@@ -21,10 +21,8 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.Collections;
import java.util.Map;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.Symbol;
@@ -53,7 +51,6 @@ public class Footer implements NonEncodingRetainingSection<Map<Symbol,Object>>
@Override
public FooterSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);
- return new FooterSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new FooterSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/FooterSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/FooterSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/FooterSection.java
index 94c6f3e..4d343f2 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/FooterSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/FooterSection.java
@@ -21,80 +21,29 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.List;
import java.util.Map;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.Symbol;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.FooterConstructor;
-public class FooterSection extends AbstractSection<Map<Symbol,Object>>
+public class FooterSection extends AbstractSection<Map<Symbol,Object>, Footer>
{
-
- private final DescribedTypeConstructorRegistry _typeRegistry;
- private Map<Symbol,Object> _value;
-
public FooterSection(final DescribedTypeConstructorRegistry describedTypeRegistry)
{
- _typeRegistry = describedTypeRegistry;
- }
-
- public FooterSection(final Footer footer,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
- {
- _value = footer.getValue();
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(describedTypeRegistry);
}
- @Override
- public String toString()
+ FooterSection(final Footer footer, final SectionEncoder sectionEncoder)
{
- return getValue().toString();
+ super(footer, sectionEncoder);
}
@Override
- public synchronized Map<Symbol,Object> getValue()
+ protected AbstractDescribedTypeConstructor<Footer> createNonEncodingRetainingSectionConstructor()
{
- if(_value == null)
- {
- decode();
- }
- return _value;
- }
-
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- FooterConstructor constructor = new FooterConstructor();
- _value = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler).getValue();
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
+ return new FooterConstructor();
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Header.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Header.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Header.java
index 45ce4a6..87d92b9 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Header.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Header.java
@@ -24,9 +24,6 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.Collections;
-
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.CompositeTypeField;
import org.apache.qpid.server.protocol.v1_0.type.UnsignedByte;
@@ -164,7 +161,6 @@ public class Header implements NonEncodingRetainingSection<Header>
@Override
public HeaderSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);
- return new HeaderSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new HeaderSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/HeaderSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/HeaderSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/HeaderSection.java
index e06eb5e..801ea4d 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/HeaderSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/HeaderSection.java
@@ -21,78 +21,27 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.List;
-
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.HeaderConstructor;
-public class HeaderSection extends AbstractSection<Header>
+public class HeaderSection extends AbstractSection<Header, Header>
{
-
- private final DescribedTypeConstructorRegistry _typeRegistry;
- private Header _header;
-
public HeaderSection(final DescribedTypeConstructorRegistry describedTypeRegistry)
{
- _typeRegistry = describedTypeRegistry;
+ super(describedTypeRegistry);
}
- public HeaderSection(final Header header,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
+ HeaderSection(final Header header, final SectionEncoder sectionEncoder)
{
- _header = header;
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(header, sectionEncoder);
}
@Override
- public String toString()
+ protected AbstractDescribedTypeConstructor<Header> createNonEncodingRetainingSectionConstructor()
{
- return getValue().toString();
+ return new HeaderConstructor();
}
- @Override
- public synchronized Header getValue()
- {
- if(_header == null)
- {
- decode();
- }
- return _header;
- }
-
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- HeaderConstructor constructor = new HeaderConstructor();
- _header = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler);
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
- }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotations.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotations.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotations.java
index d7f0bdd..7481ebf 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotations.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotations.java
@@ -21,10 +21,8 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.Collections;
import java.util.Map;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.Symbol;
@@ -46,7 +44,6 @@ public class MessageAnnotations implements NonEncodingRetainingSection<Map<Symbo
@Override
public MessageAnnotationsSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);
- return new MessageAnnotationsSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new MessageAnnotationsSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotationsSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotationsSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotationsSection.java
index 6fd0cc2..90952ce 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotationsSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/MessageAnnotationsSection.java
@@ -21,74 +21,30 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.List;
import java.util.Map;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.Symbol;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.MessageAnnotationsConstructor;
-public class MessageAnnotationsSection extends AbstractSection<Map<Symbol,Object>>
+public class MessageAnnotationsSection extends AbstractSection<Map<Symbol,Object>, MessageAnnotations>
{
- private Map<Symbol,Object> _value;
- private final DescribedTypeConstructorRegistry _typeRegistry;
-
public MessageAnnotationsSection(DescribedTypeConstructorRegistry registry)
{
- _typeRegistry = registry;
+ super(registry);
}
- public MessageAnnotationsSection(final MessageAnnotations messageAnnotations,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
+ MessageAnnotationsSection(final MessageAnnotations messageAnnotations, final SectionEncoder sectionEncoder)
{
- _value = messageAnnotations.getValue();
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(messageAnnotations, sectionEncoder);
}
@Override
- public synchronized Map<Symbol,Object> getValue()
+ protected AbstractDescribedTypeConstructor<MessageAnnotations> createNonEncodingRetainingSectionConstructor()
{
- if(_value == null)
- {
- decode();
- }
- return _value;
+ return new MessageAnnotationsConstructor();
}
-
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- MessageAnnotationsConstructor constructor = new MessageAnnotationsConstructor();
- _value = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler).getValue();
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
- }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Properties.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Properties.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Properties.java
index 7a83256..fefcf18 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Properties.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/Properties.java
@@ -338,7 +338,6 @@ public class Properties implements NonEncodingRetainingSection<Properties>
@Override
public PropertiesSection createEncodingRetainingSection(final SectionEncoder encoder)
{
- final QpidByteBuffer buf = encoder.encodeObject(this);
- return new PropertiesSection(this, Collections.singletonList(buf), encoder.getRegistry());
+ return new PropertiesSection(this, encoder);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/PropertiesSection.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/PropertiesSection.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/PropertiesSection.java
index f13633c..a6b482f 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/PropertiesSection.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/PropertiesSection.java
@@ -21,78 +21,28 @@
package org.apache.qpid.server.protocol.v1_0.type.messaging;
-import java.util.List;
-
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.codec.AbstractDescribedTypeConstructor;
import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.protocol.v1_0.codec.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
-import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
import org.apache.qpid.server.protocol.v1_0.type.messaging.codec.PropertiesConstructor;
-public class PropertiesSection extends AbstractSection<Properties>
+public class PropertiesSection extends AbstractSection<Properties, Properties>
{
-
- private final DescribedTypeConstructorRegistry _typeRegistry;
- private Properties _properties;
-
public PropertiesSection(final DescribedTypeConstructorRegistry describedTypeRegistry)
{
- _typeRegistry = describedTypeRegistry;
+ super(describedTypeRegistry);
}
- public PropertiesSection(final Properties properties,
- final List<QpidByteBuffer> encodedForm,
- final DescribedTypeConstructorRegistry registry)
+ PropertiesSection(final Properties properties,
+ final SectionEncoder sectionEncoder)
{
- _properties = properties;
- _typeRegistry = registry;
- setEncodedForm(encodedForm);
+ super(properties, sectionEncoder);
}
@Override
- public String toString()
+ protected AbstractDescribedTypeConstructor<Properties> createNonEncodingRetainingSectionConstructor()
{
- return getValue().toString();
+ return new PropertiesConstructor();
}
- @Override
- public synchronized Properties getValue()
- {
- if(_properties == null)
- {
- decode();
- }
- return _properties;
- }
-
- private void decode()
- {
- try
- {
-
- List<QpidByteBuffer> input = getEncodedForm();
- int[] originalPositions = new int[input.size()];
- for(int i = 0; i < input.size(); i++)
- {
- originalPositions[i] = input.get(i).position();
- }
- int describedByte = QpidByteBufferUtils.get(input);
- ValueHandler handler = new ValueHandler(_typeRegistry);
- Object descriptor = handler.parse(input);
- PropertiesConstructor constructor = new PropertiesConstructor();
- _properties = constructor.construct(descriptor, input, originalPositions, handler).construct(input, handler);
- for(int i = 0; i < input.size(); i++)
- {
- input.get(i).dispose();
- }
-
- }
- catch (AmqpErrorException e)
- {
- // TODO
- e.printStackTrace();
- }
- // TODO
- }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AbstractEncodingRetainingConstructor.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AbstractEncodingRetainingConstructor.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AbstractEncodingRetainingConstructor.java
index 1ba76d3..a528f5f 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AbstractEncodingRetainingConstructor.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AbstractEncodingRetainingConstructor.java
@@ -84,6 +84,10 @@ abstract public class AbstractEncodingRetainingConstructor<T extends EncodingRet
}
}
object.setEncodedForm(encoding);
+ for (QpidByteBuffer buffer: encoding)
+ {
+ buffer.dispose();
+ }
return object;
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
index 37a4f40..0d51fa6 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
@@ -109,6 +109,10 @@ public class AmqpValueSectionConstructor implements DescribedTypeConstructor<Amq
AmqpValueSection object =
new AmqpValueSection(((SectionDecoderRegistry) handler.getDescribedTypeRegistry()).getUnderlyingRegistry());
object.setEncodedForm(encoding);
+ for (QpidByteBuffer buffer: encoding)
+ {
+ buffer.dispose();
+ }
return object;
}
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DataSectionConstructor.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DataSectionConstructor.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DataSectionConstructor.java
index c59c918..c193cb0 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DataSectionConstructor.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DataSectionConstructor.java
@@ -139,6 +139,10 @@ public class DataSectionConstructor implements DescribedTypeConstructor<DataSect
}
DataSection object = new DataSection(((SectionDecoderRegistry)handler.getDescribedTypeRegistry()).getUnderlyingRegistry());
object.setEncodedForm(encoding);
+ for (QpidByteBuffer buffer: encoding)
+ {
+ buffer.dispose();
+ }
return object;
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedListSectionConstructor.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedListSectionConstructor.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedListSectionConstructor.java
index 95768cc..9b83866 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedListSectionConstructor.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedListSectionConstructor.java
@@ -128,6 +128,10 @@ public abstract class DescribedListSectionConstructor<S extends AbstractSection>
}
S object = createObject(((SectionDecoderRegistry)handler.getDescribedTypeRegistry()).getUnderlyingRegistry());
object.setEncodedForm(encoding);
+ for (QpidByteBuffer buffer: encoding)
+ {
+ buffer.dispose();
+ }
return object;
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2c0e54fd/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedMapSectionConstructor.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedMapSectionConstructor.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedMapSectionConstructor.java
index 5b02cca..6ca90c3 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedMapSectionConstructor.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/DescribedMapSectionConstructor.java
@@ -122,6 +122,10 @@ public abstract class DescribedMapSectionConstructor<S extends AbstractSection>
}
S object = createObject(((SectionDecoderRegistry)handler.getDescribedTypeRegistry()).getUnderlyingRegistry());
object.setEncodedForm(encoding);
+ for (QpidByteBuffer buffer: encoding)
+ {
+ buffer.dispose();
+ }
return object;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org