[hornetq-commits] JBoss hornetq SVN: r8314 - in branches/20-optimisation: src/main/org/hornetq/core/buffers and 47 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Nov 18 14:46:23 EST 2009


Author: timfox
Date: 2009-11-18 14:46:20 -0500 (Wed, 18 Nov 2009)
New Revision: 8314

Modified:
   branches/20-optimisation/examples/core/perf/src/org/hornetq/core/example/PerfBase.java
   branches/20-optimisation/src/main/org/hornetq/core/buffers/AbstractChannelBuffer.java
   branches/20-optimisation/src/main/org/hornetq/core/client/ClientMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/client/ClientSession.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientConsumerImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientConsumerInternal.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientMessageImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientMessageInternal.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientProducerCreditsImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientProducerImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionInternal.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionPacketHandler.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/DelegatingSession.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/FailoverManagerImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/client/impl/LargeMessageBufferImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/client/management/impl/ManagementHelper.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/TestableJournal.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AIOSequentialFile.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AbstractSequentialFactory.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AbstractSequentialFile.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/impl/JournalImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/impl/NIOSequentialFile.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/impl/SimpleWaitIOCallback.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/impl/SyncSpeedTest.java
   branches/20-optimisation/src/main/org/hornetq/core/journal/impl/TimedBuffer.java
   branches/20-optimisation/src/main/org/hornetq/core/management/impl/ManagementServiceImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/message/Message.java
   branches/20-optimisation/src/main/org/hornetq/core/message/impl/MessageImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/persistence/StorageManager.java
   branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/journal/FileLargeServerMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/journal/JournalStorageManager.java
   branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/nullpm/NullStorageLargeServerMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/nullpm/NullStorageManager.java
   branches/20-optimisation/src/main/org/hornetq/core/postoffice/impl/PostOfficeImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/Packet.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/AbstractBufferHandler.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/ChannelImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/PacketDecoder.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/RemotingConnectionImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateQueueMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateReplicationSessionMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateSessionMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateSessionResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/HornetQExceptionMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/NullResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/PacketImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/PacketsConfirmedMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/Ping.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReattachSessionMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReattachSessionResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationAddMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationAddTXMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationCommitMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationCompareDataMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationDeleteMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationDeleteTXMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargeMessageBeingMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargeMessageWriteMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargemessageEndMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPageEventMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPageWriteMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPrepareMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationSyncContextMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/RollbackMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionAcknowledgeMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionBindingQueryMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionBindingQueryResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionCloseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionConsumerCloseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionConsumerFlowCreditMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionContinuationMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionCreateConsumerMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionDeleteQueueMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionExpiredMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionForceConsumerDelivery.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionProducerCreditsMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionQueueQueryMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionQueueQueryResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionReceiveContinuationMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionReceiveMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionRequestProducerCreditsMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendContinuationMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendLargeMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXACommitMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAEndMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAForgetMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAGetInDoubtXidsResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAGetTimeoutResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAJoinMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAPrepareMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAResumeMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXARollbackMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXASetTimeoutMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXASetTimeoutResponseMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAStartMessage.java
   branches/20-optimisation/src/main/org/hornetq/core/remoting/spi/HornetQBuffer.java
   branches/20-optimisation/src/main/org/hornetq/core/server/RoutingContext.java
   branches/20-optimisation/src/main/org/hornetq/core/server/cluster/impl/RemoteQueueBindingImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/server/impl/HornetQServerImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/server/impl/QueueImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/server/impl/RoutingContextImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerConsumerImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerMessageImpl.java
   branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerSessionImpl.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/ChannelBufferWrapper.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HornetQChannelHandler.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HornetQFrameDecoder.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HttpAcceptorHandler.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HttpKeepAliveRunnable.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyAcceptor.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyAcceptorFactory.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnection.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnector.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnectorFactory.java
   branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/TransportConstants.java
   branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQBytesMessage.java
   branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMapMessage.java
   branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMessage.java
   branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMessageProducer.java
   branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQObjectMessage.java
   branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQStreamMessage.java
   branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQTextMessage.java
   branches/20-optimisation/src/main/org/hornetq/ra/inflow/HornetQMessageHandler.java
   branches/20-optimisation/src/main/org/hornetq/utils/SimpleString.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/EncodeSizeTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/String64KLimitTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/AddressSettingsTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerRoundRobinTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerWindowSizeTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/CoreClientTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/DeadLetterAddressTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/DeliveryOrderTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ExpiryAddressTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/HeuristicXATest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/JournalCrashTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/LargeMessageTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessageCounterTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessageGroupingTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessagePriorityTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/NewDeadLetterAddressTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/PagingTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ProducerFlowControlTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ProducerTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/QueueBrowserTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ReceiveImmediateTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/SelfExpandingBufferTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/WildCardRoutingTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/ClientCrashTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/ClientExitTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/CrashClient.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/GracefulClient.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/bridge/SimpleTransformer.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/AsynchronousFailoverTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/FailoverTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/LargeMessageFailoverTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/PagingFailoverTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/ReplicatedDistributionTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/reattach/MultiThreadRandomReattachTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/reattach/ReattachTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/http/CoreClientOverHttpTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/largemessage/LargeMessageTestBase.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/largemessage/ServerLargeMessageTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/management/AddressControlTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/management/ManagementServiceImplTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/paging/PageCrashTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/replication/ReplicationTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/scheduling/DelayedMessageTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/scheduling/ScheduledMessageTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/security/SimpleClient.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/ExpiryRunnerTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/LVQRecoveryTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/LVQTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/ssl/CoreClientOverSSL.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/BasicXaRecoveryTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/BasicXaTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/XaTimeoutTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/performance/paging/MeasurePagingMultiThreadTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/performance/persistence/StorageManagerTimingTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/CompactingStressTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/LargeJournalStressTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/MultiThreadConsumerStressTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/NIOMultiThreadCompactorStressTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/filter/impl/FilterTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/message/impl/MessageImplTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PageImplTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PagingManagerImplTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PagingStoreImplTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/postoffice/impl/BindingsImplTest.java
   branches/20-optimisation/tests/src/org/hornetq/tests/util/ServiceTestBase.java
   branches/20-optimisation/tests/src/org/hornetq/tests/util/UnitTestCase.java
Log:
optimisation

Modified: branches/20-optimisation/examples/core/perf/src/org/hornetq/core/example/PerfBase.java
===================================================================
--- branches/20-optimisation/examples/core/perf/src/org/hornetq/core/example/PerfBase.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/examples/core/perf/src/org/hornetq/core/example/PerfBase.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -355,7 +355,7 @@
 
       byte[] payload = randomByteArray(messageSize);
 
-      message.getBody().writeBytes(payload);
+      message.getBuffer().writeBytes(payload);
 
       final int modulo = 2000;
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/buffers/AbstractChannelBuffer.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/buffers/AbstractChannelBuffer.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/buffers/AbstractChannelBuffer.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -302,6 +302,13 @@
       readerIndex += 4;
       return v;
    }
+   
+   public int readInt(final int pos)
+   {
+      checkReadableBytes(4);
+      int v = getInt(pos);
+      return v;
+   }
 
    public long readUnsignedInt()
    {

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/ClientMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/ClientMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/ClientMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -13,10 +13,12 @@
 
 package org.hornetq.core.client;
 
+import java.io.InputStream;
 import java.io.OutputStream;
 
 import org.hornetq.core.exception.HornetQException;
 import org.hornetq.core.message.Message;
+import org.hornetq.core.remoting.spi.HornetQBuffer;
 
 /**
  * 
@@ -32,7 +34,17 @@
    
    void setDeliveryCount(int deliveryCount);
    
-  /** Sets the OutputStream that will receive the content of a message received in a non blocking way
+   void acknowledge() throws HornetQException;   
+   
+   void encodeToBuffer();
+   
+   void decode(HornetQBuffer buffer);
+   
+   
+   
+   //FIXME - the following are only used for large messages - they should be put somewhere else:
+   
+   /** Sets the OutputStream that will receive the content of a message received in a non blocking way
     * @throws HornetQException */
    void setOutputStream(OutputStream out) throws HornetQException;
    
@@ -46,6 +58,8 @@
     * @throws HornetQException
     */
    boolean waitOutputStreamCompletion(long timeMilliseconds) throws HornetQException;
-
-   void acknowledge() throws HornetQException;   
+   
+   void decodeHeadersAndProperties(HornetQBuffer buffer);
+      
+   void setBodyInputStream(InputStream bodyInputStream);
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/ClientSession.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/ClientSession.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/ClientSession.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -148,12 +148,6 @@
 
    ClientMessage createClientMessage(boolean durable);
 
-   ClientMessage createClientMessage(boolean durable, HornetQBuffer buffer);
-
-   HornetQBuffer createBuffer(byte[] bytes);
-
-   HornetQBuffer createBuffer(int size);
-
    void start() throws HornetQException;
 
    void stop() throws HornetQException;
@@ -164,5 +158,5 @@
 
    int getVersion();
 
-   void setSendAcknowledgementHandler(SendAcknowledgementHandler handler);
+   void setSendAcknowledgementHandler(SendAcknowledgementHandler handler);     
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientConsumerImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientConsumerImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientConsumerImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -28,7 +28,7 @@
 import org.hornetq.core.remoting.impl.wireformat.SessionConsumerCloseMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionConsumerFlowCreditMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveContinuationMessage;
-import org.hornetq.core.remoting.impl.wireformat.SessionReceiveMessage;
+import org.hornetq.core.remoting.impl.wireformat.SessionReceiveLargeMessage;
 import org.hornetq.utils.Future;
 import org.hornetq.utils.SimpleString;
 import org.hornetq.utils.TokenBucketLimiter;
@@ -473,7 +473,7 @@
       }
    }
 
-   public synchronized void handleLargeMessage(final SessionReceiveMessage packet) throws Exception
+   public synchronized void handleLargeMessage(final SessionReceiveLargeMessage packet) throws Exception
    {
       if (closing)
       {
@@ -482,10 +482,12 @@
       }
 
       // Flow control for the first packet, we will have others
-      // It's using the RequiredBufferSize as the getSize() could be different between transports
+      
       flowControl(packet.getRequiredBufferSize(), false);
 
-      ClientMessageInternal currentChunkMessage = new ClientMessageImpl(packet.getDeliveryCount());
+      ClientMessageInternal currentChunkMessage = new ClientMessageImpl();
+      
+      currentChunkMessage.setDeliveryCount(packet.getDeliveryCount());
 
       currentChunkMessage.decodeHeadersAndProperties(ChannelBuffers.wrappedBuffer(packet.getLargeMessageHeader()));
 
@@ -502,7 +504,7 @@
 
       currentLargeMessageBuffer = new LargeMessageBufferImpl(this, packet.getLargeMessageSize(), 60, largeMessageCache);
 
-      currentChunkMessage.setBody(currentLargeMessageBuffer);
+      currentChunkMessage.setBuffer(currentLargeMessageBuffer);
 
       currentChunkMessage.setFlowControlSize(0);
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientConsumerInternal.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientConsumerInternal.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientConsumerInternal.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -17,6 +17,7 @@
 import org.hornetq.core.client.ClientMessage;
 import org.hornetq.core.exception.HornetQException;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveContinuationMessage;
+import org.hornetq.core.remoting.impl.wireformat.SessionReceiveLargeMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveMessage;
 import org.hornetq.utils.SimpleString;
 
@@ -39,7 +40,7 @@
 
    void handleMessage(ClientMessageInternal message) throws Exception;
 
-   void handleLargeMessage(SessionReceiveMessage largeMessageHeader) throws Exception;
+   void handleLargeMessage(SessionReceiveLargeMessage largeMessageHeader) throws Exception;
    
    void handleLargeMessageContinuation(SessionReceiveContinuationMessage continuation) throws Exception;
    

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientMessageImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientMessageImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientMessageImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -14,15 +14,16 @@
 package org.hornetq.core.client.impl;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
-import java.nio.ByteBuffer;
 
-import org.hornetq.core.buffers.ChannelBuffers;
 import org.hornetq.core.client.LargeMessageBuffer;
 import org.hornetq.core.exception.HornetQException;
-import org.hornetq.core.message.BodyEncoder;
+import org.hornetq.core.logging.Logger;
 import org.hornetq.core.message.impl.MessageImpl;
+import org.hornetq.core.remoting.impl.wireformat.PacketImpl;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
+import org.hornetq.utils.DataConstants;
 import org.hornetq.utils.SimpleString;
 
 /**
@@ -35,6 +36,8 @@
  */
 public class ClientMessageImpl extends MessageImpl implements ClientMessageInternal
 {
+   private static final Logger log = Logger.getLogger(ClientMessageImpl.class);
+
    // added this constant here so that the client package have no dependency on JMS
    public static final SimpleString REPLYTO_HEADER_NAME = new SimpleString("JMSReplyTo");
 
@@ -46,49 +49,29 @@
 
    private int flowControlSize = -1;
 
+   /** Used on LargeMessages only */
+   private InputStream bodyInputStream;
+
    /*
-    * Constructor for when reading from network
+    * Constructor for when reading from remoting
     */
-   public ClientMessageImpl(final int deliveryCount)
+   public ClientMessageImpl()
    {
-      super();
-
-      this.deliveryCount = deliveryCount;
    }
 
    /*
     * Construct messages before sending
     */
-   public ClientMessageImpl(final byte type,
-                            final boolean durable,
-                            final long expiration,
-                            final long timestamp,
-                            final byte priority,
-                            final HornetQBuffer body)
+   ClientMessageImpl(final byte type,
+                     final boolean durable,
+                     final long expiration,
+                     final long timestamp,
+                     final byte priority,
+                     final HornetQBuffer body)
    {
       super(type, durable, expiration, timestamp, priority, body);
    }
 
-   public ClientMessageImpl(final byte type, final boolean durable, final HornetQBuffer body)
-   {
-      super(type, durable, 0, System.currentTimeMillis(), (byte)4, body);
-   }
-
-   public ClientMessageImpl(final boolean durable, final HornetQBuffer body)
-   {
-      super((byte)0, durable, 0, System.currentTimeMillis(), (byte)4, body);
-   }
-   
-   public ClientMessageImpl(final boolean durable, final byte[] bytes)
-   {
-      super((byte)0, durable, 0, System.currentTimeMillis(), (byte)4, ChannelBuffers.dynamicBuffer(bytes));
-   }
-   
-   public ClientMessageImpl(final boolean durable)
-   {
-      super((byte)0, durable, 0, System.currentTimeMillis(), (byte)4, ChannelBuffers.dynamicBuffer(1024));
-   }
-
    public void onReceipt(final ClientConsumerInternal consumer)
    {
       this.consumer = consumer;
@@ -112,17 +95,13 @@
       }
    }
    
-   public long getLargeBodySize()
-   {
-      if (largeMessage)
-      {
-         return ((LargeMessageBuffer)getBody()).getSize();
-      }
-      else
-      {
-         return this.getBodySize();
-      }
-   }
+//   @Override
+//   public void decode(final HornetQBuffer buffer)
+//   {
+//      decodeHeadersAndProperties(buffer);
+//
+//      this.buffer = buffer;
+//   }
 
    public int getFlowControlSize()
    {
@@ -154,15 +133,44 @@
       this.largeMessage = largeMessage;
    }
 
+   public void encodeToBuffer()
+   {
+      //We need to set a byte to work around a Netty bug with Dynamic buffers - this line can be removed
+      //when it's fixed in Netty
+      buffer.writeByte((byte)0);
+
+      //And we leave an extra byte where we store the body length (to be filled in later)
+      buffer.setIndex(0, PacketImpl.PACKET_HEADERS_SIZE + DataConstants.SIZE_INT);
+      
+      encodeHeadersAndProperties(buffer);
+   }
+
+   @Override
+   public String toString()
+   {
+      return "ClientMessage[messageID=" + messageID +
+             ", durable=" +
+             durable +
+             ", destination=" +
+             getDestination() +
+             "]";
+   }
+
    /* (non-Javadoc)
-    * @see org.hornetq.core.client.impl.ClientMessageInternal#discardLargeBody()
+    * @see org.hornetq.core.message.Message#getBodyEncoder()
     */
-   public void discardLargeBody()
+
+   // FIXME - only used for large messages - move it!
+   public long getLargeBodySize()
    {
       if (largeMessage)
       {
-         ((LargeMessageBuffer)getBody()).discardUnusedPackets();
+         return ((LargeMessageBuffer)getBuffer()).getSize();
       }
+      else
+      {
+         return this.getBodySize();
+      }
    }
 
    /* (non-Javadoc)
@@ -172,20 +180,20 @@
    {
       if (largeMessage)
       {
-         ((LargeMessageBufferImpl)this.getBody()).saveBuffer(out);
+         ((LargeMessageBufferImpl)this.getBuffer()).saveBuffer(out);
       }
       else
       {
          try
          {
-            out.write(this.getBody().array());
+            out.write(this.getBuffer().array());
          }
          catch (IOException e)
          {
             throw new HornetQException(HornetQException.LARGE_MESSAGE_ERROR_BODY, "Error saving the message body", e);
          }
       }
-      
+
    }
 
    /* (non-Javadoc)
@@ -195,13 +203,13 @@
    {
       if (largeMessage)
       {
-         ((LargeMessageBufferImpl)this.getBody()).setOutputStream(out);
+         ((LargeMessageBufferImpl)this.getBuffer()).setOutputStream(out);
       }
       else
       {
          saveToOutputStream(out);
       }
-      
+
    }
 
    /* (non-Javadoc)
@@ -211,27 +219,44 @@
    {
       if (largeMessage)
       {
-         return ((LargeMessageBufferImpl)this.getBody()).waitCompletion(timeMilliseconds);
+         return ((LargeMessageBufferImpl)this.getBuffer()).waitCompletion(timeMilliseconds);
       }
       else
       {
          return true;
       }
    }
-   
-   @Override
-   public String toString()
+
+   /* (non-Javadoc)
+    * @see org.hornetq.core.client.impl.ClientMessageInternal#discardLargeBody()
+    */
+   public void discardLargeBody()
    {
-      return "ClientMessage[messageID=" + messageID +
-             ", durable=" +
-             durable +
-             ", destination=" +
-             getDestination() +
-             "]";
+      if (largeMessage)
+      {
+         ((LargeMessageBuffer)getBuffer()).discardUnusedPackets();
+      }
    }
 
-   /* (non-Javadoc)
-    * @see org.hornetq.core.message.Message#getBodyEncoder()
+   public void setBuffer(final HornetQBuffer buffer)
+   {
+      this.buffer = buffer;
+   }
+
+   /**
+    * @return the bodyInputStream
     */
-   
+   public InputStream getBodyInputStream()
+   {
+      return bodyInputStream;
+   }
+
+   /**
+    * @param bodyInputStream the bodyInputStream to set
+    */
+   public void setBodyInputStream(final InputStream bodyInputStream)
+   {
+      this.bodyInputStream = bodyInputStream;
+   }
+
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientMessageInternal.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientMessageInternal.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientMessageInternal.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -14,6 +14,7 @@
 package org.hornetq.core.client.impl;
 
 import org.hornetq.core.client.ClientMessage;
+import org.hornetq.core.remoting.spi.HornetQBuffer;
 
 /**
  * A ClientMessageInternal
@@ -40,4 +41,7 @@
     * Discard unused packets (used on large-message)
     */
    void discardLargeBody();    
+   
+
+   void setBuffer(HornetQBuffer buffer);
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientProducerCreditsImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientProducerCreditsImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientProducerCreditsImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -38,7 +38,7 @@
    private final ClientSessionInternal session;
 
    private int arriving;
-   
+
    private int offset;
 
    public ClientProducerCreditsImpl(final ClientSessionInternal session,
@@ -62,50 +62,63 @@
 
    public void acquireCredits(int credits) throws InterruptedException
    {
-     // credits += offset;
-      
+      // credits += offset;
+
       checkCredits(credits);
 
+      log.info("trying to acquire " + credits);
+      
       semaphore.acquire(credits);
    }
 
-   public synchronized void receiveCredits(final int credits, final int offset)
+   public void receiveCredits(final int credits, final int offset)
    {
-      arriving -= credits;
-      
-      this.offset = offset;
+      synchronized (this)
+      {
+         arriving -= credits;
 
+         this.offset = offset;
+      }
+
       semaphore.release(credits);
    }
 
    public synchronized void reset()
    {
-      //Any arriving credits from before failover won't arrive, so we re-initialise
-      
+      // Any arriving credits from before failover won't arrive, so we re-initialise
+
       semaphore.drainPermits();
-      
+
       arriving = 0;
-      
+
       checkCredits(windowSize * 2);
    }
 
    public void close()
    {
-      //Closing a producer that is blocking should make it return
-      
+      // Closing a producer that is blocking should make it return
+
       semaphore.release(Integer.MAX_VALUE / 2);
    }
 
-   private synchronized void checkCredits(final int credits)
+   private void checkCredits(final int credits)
    {
       int needed = Math.max(credits, windowSize);
-      
-      if (semaphore.availablePermits() + arriving < needed)
+
+      int toRequest = -1;
+
+      synchronized (this)
       {
-         int toRequest = needed - arriving;
+         if (semaphore.availablePermits() + arriving < needed)
+         {
+            toRequest = needed - arriving;
 
-         arriving += toRequest;
+            arriving += toRequest;
+         }
+      }
 
+      if (toRequest != -1)
+      {
          requestCredits(toRequest);
       }
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientProducerImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientProducerImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientProducerImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -237,8 +237,10 @@
       session.workDone();
 
       boolean isLarge;
+      
+      int encodeSize = msg.getEncodeSize();
 
-      if (msg.getBodyInputStream() != null || msg.getEncodeSize() >= minLargeMessageSize || msg.isLargeMessage())
+      if (msg.getBodyInputStream() != null || encodeSize >= minLargeMessageSize || msg.isLargeMessage())
       {
          isLarge = true;
       }
@@ -270,7 +272,7 @@
 
          if (!isLarge)
          {
-            theCredits.acquireCredits(msg.getEncodeSize());
+            theCredits.acquireCredits(encodeSize);
          }
       }
       catch (InterruptedException e)
@@ -303,9 +305,9 @@
       }
 
       // msg.getBody() could be Null on LargeServerMessage
-      if (msg.getBodyInputStream() == null && msg.getBody() != null)
+      if (msg.getBodyInputStream() == null && msg.getBuffer() != null)
       {
-         msg.getBody().readerIndex(0);
+         msg.getBuffer().readerIndex(0);
       }
 
       HornetQBuffer headerBuffer = ChannelBuffers.buffer(headerSize);

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -26,7 +26,6 @@
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
 
-import org.hornetq.core.buffers.ChannelBuffers;
 import org.hornetq.core.client.ClientConsumer;
 import org.hornetq.core.client.ClientMessage;
 import org.hornetq.core.client.ClientProducer;
@@ -57,6 +56,7 @@
 import org.hornetq.core.remoting.impl.wireformat.SessionQueueQueryMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionQueueQueryResponseMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveContinuationMessage;
+import org.hornetq.core.remoting.impl.wireformat.SessionReceiveLargeMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionRequestProducerCreditsMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionSendMessage;
@@ -105,7 +105,7 @@
 
    private final boolean trace = log.isTraceEnabled();
 
-   public static final int INITIAL_MESSAGE_BODY_SIZE = 1024;
+   public static final int INITIAL_MESSAGE_BUFFER_SIZE = 1500;
 
    // Attributes ----------------------------------------------------------------------------
 
@@ -149,7 +149,7 @@
    private final int confirmationWindowSize;
 
    private final int producerMaxRate;
-   
+
    private final int producerWindowSize;
 
    private final boolean blockOnNonPersistentSend;
@@ -194,7 +194,7 @@
                             final int ackBatchSize,
                             final int consumerWindowSize,
                             final int consumerMaxRate,
-                            final int confirmationWindowSize,                            
+                            final int confirmationWindowSize,
                             final int producerWindowSize,
                             final int producerMaxRate,
                             final boolean blockOnNonPersistentSend,
@@ -243,7 +243,7 @@
       this.confirmationWindowSize = confirmationWindowSize;
 
       this.producerWindowSize = producerWindowSize;
-      
+
       this.producerMaxRate = producerMaxRate;
 
       this.blockOnNonPersistentSend = blockOnNonPersistentSend;
@@ -365,7 +365,7 @@
 
    public void createQueue(final String address, final String queueName) throws HornetQException
    {
-      internalCreateQueue(toSimpleString(address), toSimpleString(queueName), null, false, false);
+      internalCreateQueue(toSimpleString(address), toSimpleString(queueName), null, true, false);
    }
 
    public ClientConsumer createConsumer(final String queueName, final String filterString) throws HornetQException
@@ -488,7 +488,7 @@
    {
       return rollbackOnly;
    }
-   
+
    public void rollback() throws HornetQException
    {
       rollback(false);
@@ -525,7 +525,7 @@
       {
          start();
       }
-      
+
       rollbackOnly = false;
    }
 
@@ -535,39 +535,20 @@
                                             final long timestamp,
                                             final byte priority)
    {
-      HornetQBuffer body = createBuffer(INITIAL_MESSAGE_BODY_SIZE);
+      HornetQBuffer body = remotingConnection.createBuffer(INITIAL_MESSAGE_BUFFER_SIZE);
 
       return new ClientMessageImpl(type, durable, expiration, timestamp, priority, body);
    }
 
    public ClientMessage createClientMessage(final byte type, final boolean durable)
    {
-      HornetQBuffer body = remotingConnection.createBuffer(INITIAL_MESSAGE_BODY_SIZE);
-
-      return new ClientMessageImpl(type, durable, body);
+      return this.createClientMessage(type, durable, 0, System.currentTimeMillis(), (byte)4);
    }
 
    public ClientMessage createClientMessage(final boolean durable)
    {
-      HornetQBuffer body = createBuffer(INITIAL_MESSAGE_BODY_SIZE);
-
-      return new ClientMessageImpl(durable, body);
+      return this.createClientMessage((byte)0, durable);
    }
-   
-   public ClientMessage createClientMessage(final boolean durable, final HornetQBuffer buffer)
-   {
-      return new ClientMessageImpl(durable, buffer);
-   }
-   
-   public HornetQBuffer createBuffer(final int size)
-   {
-      return ChannelBuffers.dynamicBuffer(size);
-   }
-   
-   public HornetQBuffer createBuffer(final byte[] bytes)
-   {
-      return ChannelBuffers.dynamicBuffer(bytes);
-   }
 
    public boolean isClosed()
    {
@@ -739,7 +720,7 @@
       }
    }
 
-   public void handleReceiveLargeMessage(final long consumerID, final SessionReceiveMessage message) throws Exception
+   public void handleReceiveLargeMessage(final long consumerID, final SessionReceiveLargeMessage message) throws Exception
    {
       ClientConsumerInternal consumer = consumers.get(consumerID);
 
@@ -773,7 +754,7 @@
       try
       {
          producerCreditManager.close();
-         
+
          closeChildren();
 
          channel.sendBlocking(new SessionCloseMessage());
@@ -792,9 +773,9 @@
       {
          return;
       }
-      
+
       producerCreditManager.close();
-      
+
       cleanUpChildren();
 
       doCleanup();
@@ -817,7 +798,7 @@
       }
 
       boolean resetCreditManager = false;
-      
+
       // We lock the channel to prevent any packets to be added to the resend
       // cache during the failover process
       channel.lock();
@@ -862,7 +843,7 @@
                                                             confirmationWindowSize);
 
             channel1.sendBlocking(createRequest);
-            
+
             channel.clearCommands();
 
             for (Map.Entry<Long, ClientConsumerInternal> entry : consumers.entrySet())
@@ -880,10 +861,8 @@
 
                Connection conn = channel.getConnection().getTransportConnection();
 
-               HornetQBuffer buffer = conn.createBuffer(createConsumerRequest.getRequiredBufferSize());
+               HornetQBuffer buffer = createConsumerRequest.encode(channel.getConnection());
 
-               createConsumerRequest.encode(buffer);
-
                conn.write(buffer, false);
 
                int clientWindowSize = calcWindowSize(entry.getValue().getClientWindowSize());
@@ -895,10 +874,8 @@
 
                   packet.setChannelID(channel.getID());
 
-                  buffer = conn.createBuffer(packet.getRequiredBufferSize());
+                  buffer = packet.encode(channel.getConnection());
 
-                  packet.encode(buffer);
-
                   conn.write(buffer, false);
                }
             }
@@ -925,17 +902,15 @@
 
                Connection conn = channel.getConnection().getTransportConnection();
 
-               HornetQBuffer buffer = conn.createBuffer(packet.getRequiredBufferSize());
+               HornetQBuffer buffer = packet.encode(channel.getConnection());
 
-               packet.encode(buffer);
-
                conn.write(buffer, false);
             }
 
             resetCreditManager = true;
-            
+
             channel.returnBlocking();
-         }                 
+         }
       }
       catch (Throwable t)
       {
@@ -945,10 +920,10 @@
       {
          channel.unlock();
       }
-      
+
       if (resetCreditManager)
       {
-         producerCreditManager.reset();        
+         producerCreditManager.reset();
       }
    }
 
@@ -971,12 +946,12 @@
    {
       channel.send(new SessionRequestProducerCreditsMessage(credits, destination));
    }
-   
+
    public ClientProducerCredits getCredits(final SimpleString address)
    {
       return producerCreditManager.getCredits(address);
    }
-   
+
    public void handleReceiveProducerCredits(final SimpleString address, final int credits, final int offset)
    {
       producerCreditManager.receiveCredits(address, credits, offset);
@@ -1297,7 +1272,7 @@
    // FailureListener implementation --------------------------------------------
 
    public void connectionFailed(final HornetQException me)
-   {      
+   {
       try
       {
          cleanUp();
@@ -1329,7 +1304,7 @@
 
    // Private
    // ----------------------------------------------------------------------------
-     
+
    private int calcWindowSize(final int windowSize)
    {
       int clientWindowSize;
@@ -1427,7 +1402,7 @@
                                                  final boolean blockOnPersistentSend) throws HornetQException
    {
       checkClosed();
-      
+
       ClientProducerInternal producer = new ClientProducerImpl(this,
                                                                address,
                                                                maxRate == -1 ? null
@@ -1479,7 +1454,7 @@
    }
 
    private void doCleanup()
-   {      
+   {
       remotingConnection.removeFailureListener(this);
 
       synchronized (this)
@@ -1489,7 +1464,7 @@
          channel.close();
       }
 
-      failoverManager.removeSession(this);      
+      failoverManager.removeSession(this);
    }
 
    private void cleanUpChildren() throws Exception

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionInternal.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionInternal.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionInternal.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -17,6 +17,7 @@
 import org.hornetq.core.exception.HornetQException;
 import org.hornetq.core.remoting.RemotingConnection;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveContinuationMessage;
+import org.hornetq.core.remoting.impl.wireformat.SessionReceiveLargeMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveMessage;
 import org.hornetq.utils.SimpleString;
 
@@ -47,7 +48,7 @@
 
    void handleReceiveMessage(long consumerID, SessionReceiveMessage message) throws Exception;
 
-   void handleReceiveLargeMessage(long consumerID, SessionReceiveMessage message) throws Exception;
+   void handleReceiveLargeMessage(long consumerID, SessionReceiveLargeMessage message) throws Exception;
 
    void handleReceiveContinuation(long consumerID, SessionReceiveContinuationMessage continuation) throws Exception;
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionPacketHandler.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionPacketHandler.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/ClientSessionPacketHandler.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -15,6 +15,7 @@
 
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.EXCEPTION;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_RECEIVE_CONTINUATION;
+import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_RECEIVE_LARGE_MSG;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_RECEIVE_MSG;
 
 import org.hornetq.core.logging.Logger;
@@ -25,6 +26,7 @@
 import org.hornetq.core.remoting.impl.wireformat.PacketImpl;
 import org.hornetq.core.remoting.impl.wireformat.SessionProducerCreditsMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveContinuationMessage;
+import org.hornetq.core.remoting.impl.wireformat.SessionReceiveLargeMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveMessage;
 
 /**
@@ -69,17 +71,18 @@
             {
                SessionReceiveMessage message = (SessionReceiveMessage) packet;
                
-               if (message.isLargeMessage())
-               {
-                  clientSession.handleReceiveLargeMessage(message.getConsumerID(), message);
-               }
-               else
-               {
-                  clientSession.handleReceiveMessage(message.getConsumerID(), message);
-               }
+               clientSession.handleReceiveMessage(message.getConsumerID(), message);               
                
                break;
             }
+            case SESS_RECEIVE_LARGE_MSG:
+            {
+               SessionReceiveLargeMessage message = (SessionReceiveLargeMessage) packet;
+               
+               clientSession.handleReceiveLargeMessage(message.getConsumerID(), message);
+                              
+               break;
+            }
             case PacketImpl.SESS_PRODUCER_CREDITS:
             {
                SessionProducerCreditsMessage message = (SessionProducerCreditsMessage)packet;

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/DelegatingSession.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/DelegatingSession.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/DelegatingSession.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -30,6 +30,7 @@
 import org.hornetq.core.remoting.impl.wireformat.SessionBindingQueryResponseMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionQueueQueryResponseMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveContinuationMessage;
+import org.hornetq.core.remoting.impl.wireformat.SessionReceiveLargeMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveMessage;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
 import org.hornetq.utils.ConcurrentHashSet;
@@ -46,27 +47,27 @@
  *
  */
 public class DelegatingSession implements ClientSessionInternal
-{   
+{
    private static final Logger log = Logger.getLogger(DelegatingSession.class);
 
    private final ClientSessionInternal session;
 
    private Exception creationStack;
-   
+
    private static Set<DelegatingSession> sessions = new ConcurrentHashSet<DelegatingSession>();
 
    public static volatile boolean debug;
-   
+
    public static void dumpSessionCreationStacks()
    {
       log.info("**** Dumping session creation stacks ****");
-      
-      for (DelegatingSession session: sessions)
+
+      for (DelegatingSession session : sessions)
       {
          log.info("session created", session.creationStack);
       }
    }
-   
+
    @Override
    protected void finalize() throws Throwable
    {
@@ -87,7 +88,7 @@
       this.session = session;
 
       this.creationStack = new Exception();
-      
+
       if (debug)
       {
          sessions.add(this);
@@ -123,7 +124,7 @@
    {
       session.forceDelivery(consumerID, sequence);
    }
-   
+
    public void cleanUp() throws Exception
    {
       session.cleanUp();
@@ -135,7 +136,7 @@
       {
          sessions.remove(this);
       }
-      
+
       session.close();
    }
 
@@ -163,23 +164,7 @@
    {
       return session.createClientMessage(type, durable);
    }
-   
-   public ClientMessage createClientMessage(boolean durable, HornetQBuffer buffer)
-   {
-      return session.createClientMessage(durable, buffer);
-   }    
-   
-   public HornetQBuffer createBuffer(byte[] bytes)
-   {
-      return session.createBuffer(bytes);
-   }
 
-   public HornetQBuffer createBuffer(int size)
-   {
-      return session.createBuffer(size);
-   }
-
-
    public ClientConsumer createConsumer(SimpleString queueName, SimpleString filterString, boolean browseOnly) throws HornetQException
    {
       return session.createConsumer(queueName, filterString, browseOnly);
@@ -227,7 +212,7 @@
    {
       return session.createConsumer(queueName);
    }
-   
+
    public ClientConsumer createConsumer(SimpleString queueName, boolean browseOnly) throws HornetQException
    {
       return session.createConsumer(queueName, browseOnly);
@@ -283,7 +268,7 @@
    {
       session.createQueue(address, queueName);
    }
-   
+
    public void createQueue(SimpleString address, SimpleString queueName, boolean durable) throws HornetQException
    {
       session.createQueue(address, queueName, durable);
@@ -383,13 +368,13 @@
    {
       session.handleFailover(backupConnection);
    }
-   
+
    public void handleReceiveContinuation(long consumerID, SessionReceiveContinuationMessage continuation) throws Exception
    {
       session.handleReceiveContinuation(consumerID, continuation);
    }
 
-   public void handleReceiveLargeMessage(long consumerID, SessionReceiveMessage message) throws Exception
+   public void handleReceiveLargeMessage(long consumerID, SessionReceiveLargeMessage message) throws Exception
    {
       session.handleReceiveLargeMessage(consumerID, message);
    }
@@ -473,7 +458,7 @@
    {
       session.rollback();
    }
-   
+
    public boolean isRollbackOnly()
    {
       return session.isRollbackOnly();
@@ -523,7 +508,7 @@
    {
       session.setForceNotSameRM(force);
    }
-   
+
    public void workDone()
    {
       session.workDone();
@@ -542,5 +527,5 @@
    public void handleReceiveProducerCredits(SimpleString address, int credits, int offset)
    {
       session.handleReceiveProducerCredits(address, credits, offset);
-   }  
+   }
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/FailoverManagerImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/FailoverManagerImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/FailoverManagerImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -1013,6 +1013,7 @@
       public void bufferReceived(final Object connectionID, final HornetQBuffer buffer)
       {
          RemotingConnection theConn = connection;
+         
          if (theConn != null && connectionID == theConn.getID())
          {
             theConn.bufferReceived(connectionID, buffer);

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/impl/LargeMessageBufferImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/impl/LargeMessageBufferImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/impl/LargeMessageBufferImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -835,7 +835,13 @@
       readerIndex += 4;
       return v;
    }
-
+   
+   public int readInt(final int pos)
+   {
+      int v = getInt(pos);
+      return v;
+   }
+   
    public long readUnsignedInt()
    {
       return readInt() & 0xFFFFFFFFL;

Modified: branches/20-optimisation/src/main/org/hornetq/core/client/management/impl/ManagementHelper.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/client/management/impl/ManagementHelper.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/client/management/impl/ManagementHelper.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -118,7 +118,7 @@
          paramString = null;
       }
 
-      message.getBody().writeNullableString(paramString);
+      message.getBuffer().writeNullableString(paramString);
    }
 
    private static JSONArray toJSONArray(final Object[] array) throws Exception
@@ -273,7 +273,7 @@
 
    public static Object[] retrieveOperationParameters(final Message message) throws Exception
    {
-      String jsonString = message.getBody().readNullableString();
+      String jsonString = message.getBuffer().readNullableString();
 
       if (jsonString != null)
       {
@@ -314,12 +314,12 @@
          resultString = null;
       }
 
-      message.getBody().writeNullableString(resultString);
+      message.getBuffer().writeNullableString(resultString);
    }
 
    public static Object[] getResults(final Message message) throws Exception
    {
-      String jsonString = message.getBody().readNullableString();
+      String jsonString = message.getBuffer().readNullableString();
       
       if (jsonString != null)
       {

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/TestableJournal.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/TestableJournal.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/TestableJournal.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -58,9 +58,6 @@
    /** This method is called automatically when a new file is opened.
     * @return true if it needs to re-check due to cleanup or other factors  */
    boolean checkReclaimStatus() throws Exception;
-
    
-   JournalFile[] getDataFiles();
-   
-
+   JournalFile[] getDataFiles();   
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AIOSequentialFile.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AIOSequentialFile.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AIOSequentialFile.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -229,7 +229,7 @@
 
    public int read(final ByteBuffer bytes) throws Exception
    {
-      IOCompletion waitCompletion = SimpleWaitIOCallback.getInstance();
+      IOCompletion waitCompletion = new SimpleWaitIOCallback();
 
       int bytesRead = read(bytes, waitCompletion);
 
@@ -281,7 +281,7 @@
    {
       if (sync)
       {
-         IOCompletion completion = SimpleWaitIOCallback.getInstance();
+         IOCompletion completion = new SimpleWaitIOCallback();
   
          writeDirect(bytes, true, completion);
   

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AbstractSequentialFactory.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AbstractSequentialFactory.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AbstractSequentialFactory.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -44,7 +44,6 @@
 
    protected final long bufferTimeout;
 
-
    public AbstractSequentialFactory(final String journalDir,
                                     final boolean buffered,
                                     final int bufferSize,
@@ -53,6 +52,7 @@
                                     final boolean logRates)
    {
       this.journalDir = journalDir;
+      log.info("** buffered?" + buffered);
       if (buffered)
       {
          timedBuffer = new TimedBuffer(bufferSize, bufferTimeout, flushOnSync, logRates);
@@ -117,7 +117,6 @@
       }
    }
 
-
    public void releaseBuffer(ByteBuffer buffer)
    {
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AbstractSequentialFile.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AbstractSequentialFile.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/impl/AbstractSequentialFile.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -178,7 +178,7 @@
    {
       if (sync)
       {
-         IOCompletion completion = SimpleWaitIOCallback.getInstance();
+         IOCompletion completion = new SimpleWaitIOCallback();
 
          write(bytes, true, completion);
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/impl/JournalImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/impl/JournalImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/impl/JournalImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -894,7 +894,8 @@
       appendUpdateRecord(id, recordType, new ByteArrayEncoding(record), sync);
    }
 
-   public void appendUpdateRecord(final long id, final byte recordType, final EncodingSupport record, final boolean sync) throws Exception
+   public void appendUpdateRecord(final long id, final byte recordType, final EncodingSupport record, final boolean sync
+                                  ) throws Exception
    {
       if (state != STATE_LOADED)
       {
@@ -907,7 +908,6 @@
 
       try
       {
-
          JournalRecord jrnRecord = records.get(id);
 
          if (jrnRecord == null)
@@ -925,6 +925,8 @@
          writeUpdateRecord(-1, id, recordType, record, size, bb);
 
          callback = getSyncCallback(sync);
+         
+        // log.info("callback is " + callback);
 
          lockAppend.lock();
          try
@@ -955,6 +957,7 @@
       if (callback != null)
       {
          callback.waitCompletion();
+        // log.info("waited completion");
       }
    }
 
@@ -1393,8 +1396,8 @@
     * @see JournalImpl#load(LoaderCallback)
     */
    public synchronized JournalLoadInformation load(final List<RecordInfo> committedRecords,
-                                               final List<PreparedTransactionInfo> preparedTransactions,
-                                               final TransactionFailureCallback failureCallback) throws Exception
+                                                   final List<PreparedTransactionInfo> preparedTransactions,
+                                                   final TransactionFailureCallback failureCallback) throws Exception
    {
       final Set<Long> recordsToDelete = new HashSet<Long>();
       final List<RecordInfo> records = new ArrayList<RecordInfo>();
@@ -2570,7 +2573,7 @@
          {
             file.getFile().close();
          }
-         
+
          fileFactory.stop();
 
          currentFile = null;
@@ -2776,7 +2779,6 @@
 
    private List<JournalFile> orderFiles() throws Exception
    {
-
       List<String> fileNames = fileFactory.listFiles(fileExtension);
 
       List<JournalFile> orderedFiles = new ArrayList<JournalFile>(fileNames.size());
@@ -2856,7 +2858,9 @@
          if (!currentFile.getFile().fits(size))
          {
             currentFile.getFile().enableAutoFlush();
+
             moveNextFile(false);
+
             currentFile.getFile().disableAutoFlush();
 
             // The same check needs to be done at the new file also
@@ -3239,7 +3243,7 @@
       {
          if (sync)
          {
-            return SimpleWaitIOCallback.getInstance();
+            return new SimpleWaitIOCallback();
          }
          else
          {
@@ -3507,7 +3511,7 @@
       private PerfBlast(final int pages)
       {
          super("hornetq-perfblast-thread");
-         
+
          this.pages = pages;
       }
 
@@ -3517,11 +3521,11 @@
          {
             lockAppend.lock();
 
-            HornetQBuffer bb = newBuffer(128 * 1024);
+            HornetQBuffer bb = newBuffer(490 * 1024);
 
             for (int i = 0; i < pages; i++)
             {
-               appendRecord(bb, false, false, null, null);
+               appendRecord(bb, false, true, null, null);
             }
 
             lockAppend.unlock();

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/impl/NIOSequentialFile.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/impl/NIOSequentialFile.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/impl/NIOSequentialFile.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -18,6 +18,7 @@
 import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.hornetq.core.journal.IOCompletion;
 import org.hornetq.core.journal.SequentialFile;
@@ -159,12 +160,16 @@
       }
 
    }
+   
+   public static AtomicInteger numSyncs = new AtomicInteger(0);
 
    public void sync() throws Exception
    {
       if (channel != null)
       {
          channel.force(false);
+         
+         numSyncs.incrementAndGet();
       }
    }
 
@@ -228,6 +233,8 @@
     */
    private void internalWrite(final ByteBuffer bytes, final boolean sync, final IOCompletion callback) throws Exception
    {
+      //log.info("writing " + bytes.limit() + " bytes");
+      
       position.addAndGet(bytes.limit());
 
       channel.write(bytes);

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/impl/SimpleWaitIOCallback.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/impl/SimpleWaitIOCallback.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/impl/SimpleWaitIOCallback.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -28,7 +28,6 @@
  */
 public class SimpleWaitIOCallback implements IOCompletion
 {
-
    private static final Logger log = Logger.getLogger(SimpleWaitIOCallback.class);
 
    private final CountDownLatch latch = new CountDownLatch(1);
@@ -36,16 +35,10 @@
    private volatile String errorMessage;
 
    private volatile int errorCode = 0;
-
-   public static IOCompletion getInstance()
-   {
-      return new SimpleWaitIOCallback();
-   }
-
-
+   
    public void done()
-   {
-      latch.countDown();
+   {     
+      latch.countDown();      
    }
 
    public void onError(final int errorCode, final String errorMessage)
@@ -62,6 +55,7 @@
    public void waitCompletion() throws Exception
    {
       latch.await();
+      
       if (errorMessage != null)
       {
          throw new HornetQException(errorCode, errorMessage);

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/impl/SyncSpeedTest.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/impl/SyncSpeedTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/impl/SyncSpeedTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -51,7 +51,7 @@
    {
       int fileSize = 1024 * 1024 * 100;
       
-      int recordSize = 10 * 1024;
+      int recordSize = 1024;
       
       int its = 10 * 1024;
       

Modified: branches/20-optimisation/src/main/org/hornetq/core/journal/impl/TimedBuffer.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/journal/impl/TimedBuffer.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/journal/impl/TimedBuffer.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -80,6 +80,8 @@
 
    private volatile long bytesFlushed;
 
+   private volatile long flushesDone;
+
    private Timer logRatesTimer;
 
    private TimerTask logRatesTimerTask;
@@ -94,7 +96,8 @@
 
    public TimedBuffer(final int size, final long timeout, final boolean flushOnSync, final boolean logRates)
    {
-      bufferSize = size;
+      log.info("creating timed buffer, log rates is " + logRates);
+      bufferSize = 490 * 1024;
       this.logRates = logRates;
       if (logRates)
       {
@@ -227,6 +230,8 @@
 
    public synchronized void addBytes(final byte[] bytes, final boolean sync, final IOCompletion callback)
    {
+     //  log.info("timedbuffer addbytes, " + bytes.length + " sync " + sync);
+
       if (buffer.writerIndex() == 0)
       {
          // Resume latch
@@ -248,12 +253,17 @@
 
          if (flushOnSync)
          {
+            log.info("flushing on sync record added");
+
             flush();
          }
       }
+      
+      //log.info("buffer writer index is now " + buffer.writerIndex());
 
       if (buffer.writerIndex() == bufferLimit)
       {
+         log.info("flushing because reached buffer limit");
          flush();
       }
    }
@@ -262,6 +272,8 @@
    {
       if (buffer.writerIndex() > 0)
       {
+         //log.info("actually flushing");
+         
          latchTimer.up();
 
          int pos = buffer.writerIndex();
@@ -269,6 +281,8 @@
          if (logRates)
          {
             bytesFlushed += pos;
+
+            flushesDone++;
          }
 
          ByteBuffer directBuffer = bufferObserver.newBuffer(bufferSize, pos);
@@ -307,7 +321,8 @@
          {
             if (bufferObserver != null)
             {
-               flush();
+                //log.info("flushing on timer");
+                flush();
             }
          }
          finally
@@ -337,11 +352,20 @@
             {
                double rate = 1000 * ((double)bytesFlushed) / (now - lastExecution);
                log.info("Write rate = " + rate + " bytes / sec or " + (long)(rate / (1024 * 1024)) + " MiB / sec");
+               double flushRate = 1000 * ((double)flushesDone) / (now - lastExecution);
+               double numSyncs = 1000 * ((double)NIOSequentialFile.numSyncs.get()) / (now - lastExecution);
+               log.info("Flush rate = " + flushRate + " flushes / sec");
+               log.info("numSyncs " + numSyncs);
             }
 
             lastExecution = now;
 
             bytesFlushed = 0;
+
+            flushesDone = 0;
+
+            NIOSequentialFile.numSyncs.set(0);
+
          }
       }
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/management/impl/ManagementServiceImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/management/impl/ManagementServiceImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/management/impl/ManagementServiceImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -144,8 +144,7 @@
 
    // Constructor ----------------------------------------------------
 
-   public ManagementServiceImpl(final MBeanServer mbeanServer,
-                                final Configuration configuration)
+   public ManagementServiceImpl(final MBeanServer mbeanServer, final Configuration configuration)
    {
       this.mbeanServer = mbeanServer;
       this.jmxManagementEnabled = configuration.isJMXManagementEnabled();
@@ -172,7 +171,7 @@
    {
       return objectNameBuilder;
    }
-   
+
    public MessageCounterManager getMessageCounterManager()
    {
       return messageCounterManager;
@@ -188,7 +187,7 @@
                                                   final HornetQServer messagingServer,
                                                   final QueueFactory queueFactory,
                                                   final ScheduledExecutorService scheduledThreadPool,
-                                                  final PagingManager pagingManager, 
+                                                  final PagingManager pagingManager,
                                                   final boolean backup) throws Exception
    {
       this.postOffice = postOffice;
@@ -412,8 +411,7 @@
    public ServerMessage handleMessage(final ServerMessage message) throws Exception
    {
       // a reply message is sent with the result stored in the message body.
-      ServerMessageImpl reply = new ServerMessageImpl(storageManager.generateUniqueID());
-      reply.setBody(ChannelBuffers.dynamicBuffer(1024));
+      ServerMessage reply = new ServerMessageImpl(storageManager.generateUniqueID(), ChannelBuffers.dynamicBuffer(1500));
 
       String resourceName = message.getStringProperty(ManagementHelper.HDR_RESOURCE_NAME);
       if (log.isDebugEnabled())
@@ -491,7 +489,7 @@
    {
       return registry.get(resourceName);
    }
-   
+
    public Object[] getResources(Class<?> resourceType)
    {
       List<Object> resources = new ArrayList<Object>();
@@ -624,7 +622,8 @@
             if (!unexpectedResourceNames.isEmpty())
             {
                log.warn("On ManagementService stop, there are " + unexpectedResourceNames.size() +
-                        " unexpected registered MBeans: " + unexpectedResourceNames);
+                        " unexpected registered MBeans: " +
+                        unexpectedResourceNames);
             }
 
             for (ObjectName on : this.registeredNames)
@@ -695,15 +694,14 @@
                }
 
                // start sending notification *messages* only when the *remoting service* if started
-               if (messagingServer == null || 
-                   !messagingServer.getRemotingService().isStarted())
+               if (messagingServer == null || !messagingServer.getRemotingService().isStarted())
                {
                   return;
                }
 
-               ServerMessage notificationMessage = new ServerMessageImpl(storageManager.generateUniqueID());
+               ServerMessage notificationMessage = new ServerMessageImpl(storageManager.generateUniqueID(),
+                                                                         ChannelBuffers.EMPTY_BUFFER);
 
-               notificationMessage.setBody(ChannelBuffers.EMPTY_BUFFER);
                // Notification messages are always durable so the user can choose whether to add a durable queue to
                // consume
                // them in
@@ -721,18 +719,19 @@
                }
 
                notifProps.putSimpleStringProperty(ManagementHelper.HDR_NOTIFICATION_TYPE,
-                                            new SimpleString(notification.getType().toString()));
+                                                  new SimpleString(notification.getType().toString()));
 
                notifProps.putLongProperty(ManagementHelper.HDR_NOTIFICATION_TIMESTAMP, System.currentTimeMillis());
 
                if (notification.getUID() != null)
                {
-                  notifProps.putSimpleStringProperty(new SimpleString("foobar"), new SimpleString(notification.getUID()));
+                  notifProps.putSimpleStringProperty(new SimpleString("foobar"),
+                                                     new SimpleString(notification.getUID()));
                }
 
                notificationMessage.putTypedProperties(notifProps);
 
-               postOffice.route(notificationMessage);
+               postOffice.route(notificationMessage, null);
             }
          }
       }

Modified: branches/20-optimisation/src/main/org/hornetq/core/message/Message.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/message/Message.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/message/Message.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -63,35 +63,8 @@
 
    int getEncodeSize();
 
-   void encode(HornetQBuffer buffer);
-
-   void decode(HornetQBuffer buffer);
-
-   int getHeadersAndPropertiesEncodeSize();
-
-   void encodeHeadersAndProperties(HornetQBuffer buffer);
-
-   void decodeHeadersAndProperties(HornetQBuffer buffer);
-
-   int getBodySize();
-
    boolean isLargeMessage();
 
-   long getLargeBodySize();
-   
-   /** Used to encode Body over the wire when using large messages */
-   BodyEncoder getBodyEncoder();
-
-   /** Set the InputStream used on a message that will be sent over a producer */
-   void setBodyInputStream(InputStream stream);
-
-   /** Get the InputStream used on a message that will be sent over a producer */
-   InputStream getBodyInputStream();
-
-   void encodeBody(HornetQBuffer buffer);
-
-   void decodeBody(HornetQBuffer buffer);
-
    // Properties
    // ------------------------------------------------------------------
 
@@ -195,11 +168,21 @@
 
    Map<String, Object> toMap();
 
-   // Body
-   // ---------------------------------------------------------------------------------
+   // FIXME - All this stuff is only necessary here for large messages - it should be refactored to be put in a better place
+   
+   
+   int getHeadersAndPropertiesEncodeSize();
+   
+   HornetQBuffer getBuffer();
+   
+   void encodeHeadersAndProperties(HornetQBuffer buffer);
+   
+   long getLargeBodySize();
+   
+   BodyEncoder getBodyEncoder();
+   
+   /** Get the InputStream used on a message that will be sent over a producer */
+   InputStream getBodyInputStream();
+   
 
-   HornetQBuffer getBody();
-
-   void setBody(HornetQBuffer body);
-
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/message/impl/MessageImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/message/impl/MessageImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/message/impl/MessageImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -13,12 +13,11 @@
 
 package org.hornetq.core.message.impl;
 
+import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.PACKET_HEADERS_SIZE;
 import static org.hornetq.utils.DataConstants.SIZE_BOOLEAN;
 import static org.hornetq.utils.DataConstants.SIZE_BYTE;
-import static org.hornetq.utils.DataConstants.SIZE_INT;
 import static org.hornetq.utils.DataConstants.SIZE_LONG;
 
-import java.io.InputStream;
 import java.nio.ByteBuffer;
 import java.util.HashMap;
 import java.util.Map;
@@ -83,18 +82,17 @@
    protected boolean durable;
 
    /** GMT milliseconds at which this message expires. 0 means never expires * */
-   private long expiration;
+   protected long expiration;
 
-   private long timestamp;
+   protected long timestamp;
 
-   private TypedProperties properties;
+   protected TypedProperties properties;
 
-   private byte priority;
+   protected byte priority;
 
-   private HornetQBuffer body;
+   protected HornetQBuffer buffer;
 
-   /** Used on LargeMessages */
-   private InputStream bodyInputStream;
+   //private int encodeSize = -1;
 
    // Constructors --------------------------------------------------
 
@@ -117,7 +115,7 @@
                          final long expiration,
                          final long timestamp,
                          final byte priority,
-                         final HornetQBuffer body)
+                         final HornetQBuffer buffer)
    {
       this();
       this.type = type;
@@ -125,43 +123,9 @@
       this.expiration = expiration;
       this.timestamp = timestamp;
       this.priority = priority;
-      this.body = body;
+      this.buffer = buffer;
    }
-
-   /*
-    * Copy constructor
-    */
-   protected MessageImpl(final MessageImpl other)
-   {
-      this();
-      messageID = other.messageID;
-      destination = other.destination;
-      type = other.type;
-      durable = other.durable;
-      expiration = other.expiration;
-      timestamp = other.timestamp;
-      priority = other.priority;
-      properties = new TypedProperties(other.properties);
-      body = other.body;
-   }
-
-   /*
-    * Copy constructor
-    */
-   protected MessageImpl(final Message other)
-   {
-      this();
-      messageID = other.getMessageID();
-      destination = other.getDestination();
-      type = other.getType();
-      durable = other.isDurable();
-      expiration = other.getExpiration();
-      timestamp = other.getTimestamp();
-      priority = other.getPriority();
-      properties = new TypedProperties(other.getProperties());
-      body = other.getBody();
-   }
-
+   
    protected MessageImpl(final long messageID)
    {
       this();
@@ -170,32 +134,25 @@
 
    // Message implementation ----------------------------------------
 
-   public void encode(final HornetQBuffer buffer)
-   {
-      encodeHeadersAndProperties(buffer);
-      buffer.writeInt(getBodySize());
-      encodeBody(buffer);
-   }
+//   public void encode(final HornetQBuffer buffer)
+//   {
+//      encodeHeadersAndProperties(buffer);
+//      buffer.writeInt(getBodySize());
+//      encodeBody(buffer);
+//   }
 
    public int getEncodeSize()
    {
-      return getHeadersAndPropertiesEncodeSize() + SIZE_INT + getBodySize();
+//      return getHeadersAndPropertiesEncodeSize() + SIZE_INT + getBodySize();
+      
+      //log.info("getting encode size, writer index is " + buffer.writerIndex(), new Exception());
+      
+      return buffer.writerIndex() - PACKET_HEADERS_SIZE;
    }
-
-   public int getHeadersAndPropertiesEncodeSize()
-   {
-      return SIZE_LONG + /* Destination */SimpleString.sizeofString(destination) +
-      /* Type */SIZE_BYTE +
-      /* Durable */SIZE_BOOLEAN +
-      /* Expiration */SIZE_LONG +
-      /* Timestamp */SIZE_LONG +
-      /* Priority */SIZE_BYTE +
-      /* PropertySize and Properties */properties.getEncodeSize();
-   }
-
+  
    public int getBodySize()
    {
-      return body.writerIndex();
+      return buffer.writerIndex();
    }
 
    public void encodeHeadersAndProperties(final HornetQBuffer buffer)
@@ -209,24 +166,28 @@
       buffer.writeByte(priority);
       properties.encode(buffer);
    }
+   
+//   public void encodeBody(final HornetQBuffer buffer)
+//   {
+//      HornetQBuffer localBody = getBuffer();
+//      buffer.writeBytes(localBody.array(), 0, localBody.writerIndex());
+//   }
 
-   public void encodeBody(final HornetQBuffer buffer)
-   {
-      HornetQBuffer localBody = getBody();
-      buffer.writeBytes(localBody.array(), 0, localBody.writerIndex());
-   }
-
    public void decode(final HornetQBuffer buffer)
    {
       decodeHeadersAndProperties(buffer);
 
-      decodeBody(buffer);
+      this.buffer = buffer;
    }
+   
+ 
 
    public void decodeHeadersAndProperties(final HornetQBuffer buffer)
    {
       messageID = buffer.readLong();
+      log.info("message id is " + messageID);
       destination = buffer.readSimpleString();
+      log.info("destination is " + destination);
       type = buffer.readByte();
       durable = buffer.readBoolean();
       expiration = buffer.readLong();
@@ -235,16 +196,6 @@
       properties.decode(buffer);
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
-   {
-      int len = buffer.readInt();
-      byte[] bytes = new byte[len];
-      buffer.readBytes(bytes);
-
-      // Reuse the same body on the initial body created
-      body = ChannelBuffers.dynamicBuffer(bytes);
-   }
-
    public long getMessageID()
    {
       return messageID;
@@ -315,22 +266,8 @@
       return System.currentTimeMillis() - expiration >= 0;
    }
 
-   /**
-    * @return the bodyInputStream
-    */
-   public InputStream getBodyInputStream()
-   {
-      return bodyInputStream;
-   }
+ 
 
-   /**
-    * @param bodyInputStream the bodyInputStream to set
-    */
-   public void setBodyInputStream(final InputStream bodyInputStream)
-   {
-      this.bodyInputStream = bodyInputStream;
-   }
-
    public Map<String, Object> toMap()
    {
       Map<String, Object> map = new HashMap<String, Object>();
@@ -647,19 +584,11 @@
       return properties;
    }
 
-   // Body
-   // -------------------------------------------------------------------------------------
-
-   public HornetQBuffer getBody()
+   public HornetQBuffer getBuffer()
    {
-      return body;
+      return buffer;
    }
 
-   public void setBody(final HornetQBuffer body)
-   {
-      this.body = body;
-   }
-   
    public BodyEncoder getBodyEncoder()
    {
       return new DecodingContext();
@@ -700,10 +629,23 @@
 
       public int encode(HornetQBuffer bufferOut, int size)
       {
-         bufferOut.writeBytes(getBody(), lastPos, size);
+         bufferOut.writeBytes(getBuffer(), lastPos, size);
          lastPos += size;
          return size;
       }
    }
+   
+   //FIXME - all this stuff only used by large messages, move it!
+   
+   public int getHeadersAndPropertiesEncodeSize()
+   {
+      return SIZE_LONG + /* Destination */SimpleString.sizeofString(destination) +
+      /* Type */SIZE_BYTE +
+      /* Durable */SIZE_BOOLEAN +
+      /* Expiration */SIZE_LONG +
+      /* Timestamp */SIZE_LONG +
+      /* Priority */SIZE_BYTE +
+      /* PropertySize and Properties */properties.getEncodeSize();
+   }
 
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/persistence/StorageManager.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/persistence/StorageManager.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/persistence/StorageManager.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -74,7 +74,7 @@
 
    void storeMessage(ServerMessage message) throws Exception;
    
-   void storeReference(long queueID, long messageID) throws Exception;
+   void storeReference(long queueID, long messageID, boolean last) throws Exception;
 
    void deleteMessage(long messageID) throws Exception;
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/journal/FileLargeServerMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/journal/FileLargeServerMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/journal/FileLargeServerMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -158,11 +158,11 @@
       return getHeadersAndPropertiesEncodeSize();
    }
 
-   @Override
-   public void encode(final HornetQBuffer buffer)
-   {
-      encodeHeadersAndProperties(buffer);
-   }
+//   @Override
+//   public void encode(final HornetQBuffer buffer)
+//   {
+//      encodeHeadersAndProperties(buffer);
+//   }
 
    @Override
    public void decode(final HornetQBuffer buffer)
@@ -186,6 +186,7 @@
       }
    }
 
+   @Override
    public BodyEncoder getBodyEncoder()
    {
       return new DecodingContext();

Modified: branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/journal/JournalStorageManager.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/journal/JournalStorageManager.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/journal/JournalStorageManager.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -247,7 +247,12 @@
       else if (config.getJournalType() == JournalType.NIO)
       {
          log.info("NIO Journal selected");
-         journalFF = new NIOSequentialFileFactory(journalDir);
+         journalFF = new NIOSequentialFileFactory(journalDir,
+                                                  true,
+                                                  config.getJournalBufferSize(),
+                                                  config.getJournalBufferTimeout(),
+                                                  config.isJournalFlushOnSync(),
+                                                  config.isLogJournalWriteRate());
       }
       else
       {
@@ -440,10 +445,13 @@
 
    public void storeMessage(final ServerMessage message) throws Exception
    {
+      //TODO - how can this be less than zero?
       if (message.getMessageID() <= 0)
       {
          throw new HornetQException(HornetQException.ILLEGAL_STATE, "MessageId was not assigned to Message");
       }
+      
+     // log.info("calling store msg");
 
       // Note that we don't sync, the add reference that comes immediately after will sync if appropriate
 
@@ -460,23 +468,27 @@
       }
    }
 
-   public void storeReference(final long queueID, final long messageID) throws Exception
+   public void storeReference(final long queueID, final long messageID, final boolean last) throws Exception
    {
-      messageJournal.appendUpdateRecord(messageID, ADD_REF, new RefEncoding(queueID), syncNonTransactional);
+      //log.info("calling store reference " + syncNonTransactional);
+      messageJournal.appendUpdateRecord(messageID, ADD_REF, new RefEncoding(queueID), last && syncNonTransactional);
    }
 
    public void storeAcknowledge(final long queueID, final long messageID) throws Exception
    {
+      log.info("calling acknowledge");
       messageJournal.appendUpdateRecord(messageID, ACKNOWLEDGE_REF, new RefEncoding(queueID), syncNonTransactional);
    }
 
    public void deleteMessage(final long messageID) throws Exception
    {
+      log.info("calling delete message");
       messageJournal.appendDeleteRecord(messageID, syncNonTransactional);
    }
 
    public void updateScheduledDeliveryTime(final MessageReference ref) throws Exception
    {
+      log.info("calling update sched delivery");
       ScheduledDeliveryEncoding encoding = new ScheduledDeliveryEncoding(ref.getScheduledDeliveryTime(), ref.getQueue()
                                                                                                             .getID());
 
@@ -488,6 +500,7 @@
 
    public void storeDuplicateID(final SimpleString address, final byte[] duplID, final long recordID) throws Exception
    {
+      log.info("calling store dupl id");
       DuplicateIDEncoding encoding = new DuplicateIDEncoding(address, duplID);
 
       messageJournal.appendAddRecord(recordID, DUPLICATE_ID, encoding, syncNonTransactional);
@@ -495,6 +508,7 @@
 
    public void deleteDuplicateID(long recordID) throws Exception
    {
+      log.info("calling delete dupl id");
       messageJournal.appendDeleteRecord(recordID, syncNonTransactional);
    }
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/nullpm/NullStorageLargeServerMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/nullpm/NullStorageLargeServerMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/nullpm/NullStorageLargeServerMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -57,18 +57,18 @@
     */
    public synchronized void addBytes(final byte[] bytes)
    {
-      HornetQBuffer buffer = getBody();
-
-      if (buffer != null)
-      {
+//      HornetQBuffer buffer = getBuffer();
+//
+//      if (buffer != null)
+//      {
          // expand the buffer
          buffer.writeBytes(bytes);
-      }
-      else
-      {
-         // Reuse the initial byte array on the buffer construction
-         setBody(ChannelBuffers.dynamicBuffer(bytes));
-      }
+//      }
+//      else
+//      {
+//         // Reuse the initial byte array on the buffer construction
+//         setBuffer(ChannelBuffers.dynamicBuffer(bytes));
+//      }
    }
 
    /* (non-Javadoc)

Modified: branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/nullpm/NullStorageManager.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/nullpm/NullStorageManager.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/persistence/impl/nullpm/NullStorageManager.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -97,7 +97,7 @@
    {
    }
 
-   public void storeReference(final long queueID, final long messageID) throws Exception
+   public void storeReference(final long queueID, final long messageID, boolean last) throws Exception
    {
    }
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/postoffice/impl/PostOfficeImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/postoffice/impl/PostOfficeImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/postoffice/impl/PostOfficeImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -18,6 +18,7 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -348,7 +349,7 @@
                      long redistributionDelay = addressSettings.getRedistributionDelay();
 
                      if (redistributionDelay != -1)
-                     {                        
+                     {
                         queue.addRedistributor(redistributionDelay, redistributorExecutorFactory.getExecutor());
                      }
                   }
@@ -418,7 +419,7 @@
                      long redistributionDelay = addressSettings.getRedistributionDelay();
 
                      if (redistributionDelay != -1)
-                     {                       
+                     {
                         queue.addRedistributor(redistributionDelay, redistributorExecutorFactory.getExecutor());
                      }
                   }
@@ -467,7 +468,7 @@
       }
 
       String uid = UUIDGenerator.getInstance().generateStringUUID();
-    
+
       managementService.sendNotification(new Notification(uid, NotificationType.BINDING_ADDED, props));
    }
 
@@ -635,7 +636,7 @@
          bindings.route(message, context);
       }
 
-      if (context.getQueues().isEmpty())
+      if (context.getQueueCount() == 0)
       {
          // Send to DLA if appropriate
 
@@ -779,9 +780,9 @@
       {
          // First send a reset message
 
-         ServerMessage message = new ServerMessageImpl(storageManager.generateUniqueID());
-//         message.setDurable(true);
-         message.setBody(ChannelBuffers.EMPTY_BUFFER);
+         ServerMessage message = new ServerMessageImpl(storageManager.generateUniqueID(), ChannelBuffers.EMPTY_BUFFER);
+         // message.setDurable(true);
+
          message.setDestination(queueName);
          message.putBooleanProperty(HDR_RESET_QUEUE_DATA, true);
          routeDirect(message, queue, false);
@@ -863,7 +864,7 @@
 
       Transaction tx = context.getTransaction();
 
-      for (Queue queue : context.getQueues())
+      for (Queue queue : context.getNonDurableQueues())
       {
          MessageReference reference = message.createReference(queue);
 
@@ -872,11 +873,37 @@
          if (message.containsProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME))
          {
             Long scheduledDeliveryTime = message.getLongProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
+
             reference.setScheduledDeliveryTime(scheduledDeliveryTime);
          }
 
-         if (message.isDurable() && queue.isDurable())
+         if (storageManager.isReplicated())
          {
+            storageManager.sync();
+         }
+
+         message.incrementRefCount(reference);
+      }
+
+      Iterator<Queue> iter = context.getDurableQueues().iterator();
+
+      while (iter.hasNext())
+      {
+         Queue queue = iter.next();
+
+         MessageReference reference = message.createReference(queue);
+
+         refs.add(reference);
+
+         if (message.containsProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME))
+         {
+            Long scheduledDeliveryTime = message.getLongProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
+
+            reference.setScheduledDeliveryTime(scheduledDeliveryTime);
+         }
+
+         if (message.isDurable())
+         {
             int durableRefCount = message.incrementDurableRefCount();
 
             if (durableRefCount == 1)
@@ -899,7 +926,7 @@
             }
             else
             {
-               storageManager.storeReference(queue.getID(), message.getMessageID());
+               storageManager.storeReference(queue.getID(), message.getMessageID(), !iter.hasNext());
             }
 
             if (message.containsProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME))
@@ -973,11 +1000,10 @@
 
    private ServerMessage createQueueInfoMessage(final NotificationType type, final SimpleString queueName)
    {
-      ServerMessage message = new ServerMessageImpl(storageManager.generateUniqueID());
-      message.setBody(ChannelBuffers.EMPTY_BUFFER);
+      ServerMessage message = new ServerMessageImpl(storageManager.generateUniqueID(), ChannelBuffers.EMPTY_BUFFER);
 
       message.setDestination(queueName);
-//      message.setDurable(true);
+      // message.setDurable(true);
 
       String uid = UUIDGenerator.getInstance().generateStringUUID();
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/Packet.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/Packet.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/Packet.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -32,7 +32,9 @@
    
    byte getType();
 
-   int encode(HornetQBuffer buffer);
+   //int encode(HornetQBuffer buffer);
+   
+   HornetQBuffer encode(RemotingConnection connection);
       
    void decode(HornetQBuffer buffer);
    

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/AbstractBufferHandler.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/AbstractBufferHandler.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/AbstractBufferHandler.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -12,6 +12,7 @@
  */
 package org.hornetq.core.remoting.impl;
 
+import org.hornetq.core.logging.Logger;
 import org.hornetq.core.remoting.spi.BufferHandler;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
 import org.hornetq.utils.DataConstants;
@@ -24,8 +25,12 @@
  */
 public abstract class AbstractBufferHandler implements BufferHandler
 {
+   private static final Logger log = Logger.getLogger(AbstractBufferHandler.class);
+
    public int isReadyToHandle(final HornetQBuffer buffer)
    {
+      log.info("calling buffer is ready to handle");
+
       if (buffer.readableBytes() < DataConstants.SIZE_INT)
       {
          return -1;
@@ -33,6 +38,8 @@
 
       int length = buffer.readInt();
 
+      log.info("length is " + length + " readable bytes is " + buffer.readableBytes());
+
       if (buffer.readableBytes() < length)
       {
          return -1;

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/ChannelImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/ChannelImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/ChannelImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -146,14 +146,14 @@
    // This must never called by more than one thread concurrently
    public void send(final Packet packet, final boolean flush)
    {      
+      log.info("Sending packet on channel " + packet);
+      
       synchronized (sendLock)
       {
          packet.setChannelID(id);
 
-         final HornetQBuffer buffer = connection.getTransportConnection().createBuffer(packet.getRequiredBufferSize());
+         final HornetQBuffer buffer = packet.encode(connection);
 
-         packet.encode(buffer);
-
          lock.lock();
 
          try
@@ -202,10 +202,8 @@
       {
          packet.setChannelID(id);
 
-         final HornetQBuffer buffer = connection.getTransportConnection().createBuffer(packet.getRequiredBufferSize());
+         final HornetQBuffer buffer = packet.encode(connection);
 
-         packet.encode(buffer);
-
          lock.lock();
 
          try
@@ -464,10 +462,8 @@
 
    private void doWrite(final Packet packet)
    {
-      final HornetQBuffer buffer = connection.getTransportConnection().createBuffer(packet.getRequiredBufferSize());
+      final HornetQBuffer buffer = packet.encode(connection);
 
-      packet.encode(buffer);
-
       connection.getTransportConnection().write(buffer);
    }
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/PacketDecoder.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/PacketDecoder.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/PacketDecoder.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -29,7 +29,6 @@
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_APPEND_TX;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_COMMIT_ROLLBACK;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_COMPARE_DATA;
-import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_SYNC;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_DELETE;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_DELETE_TX;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_LARGE_MESSAGE_BEGIN;
@@ -39,6 +38,7 @@
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_PAGE_WRITE;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_PREPARE;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_RESPONSE;
+import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.REPLICATION_SYNC;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_ACKNOWLEDGE;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_BINDINGQUERY;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_BINDINGQUERY_RESP;
@@ -54,6 +54,7 @@
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_QUEUEQUERY;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_QUEUEQUERY_RESP;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_RECEIVE_CONTINUATION;
+import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_RECEIVE_LARGE_MSG;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_RECEIVE_MSG;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_ROLLBACK;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_SEND;
@@ -78,6 +79,7 @@
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_XA_START;
 import static org.hornetq.core.remoting.impl.wireformat.PacketImpl.SESS_XA_SUSPEND;
 
+import org.hornetq.core.logging.Logger;
 import org.hornetq.core.remoting.Packet;
 import org.hornetq.core.remoting.impl.wireformat.CreateQueueMessage;
 import org.hornetq.core.remoting.impl.wireformat.CreateReplicationSessionMessage;
@@ -94,7 +96,6 @@
 import org.hornetq.core.remoting.impl.wireformat.ReplicationAddTXMessage;
 import org.hornetq.core.remoting.impl.wireformat.ReplicationCommitMessage;
 import org.hornetq.core.remoting.impl.wireformat.ReplicationCompareDataMessage;
-import org.hornetq.core.remoting.impl.wireformat.ReplicationSyncContextMessage;
 import org.hornetq.core.remoting.impl.wireformat.ReplicationDeleteMessage;
 import org.hornetq.core.remoting.impl.wireformat.ReplicationDeleteTXMessage;
 import org.hornetq.core.remoting.impl.wireformat.ReplicationLargeMessageBeingMessage;
@@ -104,6 +105,7 @@
 import org.hornetq.core.remoting.impl.wireformat.ReplicationPageWriteMessage;
 import org.hornetq.core.remoting.impl.wireformat.ReplicationPrepareMessage;
 import org.hornetq.core.remoting.impl.wireformat.ReplicationResponseMessage;
+import org.hornetq.core.remoting.impl.wireformat.ReplicationSyncContextMessage;
 import org.hornetq.core.remoting.impl.wireformat.RollbackMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionAcknowledgeMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionBindingQueryMessage;
@@ -119,6 +121,7 @@
 import org.hornetq.core.remoting.impl.wireformat.SessionQueueQueryMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionQueueQueryResponseMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveContinuationMessage;
+import org.hornetq.core.remoting.impl.wireformat.SessionReceiveLargeMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionRequestProducerCreditsMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionSendContinuationMessage;
@@ -148,9 +151,13 @@
  */
 public class PacketDecoder
 {
+   private static final Logger log = Logger.getLogger(PacketDecoder.class);
+   
    public Packet decode(final HornetQBuffer in)
    {
       final byte packetType = in.readByte();
+      
+      log.info("Packet type is " + packetType);
 
       Packet packet;
 
@@ -366,6 +373,11 @@
             packet = new SessionReceiveMessage();
             break;
          }
+         case SESS_RECEIVE_LARGE_MSG:
+         {
+            packet = new SessionReceiveLargeMessage();
+            break;
+         }
          case SESS_CONSUMER_CLOSE:
          {
             packet = new SessionConsumerCloseMessage();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/RemotingConnectionImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/RemotingConnectionImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/RemotingConnectionImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -19,6 +19,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
 
 import org.hornetq.core.exception.HornetQException;
 import org.hornetq.core.logging.Logger;
@@ -124,7 +125,9 @@
 
       this.client = client;
 
-      this.executor = executor;
+      //this.executor = executor;
+      
+      this.executor = null;
    }
 
    // RemotingConnection implementation
@@ -326,7 +329,9 @@
    // ----------------------------------------------------
 
    public void bufferReceived(final Object connectionID, final HornetQBuffer buffer)
-   {
+   {                 
+      log.info("decoding packet " + buffer);
+      
       final Packet packet = decoder.decode(buffer);
       
       if (executor == null || packet.getType() == PacketImpl.PING)

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateQueueMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateQueueMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateQueueMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -106,7 +106,7 @@
       return temporary;
    }
    
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeSimpleString(address);
       buffer.writeSimpleString(queueName);
@@ -115,7 +115,7 @@
       buffer.writeBoolean(temporary);
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       address = buffer.readSimpleString();
       queueName = buffer.readSimpleString();
@@ -145,7 +145,7 @@
     */
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + address.sizeof() +
+      return PACKET_HEADERS_SIZE + address.sizeof() +
              queueName.sizeof() +
              SimpleString.sizeofNullableString(filterString) +
              DataConstants.SIZE_BOOLEAN +

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateReplicationSessionMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateReplicationSessionMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateReplicationSessionMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -50,7 +50,7 @@
    // Public --------------------------------------------------------
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE +
+      return PACKET_HEADERS_SIZE +
       // buffer.writeLong(sessionChannelID);
              DataConstants.SIZE_LONG +
              // buffer.writeInt(windowSize);
@@ -59,14 +59,14 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(sessionChannelID);
       buffer.writeInt(windowSize);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       sessionChannelID = buffer.readLong();
       windowSize = buffer.readInt();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateSessionMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateSessionMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateSessionMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -150,7 +150,7 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + stringEncodeSize(name) + // buffer.writeString(name);
+      return PACKET_HEADERS_SIZE + stringEncodeSize(name) + // buffer.writeString(name);
              DataConstants.SIZE_LONG +
              // buffer.writeLong(sessionChannelID);
              DataConstants.SIZE_INT +
@@ -174,7 +174,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeString(name);
       buffer.writeLong(sessionChannelID);
@@ -190,7 +190,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       name = buffer.readString();
       sessionChannelID = buffer.readLong();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateSessionResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateSessionResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/CreateSessionResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -60,20 +60,20 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {     
       buffer.writeInt(serverVersion);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {      
       serverVersion = buffer.readInt();
    }
    
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_INT; 
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_INT; 
    }
 
    @Override

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/HornetQExceptionMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/HornetQExceptionMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/HornetQExceptionMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -66,17 +66,17 @@
    
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_INT + nullableStringEncodeSize(exception.getMessage());
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_INT + nullableStringEncodeSize(exception.getMessage());
    }
 
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(exception.getCode());
       buffer.writeNullableString(exception.getMessage());
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       int code = buffer.readInt();
       String msg = buffer.readNullableString();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/NullResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/NullResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/NullResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -46,7 +46,7 @@
     */
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE;
+      return PACKET_HEADERS_SIZE;
    }
    
    

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/PacketImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/PacketImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/PacketImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -15,6 +15,7 @@
 
 import org.hornetq.core.logging.Logger;
 import org.hornetq.core.remoting.Packet;
+import org.hornetq.core.remoting.RemotingConnection;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
 import org.hornetq.utils.DataConstants;
 
@@ -30,15 +31,17 @@
    private static final Logger log = Logger.getLogger(PacketImpl.class);
 
    // The minimal size for all the packets, Common data for all the packets (look at PacketImpl.encode)
-   protected static final int BASIC_PACKET_SIZE = DataConstants.SIZE_INT + DataConstants.SIZE_BYTE +
-                                                  DataConstants.SIZE_LONG;
+   public static final int PACKET_HEADERS_SIZE = DataConstants.SIZE_INT + DataConstants.SIZE_BYTE +
+                                                 DataConstants.SIZE_LONG;
 
-   private long channelID;
+   private static final int INITIAL_PACKET_SIZE = 1500;
 
-   private final byte type;
+   protected long channelID;
 
-   private int size;
+   protected final byte type;
 
+   protected int size;
+
    // The packet types
    // -----------------------------------------------------------------------------------
 
@@ -136,44 +139,47 @@
    public static final byte SESS_CONSUMER_CLOSE = 74;
 
    public static final byte SESS_RECEIVE_MSG = 75;
+   
+   public static final byte SESS_RECEIVE_LARGE_MSG = 76;
 
-   public static final byte SESS_RECEIVE_CONTINUATION = 76;
+   public static final byte SESS_RECEIVE_CONTINUATION = 77;
 
-   public static final byte SESS_FORCE_CONSUMER_DELIVERY = 77;
-   
-   public static final byte SESS_PRODUCER_REQUEST_CREDITS = 78;
-   
-   public static final byte SESS_PRODUCER_CREDITS = 79;
+   public static final byte SESS_FORCE_CONSUMER_DELIVERY = 78;
 
+   public static final byte SESS_PRODUCER_REQUEST_CREDITS = 79;
+
+   public static final byte SESS_PRODUCER_CREDITS = 80;
+
    // Replication
 
-   public static final byte REPLICATION_RESPONSE = 80;
+   public static final byte REPLICATION_RESPONSE = 90;
 
-   public static final byte REPLICATION_APPEND = 81;
+   public static final byte REPLICATION_APPEND = 91;
 
-   public static final byte REPLICATION_APPEND_TX = 82;
+   public static final byte REPLICATION_APPEND_TX = 92;
 
-   public static final byte REPLICATION_DELETE = 83;
+   public static final byte REPLICATION_DELETE = 93;
 
-   public static final byte REPLICATION_DELETE_TX = 84;
-   
-   public static final byte REPLICATION_PREPARE = 85;
-   
-   public static final byte REPLICATION_COMMIT_ROLLBACK = 86;
-   
-   public static final byte REPLICATION_PAGE_WRITE = 87;
+   public static final byte REPLICATION_DELETE_TX = 94;
 
-   public static final byte REPLICATION_PAGE_EVENT = 88;
-   
-   public static final byte REPLICATION_LARGE_MESSAGE_BEGIN = 89;
-   
-   public static final byte REPLICATION_LARGE_MESSAGE_END = 90;
-   
-   public static final byte REPLICATION_LARGE_MESSAGE_WRITE = 91;
-   
-   public static final byte REPLICATION_COMPARE_DATA = 92;
-   
-   public static final byte REPLICATION_SYNC = 93;
+   public static final byte REPLICATION_PREPARE = 95;
+
+   public static final byte REPLICATION_COMMIT_ROLLBACK = 96;
+
+   public static final byte REPLICATION_PAGE_WRITE = 97;
+
+   public static final byte REPLICATION_PAGE_EVENT = 98;
+
+   public static final byte REPLICATION_LARGE_MESSAGE_BEGIN = 99;
+
+   public static final byte REPLICATION_LARGE_MESSAGE_END = 100;
+
+   public static final byte REPLICATION_LARGE_MESSAGE_WRITE = 101;
+
+   public static final byte REPLICATION_COMPARE_DATA = 102;
+
+   public static final byte REPLICATION_SYNC = 103;
+
    // Static --------------------------------------------------------
 
    public PacketImpl(final byte type)
@@ -198,14 +204,17 @@
       this.channelID = channelID;
    }
 
-   public int encode(final HornetQBuffer buffer)
+   public HornetQBuffer encode(final RemotingConnection connection)
    {
+      HornetQBuffer buffer = connection.createBuffer(INITIAL_PACKET_SIZE);
+
       // The standard header fields
+
       buffer.writeInt(0); // The length gets filled in at the end
       buffer.writeByte(type);
       buffer.writeLong(channelID);
 
-      encodeBody(buffer);
+      encodeRest(buffer);
 
       size = buffer.writerIndex();
 
@@ -214,15 +223,15 @@
 
       buffer.setInt(0, len);
 
-      return size;
+      return buffer;
    }
 
    public void decode(final HornetQBuffer buffer)
    {
       channelID = buffer.readLong();
-      
-      decodeBody(buffer);
 
+      decodeRest(buffer);
+
       size = buffer.readerIndex();
    }
 
@@ -233,7 +242,7 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE;
+      return PACKET_HEADERS_SIZE;
    }
 
    public boolean isResponse()
@@ -241,11 +250,11 @@
       return false;
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
    }
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/PacketsConfirmedMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/PacketsConfirmedMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/PacketsConfirmedMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -56,15 +56,15 @@
    
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_INT;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_INT;
    }
    
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(commandID);
    }
    
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       commandID = buffer.readInt();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/Ping.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/Ping.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/Ping.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -56,15 +56,15 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG;
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(connectionTTL);
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       connectionTTL = buffer.readLong();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReattachSessionMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReattachSessionMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReattachSessionMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -65,17 +65,17 @@
    
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + stringEncodeSize(name) + DataConstants.SIZE_INT;
+      return PACKET_HEADERS_SIZE + stringEncodeSize(name) + DataConstants.SIZE_INT;
    }
    
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeString(name);
       buffer.writeInt(lastReceivedCommandID);
    }
    
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       name = buffer.readString();
       lastReceivedCommandID = buffer.readInt();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReattachSessionResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReattachSessionResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReattachSessionResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -65,16 +65,16 @@
    
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_INT + DataConstants.SIZE_BOOLEAN;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_INT + DataConstants.SIZE_BOOLEAN;
    }
    
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    { 
       buffer.writeInt(lastReceivedCommandID);
       buffer.writeBoolean(reattached);
    }
    
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    { 
       lastReceivedCommandID = buffer.readInt();
       reattached = buffer.readBoolean();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationAddMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationAddMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationAddMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -72,7 +72,7 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BYTE +
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BYTE +
              DataConstants.SIZE_BOOLEAN +
              DataConstants.SIZE_LONG +
              DataConstants.SIZE_BYTE +
@@ -82,7 +82,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeByte(journalID);
       buffer.writeBoolean(isUpdate);
@@ -93,7 +93,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       journalID = buffer.readByte();
       isUpdate = buffer.readBoolean();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationAddTXMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationAddTXMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationAddTXMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -76,7 +76,7 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BYTE +
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BYTE +
              DataConstants.SIZE_BOOLEAN +
              DataConstants.SIZE_LONG +
              DataConstants.SIZE_LONG +
@@ -87,7 +87,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeByte(journalID);
       buffer.writeBoolean(isUpdate);
@@ -99,7 +99,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       journalID = buffer.readByte();
       isUpdate = buffer.readBoolean();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationCommitMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationCommitMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationCommitMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -59,11 +59,11 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BYTE + DataConstants.SIZE_BOOLEAN + DataConstants.SIZE_LONG;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BYTE + DataConstants.SIZE_BOOLEAN + DataConstants.SIZE_LONG;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeByte(journalID);
       buffer.writeBoolean(rollback);
@@ -71,7 +71,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       journalID = buffer.readByte();
       rollback = buffer.readBoolean();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationCompareDataMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationCompareDataMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationCompareDataMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -50,14 +50,14 @@
    // Public --------------------------------------------------------
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + 
+      return PACKET_HEADERS_SIZE + 
              DataConstants.SIZE_INT + (journalInformation.length * (DataConstants.SIZE_INT + DataConstants.SIZE_LONG)) +
              DataConstants.SIZE_INT;
 
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(journalInformation.length);
       for (JournalLoadInformation info : journalInformation)
@@ -68,7 +68,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       int numberOfJournals = buffer.readInt();
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationDeleteMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationDeleteMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationDeleteMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -56,19 +56,19 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BYTE + DataConstants.SIZE_LONG;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BYTE + DataConstants.SIZE_LONG;
 
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeByte(journalID);
       buffer.writeLong(id);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       journalID = buffer.readByte();
       id = buffer.readLong();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationDeleteTXMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationDeleteTXMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationDeleteTXMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -68,7 +68,7 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BYTE +
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BYTE +
              DataConstants.SIZE_LONG +
              DataConstants.SIZE_LONG +
              DataConstants.SIZE_INT +
@@ -77,7 +77,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeByte(journalID);
       buffer.writeLong(txId);
@@ -87,7 +87,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       journalID = buffer.readByte();
       txId = buffer.readLong();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargeMessageBeingMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargeMessageBeingMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargeMessageBeingMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -52,17 +52,17 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(messageId);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       this.messageId = buffer.readLong();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargeMessageWriteMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargeMessageWriteMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargeMessageWriteMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -58,11 +58,11 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_INT + body.length;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_INT + body.length;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(messageId);
       buffer.writeInt(body.length);
@@ -70,7 +70,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       messageId = buffer.readLong();
       int size = buffer.readInt();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargemessageEndMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargemessageEndMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationLargemessageEndMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -51,17 +51,17 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(messageId);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       messageId = buffer.readLong();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPageEventMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPageEventMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPageEventMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -62,12 +62,12 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_INT + storeName.sizeof() + DataConstants.SIZE_BOOLEAN;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_INT + storeName.sizeof() + DataConstants.SIZE_BOOLEAN;
 
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeSimpleString(storeName);
       buffer.writeInt(pageNumber);
@@ -75,7 +75,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       storeName = buffer.readSimpleString();
       pageNumber = buffer.readInt();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPageWriteMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPageWriteMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPageWriteMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -57,19 +57,19 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_INT + pagedMessage.getEncodeSize();
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_INT + pagedMessage.getEncodeSize();
 
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(pageNumber);
       pagedMessage.encode(buffer);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       pageNumber = buffer.readInt();
       pagedMessage = new PagedMessageImpl();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPrepareMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPrepareMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationPrepareMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -62,7 +62,7 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BYTE +
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BYTE +
              DataConstants.SIZE_LONG +
              DataConstants.SIZE_INT +
              (encodingData != null ? encodingData.getEncodeSize() : recordData.length);
@@ -70,7 +70,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeByte(journalID);
       buffer.writeLong(txId);
@@ -79,7 +79,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       journalID = buffer.readByte();
       txId = buffer.readLong();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -40,7 +40,7 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE;
+      return PACKET_HEADERS_SIZE;
    }
 
    // Package protected ---------------------------------------------

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationSyncContextMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationSyncContextMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/ReplicationSyncContextMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -44,17 +44,17 @@
    @Override
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE;
+      return PACKET_HEADERS_SIZE;
 
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
    }
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/RollbackMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/RollbackMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/RollbackMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -67,17 +67,17 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BOOLEAN;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BOOLEAN;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeBoolean(considerLastMessageAsDelivered);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       considerLastMessageAsDelivered = buffer.readBoolean();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionAcknowledgeMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionAcknowledgeMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionAcknowledgeMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -71,11 +71,11 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_LONG + DataConstants.SIZE_BOOLEAN;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_LONG + DataConstants.SIZE_BOOLEAN;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(consumerID);
 
@@ -85,7 +85,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       consumerID = buffer.readLong();
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionBindingQueryMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionBindingQueryMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionBindingQueryMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -46,17 +46,17 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + address.sizeof();
+      return PACKET_HEADERS_SIZE + address.sizeof();
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeSimpleString(address);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       address = buffer.readSimpleString();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionBindingQueryResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionBindingQueryResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionBindingQueryResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -64,7 +64,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeBoolean(exists);
       buffer.writeInt(queueNames.size());
@@ -75,7 +75,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       exists = buffer.readBoolean();
       int numQueues = buffer.readInt();
@@ -88,7 +88,7 @@
 
    public int getRequiredBufferSize()
    {
-      int size = BASIC_PACKET_SIZE + DataConstants.SIZE_BOOLEAN + DataConstants.SIZE_INT;
+      int size = PACKET_HEADERS_SIZE + DataConstants.SIZE_BOOLEAN + DataConstants.SIZE_INT;
       for (SimpleString queueName : queueNames)
       {
          size += queueName.sizeof();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionCloseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionCloseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionCloseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -36,7 +36,7 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE;
+      return PACKET_HEADERS_SIZE;
    }
 
    @Override

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionConsumerCloseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionConsumerCloseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionConsumerCloseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -54,17 +54,17 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(consumerID);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       consumerID = buffer.readLong();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionConsumerFlowCreditMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionConsumerFlowCreditMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionConsumerFlowCreditMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -64,18 +64,18 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_INT;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_INT;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(consumerID);
       buffer.writeInt(credits);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       consumerID = buffer.readLong();
       credits = buffer.readInt();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionContinuationMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionContinuationMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionContinuationMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -30,7 +30,7 @@
 
    // Constants -----------------------------------------------------
 
-   public static final int SESSION_CONTINUATION_BASE_SIZE = BASIC_PACKET_SIZE + DataConstants.SIZE_INT +
+   public static final int SESSION_CONTINUATION_BASE_SIZE = PACKET_HEADERS_SIZE + DataConstants.SIZE_INT +
                                                             DataConstants.SIZE_BOOLEAN;
 
    // Attributes ----------------------------------------------------
@@ -80,7 +80,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(body.length);
       buffer.writeBytes(body);
@@ -88,7 +88,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       int size = buffer.readInt();
       body = new byte[size];

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionCreateConsumerMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionCreateConsumerMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionCreateConsumerMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -101,13 +101,13 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG + queueName.sizeof() +
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG + queueName.sizeof() +
              SimpleString.sizeofNullableString(filterString) +
              2 * DataConstants.SIZE_BOOLEAN ;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(id);
       buffer.writeSimpleString(queueName);
@@ -117,7 +117,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       id = buffer.readLong();
       queueName = buffer.readSimpleString();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionDeleteQueueMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionDeleteQueueMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionDeleteQueueMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -63,15 +63,15 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + queueName.sizeof();
+      return PACKET_HEADERS_SIZE + queueName.sizeof();
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeSimpleString(queueName);
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       queueName = buffer.readSimpleString();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionExpiredMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionExpiredMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionExpiredMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -62,11 +62,11 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_LONG;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_LONG;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(consumerID);
 
@@ -74,7 +74,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       consumerID = buffer.readLong();
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionForceConsumerDelivery.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionForceConsumerDelivery.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionForceConsumerDelivery.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -63,16 +63,16 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_LONG;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_LONG + DataConstants.SIZE_LONG;
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeLong(consumerID);
       buffer.writeLong(sequence);
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       consumerID = buffer.readLong();
       sequence = buffer.readLong();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionProducerCreditsMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionProducerCreditsMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionProducerCreditsMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -71,7 +71,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(credits);
       buffer.writeSimpleString(address);
@@ -79,7 +79,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       credits = buffer.readInt();
       address = buffer.readSimpleString();
@@ -88,7 +88,7 @@
 
    public int getRequiredBufferSize()
    {
-      int size = BASIC_PACKET_SIZE + DataConstants.SIZE_INT +
+      int size = PACKET_HEADERS_SIZE + DataConstants.SIZE_INT +
                  SimpleString.sizeofString(address) +
                  DataConstants.SIZE_INT;
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionQueueQueryMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionQueueQueryMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionQueueQueryMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -47,16 +47,16 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + queueName.sizeof();
+      return PACKET_HEADERS_SIZE + queueName.sizeof();
    }
 
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeSimpleString(queueName);
    }
    
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       queueName = buffer.readSimpleString();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionQueueQueryResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionQueueQueryResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionQueueQueryResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -112,7 +112,7 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + 
+      return PACKET_HEADERS_SIZE + 
       DataConstants.SIZE_BOOLEAN + // buffer.writeBoolean(exists);
       DataConstants.SIZE_BOOLEAN + // buffer.writeBoolean(durable);
       DataConstants.SIZE_INT + // buffer.writeInt(consumerCount);
@@ -121,7 +121,7 @@
       SimpleString.sizeofNullableString(address); // buffer.writeNullableSimpleString(address);
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeBoolean(exists);
       buffer.writeBoolean(durable);
@@ -131,7 +131,7 @@
       buffer.writeNullableSimpleString(address);
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       exists = buffer.readBoolean();
       durable = buffer.readBoolean();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionReceiveContinuationMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionReceiveContinuationMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionReceiveContinuationMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -80,16 +80,16 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
-      super.encodeBody(buffer);
+      super.encodeRest(buffer);
       buffer.writeLong(consumerID);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
-      super.decodeBody(buffer);
+      super.decodeRest(buffer);
       consumerID = buffer.readLong();
    }
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionReceiveMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionReceiveMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionReceiveMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -16,6 +16,7 @@
 import org.hornetq.core.client.impl.ClientMessageImpl;
 import org.hornetq.core.client.impl.ClientMessageInternal;
 import org.hornetq.core.logging.Logger;
+import org.hornetq.core.remoting.RemotingConnection;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
 import org.hornetq.core.server.ServerMessage;
 import org.hornetq.utils.DataConstants;
@@ -37,38 +38,12 @@
 
    private long consumerID;
 
-   private boolean largeMessage;
-
-   private byte[] largeMessageHeader;
-
    private ClientMessageInternal clientMessage;
 
    private ServerMessage serverMessage;
 
    private int deliveryCount;
-   
-   /** Since we receive the message before the entire message was received, */
-   private long largeMessageSize;
 
-   // Static --------------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   public SessionReceiveMessage(final long consumerID, final byte[] largeMessageHeader, final long largeMessageSize, final int deliveryCount)
-   {
-      super(SESS_RECEIVE_MSG);
-
-      this.consumerID = consumerID;
-
-      this.largeMessageHeader = largeMessageHeader;
-
-      this.deliveryCount = deliveryCount;
-
-      this.largeMessage = true;
-      
-      this.largeMessageSize = largeMessageSize;
-   }
-
    public SessionReceiveMessage(final long consumerID, final ServerMessage message, final int deliveryCount)
    {
       super(SESS_RECEIVE_MSG);
@@ -80,8 +55,6 @@
       this.clientMessage = null;
 
       this.deliveryCount = deliveryCount;
-
-      this.largeMessage = false;
    }
 
    public SessionReceiveMessage()
@@ -106,103 +79,98 @@
       return serverMessage;
    }
 
-   public byte[] getLargeMessageHeader()
-   {
-      return largeMessageHeader;
-   }
-
-   /**
-    * @return the largeMessage
-    */
-   public boolean isLargeMessage()
-   {
-      return largeMessage;
-   }
-
    public int getDeliveryCount()
    {
       return deliveryCount;
    }
 
-   /**
-    * @return the largeMessageSize
-    */
-   public long getLargeMessageSize()
-   {
-      return largeMessageSize;
-   }
-
    public int getRequiredBufferSize()
    {
-      if (largeMessage)
-      {
-         return BASIC_PACKET_SIZE + 
-                // consumerID
-                DataConstants.SIZE_LONG +
-                // deliveryCount
-                DataConstants.SIZE_INT +
-                // largeMessage (boolean)
-                DataConstants.SIZE_BOOLEAN +
-                // LargeMessageSize (Long)
-                DataConstants.SIZE_LONG +
-                // largeMessageHeader.length (int)
-                DataConstants.SIZE_INT +
-                // ByteArray size
-                largeMessageHeader.length;
-      }
-      else
-      {
-         return BASIC_PACKET_SIZE + 
-                // consumerID
-                DataConstants.SIZE_LONG +
-                // deliveryCount
-                DataConstants.SIZE_INT +
-                // isLargeMessage
-                DataConstants.SIZE_BOOLEAN +
-                // message.encoding
-                (serverMessage != null ? serverMessage.getEncodeSize() : clientMessage.getEncodeSize());
-      }
+      return PACKET_HEADERS_SIZE +
+             // consumerID
+             DataConstants.SIZE_LONG +
+             // deliveryCount
+             DataConstants.SIZE_INT +
+             // isLargeMessage
+             DataConstants.SIZE_BOOLEAN +
+             // message.encoding
+             (serverMessage != null ? serverMessage.getEncodeSize() : clientMessage.getEncodeSize());
+
    }
-   public void encodeBody(final HornetQBuffer buffer)
+   
+   @Override
+   public HornetQBuffer encode(final RemotingConnection connection)
    {
+      log.info("Encoding session send message, consumer id is " + consumerID + " delivery count is " + deliveryCount);
+      
+      HornetQBuffer buffer = serverMessage.getBuffer();
+      
+      log.info("** DELIVERING writer index is " + buffer.writerIndex());
+                  
+      
+      log.info("** WRITING CONSUMER ID AT POS " + buffer.writerIndex());
+      
       buffer.writeLong(consumerID);
       buffer.writeInt(deliveryCount);
-      buffer.writeBoolean(largeMessage);
-      if (largeMessage)
-      {
-         buffer.writeLong(largeMessageSize);
-         buffer.writeInt(largeMessageHeader.length);
-         buffer.writeBytes(largeMessageHeader);
-      }
-      else
-      {
-         serverMessage.encode(buffer);
-      }
+
+      // At this point, the rest of the message has already been encoded into the buffer
+      size = buffer.writerIndex();
+      
+      log.info("size is " + size);
+
+      buffer.setIndex(0, 0);
+
+      // The standard header fields
+
+      int len = size - DataConstants.SIZE_INT;
+      buffer.writeInt(len);
+      buffer.writeByte(type);
+      buffer.writeLong(channelID);
+      
+      buffer.setIndex(0, size);
+
+      return buffer;
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
-      // TODO can be optimised
-
+      clientMessage = new ClientMessageImpl();
+      
+      //fast forward past the size byte
+      buffer.readInt();
+      
+      clientMessage.decode(buffer);
+      
+      int bodyBeginning = buffer.readerIndex();
+      
+      clientMessage.setBuffer(buffer);
+      
+      //Now we need to fast forward past the body part
+      
+      int size = buffer.readInt(PacketImpl.PACKET_HEADERS_SIZE);
+      
+      buffer.setIndex(size, buffer.writerIndex());
+                  
+      log.info("decoded receive message");
+      
+      log.info("*** READING CONSUMER ID AT POS " + buffer.readerIndex());
+      
       consumerID = buffer.readLong();
+      
+      log.info("consumer id is " + consumerID);
 
       deliveryCount = buffer.readInt();
-
-      largeMessage = buffer.readBoolean();
-
-      if (largeMessage)
-      {
-         largeMessageSize = buffer.readLong();
-         int size = buffer.readInt();
-         largeMessageHeader = new byte[size];
-         buffer.readBytes(largeMessageHeader);
-      }
-      else
-      {
-         clientMessage = new ClientMessageImpl(deliveryCount);
-         clientMessage.decode(buffer);
-         clientMessage.getBody().resetReaderIndex();
-      }
+      
+      log.info("delivery count is " + deliveryCount);
+      
+      clientMessage.setDeliveryCount(deliveryCount);
+      
+      //clientMessage.getBuffer().resetReaderIndex();
+      
+      //Reset buffer to beginning of body
+      buffer.setIndex(bodyBeginning, buffer.writerIndex());
+      
+      clientMessage.setBuffer(buffer);
    }
 
    // Package protected ---------------------------------------------

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionRequestProducerCreditsMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionRequestProducerCreditsMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionRequestProducerCreditsMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -67,14 +67,14 @@
 //   }
    
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(credits);
       buffer.writeSimpleString(address);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       credits = buffer.readInt();
       address = buffer.readSimpleString();
@@ -82,7 +82,7 @@
 
    public int getRequiredBufferSize()
    {
-      int size = BASIC_PACKET_SIZE + DataConstants.SIZE_INT + SimpleString.sizeofString(address);
+      int size = PACKET_HEADERS_SIZE + DataConstants.SIZE_INT + SimpleString.sizeofString(address);
 
       return size;
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendContinuationMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendContinuationMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendContinuationMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -79,16 +79,16 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
-      super.encodeBody(buffer);
+      super.encodeRest(buffer);
       buffer.writeBoolean(requiresResponse);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
-      super.decodeBody(buffer);
+      super.decodeRest(buffer);
       requiresResponse = buffer.readBoolean();
    }
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendLargeMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendLargeMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendLargeMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -75,7 +75,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(largeMessageHeader.length);
       buffer.writeBytes(largeMessageHeader);
@@ -83,7 +83,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       int largeMessageLength = buffer.readInt();
 
@@ -96,7 +96,7 @@
 
    public int getRequiredBufferSize()
    {
-      int size = BASIC_PACKET_SIZE + DataConstants.SIZE_INT +
+      int size = PACKET_HEADERS_SIZE + DataConstants.SIZE_INT +
                  largeMessageHeader.length +
                  DataConstants.SIZE_LONG;
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionSendMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -13,7 +13,9 @@
 
 package org.hornetq.core.remoting.impl.wireformat;
 
+import org.hornetq.core.logging.Logger;
 import org.hornetq.core.message.Message;
+import org.hornetq.core.remoting.RemotingConnection;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
 import org.hornetq.core.server.ServerMessage;
 import org.hornetq.core.server.impl.ServerMessageImpl;
@@ -30,11 +32,13 @@
 {
    // Constants -----------------------------------------------------
 
+   private static final Logger log = Logger.getLogger(SessionSendMessage.class);
+   
    // Attributes ----------------------------------------------------
 
-   private Message clientMessage;
+   private Message sentMessage;
 
-   private ServerMessage serverMessage;
+   private ServerMessage receivedMessage;
 
    private boolean requiresResponse;
 
@@ -46,7 +50,7 @@
    {
       super(SESS_SEND);
 
-      clientMessage = message;
+      sentMessage = message;
 
       this.requiresResponse = requiresResponse;
    }
@@ -60,12 +64,12 @@
 
    public Message getClientMessage()
    {
-      return clientMessage;
+      return sentMessage;
    }
 
    public ServerMessage getServerMessage()
    {
-      return serverMessage;
+      return receivedMessage;
    }
 
    public boolean isRequiresResponse()
@@ -74,40 +78,63 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public HornetQBuffer encode(final RemotingConnection connection)
    {
-      if (clientMessage != null)
-      {
-         clientMessage.encode(buffer);
-      }
-      else
-      {
-         // If we're replicating a buffer to a backup node then we encode the serverMessage not the clientMessage
-         serverMessage.encode(buffer);
-      }
+      log.info("Encoding session send message");
+      
+      HornetQBuffer buffer = sentMessage.getBuffer();
+      
+      log.info("ENCODE ** size is " + buffer.writerIndex());
+      
+      buffer.writeBoolean(requiresResponse);
 
-      buffer.writeBoolean(requiresResponse);
+      // At this point, the rest of the message has already been encoded into the buffer
+      size = buffer.writerIndex();
+            
+
+      buffer.setIndex(0, 0);
+
+      // The standard header fields
+
+      int len = size - DataConstants.SIZE_INT;
+      buffer.writeInt(len);
+      buffer.writeByte(type);
+      buffer.writeLong(channelID);
+      buffer.writeInt(size);
+      
+      buffer.setIndex(0, size);
+
+      return buffer;
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
-      // TODO can be optimised
+      receivedMessage = new ServerMessageImpl();
 
-      serverMessage = new ServerMessageImpl();
+      sentMessage = receivedMessage;
+      
+      //fast forward past the size byte
+      buffer.readInt();
 
-      clientMessage = serverMessage;
+      log.info("********** server message ");
+                 
+      receivedMessage.decode(buffer);
+            
+      receivedMessage.getBuffer().resetReaderIndex();
 
-      serverMessage.decode(buffer);
-
-      serverMessage.getBody().resetReaderIndex();
-
       requiresResponse = buffer.readBoolean();
+      
+      //reset the writer index back one boolean since when we deliver to the client we will write the extra fields on here
+      
+      //buffer.setIndex(0, buffer.writerIndex() - DataConstants.SIZE_BOOLEAN);
+      
+      log.info("SEND MESSAGE DECODE, WRITER INDEX IS " + buffer.writerIndex());
    }
 
    public int getRequiredBufferSize()
    {
-      int size = BASIC_PACKET_SIZE + clientMessage.getEncodeSize() + DataConstants.SIZE_BOOLEAN;
+      int size = PACKET_HEADERS_SIZE + sentMessage.getEncodeSize() + DataConstants.SIZE_BOOLEAN;
 
       return size;
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXACommitMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXACommitMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXACommitMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -64,18 +64,18 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + XidCodecSupport.getXidEncodeLength(xid) + DataConstants.SIZE_BOOLEAN;
+      return PACKET_HEADERS_SIZE + XidCodecSupport.getXidEncodeLength(xid) + DataConstants.SIZE_BOOLEAN;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       XidCodecSupport.encodeXid(xid, buffer);
       buffer.writeBoolean(onePhase);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       xid = XidCodecSupport.decodeXid(buffer);
       onePhase = buffer.readBoolean();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAEndMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAEndMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAEndMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -66,16 +66,16 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + XidCodecSupport.getXidEncodeLength(xid) + DataConstants.SIZE_BOOLEAN;
+      return PACKET_HEADERS_SIZE + XidCodecSupport.getXidEncodeLength(xid) + DataConstants.SIZE_BOOLEAN;
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       XidCodecSupport.encodeXid(xid, buffer);
       buffer.writeBoolean(failed);
    }
    
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       xid = XidCodecSupport.decodeXid(buffer);
       failed = buffer.readBoolean();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAForgetMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAForgetMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAForgetMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -56,15 +56,15 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + XidCodecSupport.getXidEncodeLength(xid);
+      return PACKET_HEADERS_SIZE + XidCodecSupport.getXidEncodeLength(xid);
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       XidCodecSupport.encodeXid(xid, buffer);
    }
    
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       xid = XidCodecSupport.decodeXid(buffer);
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAGetInDoubtXidsResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAGetInDoubtXidsResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAGetInDoubtXidsResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -65,7 +65,7 @@
 
    public int getRequiredBufferSize()
    {
-      int size = BASIC_PACKET_SIZE + DataConstants.SIZE_INT;
+      int size = PACKET_HEADERS_SIZE + DataConstants.SIZE_INT;
       for (Xid xid : xids)
       {
          size += XidCodecSupport.getXidEncodeLength(xid);
@@ -74,7 +74,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(xids.size());
 
@@ -85,7 +85,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       int len = buffer.readInt();
       xids = new ArrayList<Xid>(len);

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAGetTimeoutResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAGetTimeoutResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAGetTimeoutResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -59,15 +59,15 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_INT;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_INT;
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(timeoutSeconds);
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       timeoutSeconds = buffer.readInt();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAJoinMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAJoinMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAJoinMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -56,15 +56,15 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + XidCodecSupport.getXidEncodeLength(xid);
+      return PACKET_HEADERS_SIZE + XidCodecSupport.getXidEncodeLength(xid);
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       XidCodecSupport.encodeXid(xid, buffer);
    }
    
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       xid = XidCodecSupport.decodeXid(buffer);
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAPrepareMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAPrepareMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAPrepareMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -55,15 +55,15 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + XidCodecSupport.getXidEncodeLength(xid);
+      return PACKET_HEADERS_SIZE + XidCodecSupport.getXidEncodeLength(xid);
    }
 
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       XidCodecSupport.encodeXid(xid, buffer);
    }
 
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       xid = XidCodecSupport.decodeXid(buffer);
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -57,7 +57,7 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BOOLEAN +
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BOOLEAN +
              DataConstants.SIZE_INT +
              nullableStringEncodeSize(message);
    }
@@ -84,7 +84,7 @@
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeBoolean(error);
       buffer.writeInt(responseCode);
@@ -92,7 +92,7 @@
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       error = buffer.readBoolean();
       responseCode = buffer.readInt();

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAResumeMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAResumeMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAResumeMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -55,17 +55,17 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + XidCodecSupport.getXidEncodeLength(xid);
+      return PACKET_HEADERS_SIZE + XidCodecSupport.getXidEncodeLength(xid);
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       XidCodecSupport.encodeXid(xid, buffer);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       xid = XidCodecSupport.decodeXid(buffer);
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXARollbackMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXARollbackMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXARollbackMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -55,17 +55,17 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + XidCodecSupport.getXidEncodeLength(xid);
+      return PACKET_HEADERS_SIZE + XidCodecSupport.getXidEncodeLength(xid);
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       XidCodecSupport.encodeXid(xid, buffer);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       xid = XidCodecSupport.decodeXid(buffer);
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXASetTimeoutMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXASetTimeoutMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXASetTimeoutMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -54,17 +54,17 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_INT;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_INT;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeInt(timeoutSeconds);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       timeoutSeconds = buffer.readInt();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXASetTimeoutResponseMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXASetTimeoutResponseMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXASetTimeoutResponseMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -60,17 +60,17 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + DataConstants.SIZE_BOOLEAN;
+      return PACKET_HEADERS_SIZE + DataConstants.SIZE_BOOLEAN;
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       buffer.writeBoolean(ok);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       ok = buffer.readBoolean();
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAStartMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAStartMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/impl/wireformat/SessionXAStartMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -55,17 +55,17 @@
 
    public int getRequiredBufferSize()
    {
-      return BASIC_PACKET_SIZE + XidCodecSupport.getXidEncodeLength(xid);
+      return PACKET_HEADERS_SIZE + XidCodecSupport.getXidEncodeLength(xid);
    }
 
    @Override
-   public void encodeBody(final HornetQBuffer buffer)
+   public void encodeRest(final HornetQBuffer buffer)
    {
       XidCodecSupport.encodeXid(xid, buffer);
    }
 
    @Override
-   public void decodeBody(final HornetQBuffer buffer)
+   public void decodeRest(final HornetQBuffer buffer)
    {
       xid = XidCodecSupport.decodeXid(buffer);
    }

Modified: branches/20-optimisation/src/main/org/hornetq/core/remoting/spi/HornetQBuffer.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/remoting/spi/HornetQBuffer.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/remoting/spi/HornetQBuffer.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -67,6 +67,8 @@
    void readBytes(byte[] bytes, int offset, int length);
 
    int readInt();
+   
+   int readInt(int pos);
 
    long readLong();
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/server/RoutingContext.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/server/RoutingContext.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/server/RoutingContext.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -32,11 +32,10 @@
    
    void addQueue(Queue queue);
    
-   List<Queue> getQueues();
+   List<Queue> getNonDurableQueues();
    
-   //void incrementDepth();
+   List<Queue> getDurableQueues();
    
-  // void decrementDepth();
-   
-   //int getDepth();
+   int getQueueCount();
+
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/server/cluster/impl/RemoteQueueBindingImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/server/cluster/impl/RemoteQueueBindingImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/server/cluster/impl/RemoteQueueBindingImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -200,11 +200,11 @@
       
       message.putBytesProperty(idsHeaderName, ids);
       
-      if (!context.getQueues().contains(this.storeAndForwardQueue))
+      if (!context.getDurableQueues().contains(this.storeAndForwardQueue))
       {
          //There can be many remote bindings for the same node, we only want to add the message once to 
          //the s & f queue for that node
-         context.getQueues().add(storeAndForwardQueue);
+         context.getDurableQueues().add(storeAndForwardQueue);
       }
    }
    

Modified: branches/20-optimisation/src/main/org/hornetq/core/server/impl/HornetQServerImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/server/impl/HornetQServerImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/server/impl/HornetQServerImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -31,6 +31,7 @@
 
 import javax.management.MBeanServer;
 
+import org.hornetq.core.buffers.ChannelBuffers;
 import org.hornetq.core.client.ClientSessionFactory;
 import org.hornetq.core.client.impl.ClientSessionFactoryImpl;
 import org.hornetq.core.client.impl.FailoverManager;
@@ -66,6 +67,7 @@
 import org.hornetq.core.persistence.impl.journal.JournalStorageManager;
 import org.hornetq.core.persistence.impl.nullpm.NullStorageManager;
 import org.hornetq.core.postoffice.Binding;
+import org.hornetq.core.postoffice.Bindings;
 import org.hornetq.core.postoffice.DuplicateIDCache;
 import org.hornetq.core.postoffice.PostOffice;
 import org.hornetq.core.postoffice.impl.DivertBinding;
@@ -92,6 +94,7 @@
 import org.hornetq.core.server.MemoryManager;
 import org.hornetq.core.server.Queue;
 import org.hornetq.core.server.QueueFactory;
+import org.hornetq.core.server.ServerMessage;
 import org.hornetq.core.server.ServerSession;
 import org.hornetq.core.server.cluster.ClusterManager;
 import org.hornetq.core.server.cluster.Transformer;
@@ -591,7 +594,7 @@
                                                      final boolean preAcknowledge,
                                                      final boolean xa,
                                                      final int sendWindowSize) throws Exception
-   {      
+   {
       if (!started)
       {
          throw new HornetQException(HornetQException.SESSION_CREATION_REJECTED, "Server not started");
@@ -1161,6 +1164,11 @@
       }
 
       initialised = true;
+
+      if (System.getProperty("org.hornetq.opt.routeblast") != null)
+      {
+         runRouteBlast();
+      }
    }
 
    /**
@@ -1448,6 +1456,82 @@
       }
    }
 
+   private void runRouteBlast() throws Exception
+   {
+      final int numThreads = 20;
+
+      List<Thread> threads = new ArrayList<Thread>();
+      for (int i = 0; i < numThreads; i++)
+      {
+         RouteBlastRunner runner = new RouteBlastRunner(new SimpleString("rbrunneraddress" + i));
+         
+         threads.add(runner);
+         
+         runner.start();
+      }
+      
+      for (Thread t: threads)
+      {
+         t.join();
+      }
+   }
+
+   class RouteBlastRunner extends Thread
+   {
+      private SimpleString address;
+
+      RouteBlastRunner(SimpleString address)
+      {
+         this.address = address;
+      }
+
+      private void runRouteBlast(final SimpleString address) throws Exception
+      {
+         log.info("**** RUNNING ROUTE BLAST ****");
+
+         final int numQueues = 1;
+
+         for (int i = 0; i < numQueues; i++)
+         {
+            createQueue(address, new SimpleString(address + ".hq.route_blast_queue" + i), null, true, false, true);
+         }
+
+         final int numMessages = 10000000;
+
+         final int bodySize = 1024;
+
+         byte[] body = new byte[bodySize];
+
+         for (int i = 0; i < numMessages; i++)
+         {
+            ServerMessage msg = new ServerMessageImpl(storageManager.generateUniqueID(), ChannelBuffers.wrappedBuffer(body));
+
+            msg.setDestination(address);
+
+            msg.setDurable(true);
+
+            postOffice.route(msg);
+
+            //log.info("** routed " + i);
+            
+         }
+
+         log.info("*** END ROUTE BLAST TEST *****");
+      }
+
+      public void run()
+      {
+         try
+         {
+            this.runRouteBlast(address);
+         }
+         catch (Exception e)
+         {
+            log.error("Failed to run routeblast", e);
+         }
+      }
+   }
+
    // Inner classes
    // --------------------------------------------------------------------------------
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/server/impl/QueueImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/server/impl/QueueImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/server/impl/QueueImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -132,6 +132,8 @@
    private volatile SimpleString expiryAddress;
 
    private int pos;
+   
+   private final boolean dontAdd;
 
    public QueueImpl(final long id,
                     final SimpleString address,
@@ -176,6 +178,8 @@
       {
          expiryAddress = null;
       }
+      
+      this.dontAdd = System.getProperty("org.hornetq.opt.dontadd") != null;
    }
 
    // Bindable implementation -------------------------------------------------------------------------------------
@@ -1286,6 +1290,11 @@
 
    protected synchronized void add(final MessageReference ref, final boolean first)
    {
+      if (dontAdd)
+      {
+         return;
+      }
+      
       if (!first)
       {
          messagesAdded.incrementAndGet();

Modified: branches/20-optimisation/src/main/org/hornetq/core/server/impl/RoutingContextImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/server/impl/RoutingContextImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/server/impl/RoutingContextImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -29,12 +29,14 @@
  */
 public class RoutingContextImpl implements RoutingContext
 {
-   private final List<Queue> queues = new ArrayList<Queue>();
+   private final List<Queue> nonDurableQueues = new ArrayList<Queue>(1);
+   
+   private final List<Queue> durableQueues = new ArrayList<Queue>(1);
 
    private Transaction transaction;
+   
+   private int queueCount;
 
-   private int depth;
-
    public RoutingContextImpl(final Transaction transaction)
    {
       this.transaction = transaction;
@@ -42,8 +44,22 @@
 
    public void addQueue(final Queue queue)
    {
-      queues.add(queue);
+      if (queue.isDurable())
+      {
+         durableQueues.add(queue);  
+      }
+      else
+      {
+         nonDurableQueues.add(queue);
+      }
+      
+      queueCount++;
    }
+   
+   public void addDurableQueue(final Queue queue)
+   {
+      durableQueues.add(queue);
+   }
 
    public Transaction getTransaction()
    {
@@ -55,24 +71,20 @@
       transaction = tx;
    }
 
-   public List<Queue> getQueues()
+   public List<Queue> getNonDurableQueues()
    {
-      return queues;
+      return nonDurableQueues;
    }
-
-   public void decrementDepth()
+   
+   public List<Queue> getDurableQueues()
    {
-      depth--;
+      return durableQueues;
    }
-
-   public int getDepth()
+   
+   public int getQueueCount()
    {
-      return depth;
+      return queueCount;
    }
 
-   public void incrementDepth()
-   {
-      depth++;
-   }
 
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerConsumerImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerConsumerImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerConsumerImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -36,6 +36,7 @@
 import org.hornetq.core.postoffice.QueueBinding;
 import org.hornetq.core.remoting.Channel;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveContinuationMessage;
+import org.hornetq.core.remoting.impl.wireformat.SessionReceiveLargeMessage;
 import org.hornetq.core.remoting.impl.wireformat.SessionReceiveMessage;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
 import org.hornetq.core.server.HandleStatus;
@@ -315,7 +316,8 @@
 
          props.putSimpleStringProperty(ManagementHelper.HDR_ROUTING_NAME, binding.getRoutingName());
 
-         props.putSimpleStringProperty(ManagementHelper.HDR_FILTERSTRING, filter == null ? null : filter.getFilterString());
+         props.putSimpleStringProperty(ManagementHelper.HDR_FILTERSTRING, filter == null ? null
+                                                                                        : filter.getFilterString());
 
          props.putIntProperty(ManagementHelper.HDR_DISTANCE, binding.getDistance());
 
@@ -344,8 +346,9 @@
          {
             promptDelivery(false);
 
-            ServerMessage forcedDeliveryMessage = new ServerMessageImpl(storageManager.generateUniqueID());
-            forcedDeliveryMessage.setBody(ChannelBuffers.EMPTY_BUFFER);
+            ServerMessage forcedDeliveryMessage = new ServerMessageImpl(storageManager.generateUniqueID(),
+                                                                        ChannelBuffers.EMPTY_BUFFER);
+
             forcedDeliveryMessage.putLongProperty(ClientConsumerImpl.FORCED_DELIVERY_MESSAGE, sequence);
             forcedDeliveryMessage.setDestination(messageQueue.getName());
 
@@ -581,6 +584,8 @@
          availableCredits.addAndGet(-packet.getRequiredBufferSize());
       }
 
+      log.info("*** delivering message to client");
+      
       channel.send(packet);
    }
 
@@ -668,10 +673,10 @@
 
                largeMessage.encodeHeadersAndProperties(headerBuffer);
 
-               SessionReceiveMessage initialPacket = new SessionReceiveMessage(id,
-                                                                               headerBuffer.array(),
-                                                                               largeMessage.getLargeBodySize(),
-                                                                               ref.getDeliveryCount());
+               SessionReceiveLargeMessage initialPacket = new SessionReceiveLargeMessage(id,
+                                                                                         headerBuffer.array(),
+                                                                                         largeMessage.getLargeBodySize(),
+                                                                                         ref.getDeliveryCount());
 
                context = largeMessage.getBodyEncoder();
 

Modified: branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerMessageImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerMessageImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerMessageImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -13,16 +13,20 @@
 
 package org.hornetq.core.server.impl;
 
+import java.io.InputStream;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.hornetq.core.logging.Logger;
+import org.hornetq.core.message.Message;
 import org.hornetq.core.message.impl.MessageImpl;
 import org.hornetq.core.paging.PagingStore;
+import org.hornetq.core.remoting.impl.wireformat.PacketImpl;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
 import org.hornetq.core.server.MessageReference;
 import org.hornetq.core.server.Queue;
 import org.hornetq.core.server.ServerMessage;
 import org.hornetq.utils.SimpleString;
+import org.hornetq.utils.TypedProperties;
 
 /**
  * 
@@ -61,30 +65,47 @@
    {
       super(messageID);
    }
-
-   public ServerMessageImpl(final ServerMessageImpl other)
+   
+   /*
+    * Constructor when creating a ServerMessage for sending - e.g. notification
+    */
+   public ServerMessageImpl(final long messageID, final HornetQBuffer buffer)
    {
-      super(other);
+      super(messageID);
+      
+      this.buffer = buffer;
    }
-
-   public ServerMessageImpl(final ServerMessage other)
-   {
-      super(other);
-   }
-
-   /**
-    * Only used in testing
+      
+   /*
+    * Copy constructor
     */
-   public ServerMessageImpl(final byte type,
-                            final boolean durable,
-                            final long expiration,
-                            final long timestamp,
-                            final byte priority,
-                            final HornetQBuffer buffer)
+   protected ServerMessageImpl(final Message other)
    {
-      super(type, durable, expiration, timestamp, priority, buffer);
+      this();
+      messageID = other.getMessageID();
+      destination = other.getDestination();
+      type = other.getType();
+      durable = other.isDurable();
+      expiration = other.getExpiration();
+      timestamp = other.getTimestamp();
+      priority = other.getPriority();
+      properties = new TypedProperties(other.getProperties());
+      buffer = other.getBuffer();
    }
 
+//   /**
+//    * Only used in testing
+//    */
+//   public ServerMessageImpl(final byte type,
+//                            final boolean durable,
+//                            final long expiration,
+//                            final long timestamp,
+//                            final byte priority,
+//                            final HornetQBuffer buffer)
+//   {
+//      super(type, durable, expiration, timestamp, priority, buffer);
+//   }
+
    public void setMessageID(final long id)
    {
       messageID = id;
@@ -283,6 +304,27 @@
          return false;
       }
    }
+   
+   // EncodingSupport implementation
+   
+   // Used when storing to/from journal
+   
+   //TODO - this can be further optimised, so when writing into the journal, we just write the message's already existing
+   //buffer directly into the timed buffer, the journal specific headers can be added in the timed buffer when the smaller
+   //buffer is copied into the timed buffer's larger buffer
+   
+   public void encode(HornetQBuffer buffer)
+   {
+      //FIXME - this won't work
+      buffer.writeBytes(buffer, PacketImpl.PACKET_HEADERS_SIZE, 0);  
+   }
+   
+//   public void decode(HornetQBuffer buffer)
+//   {
+//      this.decodeHeadersAndProperties(buffer);
+//      
+//      this.buffer = buffer;
+//   }
 
    @Override
    public String toString()
@@ -294,5 +336,13 @@
              getDestination() +
              "]";
    }
+   
+   //FIXME - this is stuff that is only used in large messages
+   
+   //This is only valid on the client side - why is it here?
+   public InputStream getBodyInputStream()
+   {
+      return null;
+   }
 
 }

Modified: branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerSessionImpl.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerSessionImpl.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/core/server/impl/ServerSessionImpl.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -114,30 +114,29 @@
 
    // Static -------------------------------------------------------------------------------
    
-   private static int offset;
+   //TODO not actually used currently
+//   private static int offset;
+//
+//   static
+//   {
+//      try
+//      {
+//         ServerMessage msg = new ServerMessageImpl(1, ChannelBuffers.EMPTY_BUFFER);
+//
+//         msg.setDestination(new SimpleString("foobar"));
+//   
+//         int es = msg.getEncodeSize();
+//   
+//         int me = msg.getMemoryEstimate();
+//   
+//         offset = MessageReferenceImpl.getMemoryEstimate() + me - es;
+//      }
+//      catch (Exception e)
+//      {
+//         log.error("Failed to initialise mult and offset", e);
+//      }
+//   }
 
-   static
-   {
-      try
-      {
-         ServerMessage msg = new ServerMessageImpl();
-         
-         msg.setBody(ChannelBuffers.dynamicBuffer(0));
-   
-         msg.setDestination(new SimpleString("foobar"));
-   
-         int es = msg.getEncodeSize();
-   
-         int me = msg.getMemoryEstimate();
-   
-         offset = MessageReferenceImpl.getMemoryEstimate() + me - es;
-      }
-      catch (Exception e)
-      {
-         log.error("Failed to initialise mult and offset", e);
-      }
-   }
-
    // Attributes ----------------------------------------------------------------------------
 
    private final long id;
@@ -1456,9 +1455,13 @@
 
    public void handleSend(final SessionSendMessage packet)
    {
+      log.info("Got message on server");
+      
       Packet response = null;
 
       ServerMessage message = packet.getServerMessage();
+      
+      log.info("server message is " + message);
 
       try
       {
@@ -1943,7 +1946,7 @@
    {      
       holder.outstandingCredits += credits;
 
-      Packet packet = new SessionProducerCreditsMessage(credits, address, offset);
+      Packet packet = new SessionProducerCreditsMessage(credits, address, -1);
 
       channel.send(packet);
    }

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/ChannelBufferWrapper.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/ChannelBufferWrapper.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/ChannelBufferWrapper.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -20,11 +20,6 @@
 import org.jboss.netty.buffer.ChannelBuffer;
 
 /**
- * Wraps Netty {@link ChannelBuffer} with {@link HornetQBuffer}.
- * Because there's neither {@code position()} nor {@code limit()} in a Netty
- * buffer.  {@link ChannelBuffer#readerIndex()} and {@link ChannelBuffer#writerIndex()}
- * are used as {@code position} and {@code limit} of the buffer respectively
- * instead.
  *
  * @author <a href="mailto:tlee at redhat.com">Trustin Lee</a>
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
@@ -35,7 +30,6 @@
  */
 public class ChannelBufferWrapper implements HornetQBuffer
 {
-
    private final ChannelBuffer buffer;
 
    /**
@@ -96,6 +90,11 @@
    {
       return buffer.readInt();
    }
+   
+   public int readInt(final int pos)
+   {
+      return buffer.getInt(pos);
+   }
 
    public long readLong()
    {
@@ -156,12 +155,12 @@
    {
       buffer.writeBytes(src, srcIndex, length);
    }
-   
-   public void writeBytes(HornetQBuffer src, int srcIndex, int length)
+
+   public void writeBytes(final HornetQBuffer src, final int srcIndex, final int length)
    {
       byte bytes[] = new byte[length];
       src.readBytes(bytes, srcIndex, length);
-      this.writeBytes(bytes);      
+      this.writeBytes(bytes);
    }
 
    public void writeBytes(final byte[] src)

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HornetQChannelHandler.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HornetQChannelHandler.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HornetQChannelHandler.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -17,6 +17,7 @@
 import org.hornetq.core.remoting.spi.BufferHandler;
 import org.hornetq.core.remoting.spi.ConnectionLifeCycleListener;
 import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.ChannelStateEvent;
 import org.jboss.netty.channel.ExceptionEvent;
@@ -35,14 +36,16 @@
    private static final Logger log = Logger.getLogger(HornetQChannelHandler.class);
 
    private final ChannelGroup group;
-   
+
    private final BufferHandler handler;
 
    private final ConnectionLifeCycleListener listener;
 
    volatile boolean active;
 
-   HornetQChannelHandler(ChannelGroup group, BufferHandler handler, ConnectionLifeCycleListener listener)
+   HornetQChannelHandler(final ChannelGroup group,
+                         final BufferHandler handler,
+                         final ConnectionLifeCycleListener listener)
    {
       this.group = group;
       this.handler = handler;
@@ -50,42 +53,42 @@
    }
 
    @Override
-   public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception
+   public void channelOpen(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception
    {
       group.add(e.getChannel());
       ctx.sendUpstream(e);
    }
 
    @Override
-   public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception
+   public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent e) throws Exception
    {
       ChannelBuffer buffer = (ChannelBuffer)e.getMessage();
-      
+
       handler.bufferReceived(e.getChannel().getId(), new ChannelBufferWrapper(buffer));
    }
 
    @Override
-   public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception
+   public void channelDisconnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception
    {
       synchronized (this)
       {
          if (active)
          {
             listener.connectionDestroyed(e.getChannel().getId());
-            
+
             active = false;
          }
       }
    }
 
    @Override
-   public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception
+   public void channelClosed(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception
    {
       active = false;
    }
 
    @Override
-   public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception
+   public void exceptionCaught(final ChannelHandlerContext ctx, final ExceptionEvent e) throws Exception
    {
       synchronized (this)
       {
@@ -93,9 +96,9 @@
          {
             return;
          }
-         
+
          log.error("Got exception on Netty channel", e.getCause());
-                  
+
          HornetQException me = new HornetQException(HornetQException.INTERNAL_ERROR, "Netty exception");
          me.initCause(e.getCause());
          try

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HornetQFrameDecoder.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HornetQFrameDecoder.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HornetQFrameDecoder.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -17,7 +17,9 @@
 
 import org.hornetq.core.logging.Logger;
 import org.hornetq.core.remoting.spi.BufferHandler;
+import org.hornetq.utils.DataConstants;
 import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.handler.codec.frame.FrameDecoder;
@@ -46,19 +48,34 @@
    // -------------------------------------------------------------------------------------
 
    @Override
-   protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer in) throws Exception
+   protected Object decode(final ChannelHandlerContext ctx, final Channel channel, final ChannelBuffer in) throws Exception
    {
       // TODO - we can avoid this entirely if we maintain fragmented packets in the handler
       int start = in.readerIndex();
 
       int length = handler.isReadyToHandle(new ChannelBufferWrapper(in));
+      
+      in.readerIndex(start);
+      
       if (length == -1)
-      {
-         in.readerIndex(start);
+      {                 
          return null;
       }
 
-      in.readerIndex(start + SIZE_INT);
-      return in.readBytes(length);
+      //in.readerIndex(start + SIZE_INT);
+      
+      ChannelBuffer buffer = in.readBytes(length + DataConstants.SIZE_INT);
+      
+      // FIXME - we should get Netty to give us a DynamicBuffer - seems to currently give us a non resizable buffer
+
+      ChannelBuffer newBuffer = ChannelBuffers.dynamicBuffer(buffer.writerIndex());
+      
+      newBuffer.writeBytes(buffer);
+      
+      newBuffer.readInt();
+      
+     // log.info("Now ri, wi " + newBuffer.readerIndex() + ", " + newBuffer.writerIndex());
+      
+      return newBuffer;
    }
 }

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HttpAcceptorHandler.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HttpAcceptorHandler.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HttpAcceptorHandler.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -56,13 +56,14 @@
 
    private Channel channel;
 
-   public HttpAcceptorHandler(final HttpKeepAliveRunnable httpKeepAliveTask, long responseTime)
+   public HttpAcceptorHandler(final HttpKeepAliveRunnable httpKeepAliveTask, final long responseTime)
    {
       super();
       this.responseTime = responseTime;
       this.httpKeepAliveTask = httpKeepAliveTask;
    }
 
+   @Override
    public void channelConnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception
    {
       super.channelConnected(ctx, e);
@@ -70,6 +71,7 @@
       httpKeepAliveTask.registerKeepAliveHandler(this);
    }
 
+   @Override
    public void channelDisconnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception
    {
       super.channelDisconnected(ctx, e);
@@ -85,9 +87,7 @@
       // if we are a post then we send upstream, otherwise we are just being prompted for a response.
       if (method.equals(HttpMethod.POST))
       {
-         MessageEvent event = new UpstreamMessageEvent(e.getChannel(),
-                                                      request.getContent(),
-                                                      e.getRemoteAddress());
+         MessageEvent event = new UpstreamMessageEvent(e.getChannel(), request.getContent(), e.getRemoteAddress());
          ctx.sendUpstream(event);
       }
       // add a new response
@@ -171,7 +171,8 @@
          {
             ChannelBuffer piggyBackBuffer = piggyBackResponses();
             responseHolder.response.setContent(piggyBackBuffer);
-            responseHolder.response.addHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(piggyBackBuffer.writerIndex()));
+            responseHolder.response.addHeader(HttpHeaders.Names.CONTENT_LENGTH,
+                                              String.valueOf(piggyBackBuffer.writerIndex()));
             channel.write(responseHolder.response);
          }
          else
@@ -223,7 +224,7 @@
 
       final long timeReceived;
 
-      public ResponseHolder(long timeReceived, HttpResponse response)
+      public ResponseHolder(final long timeReceived, final HttpResponse response)
       {
          this.timeReceived = timeReceived;
          this.response = response;

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HttpKeepAliveRunnable.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HttpKeepAliveRunnable.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/HttpKeepAliveRunnable.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -24,7 +24,9 @@
 public class HttpKeepAliveRunnable implements Runnable
 {
    private final List<HttpAcceptorHandler> handlers = new ArrayList<HttpAcceptorHandler>();
+
    private boolean closed = false;
+
    private Future<?> future;
 
    public synchronized void run()
@@ -33,7 +35,7 @@
       {
          return;
       }
-      
+
       long time = System.currentTimeMillis();
       for (HttpAcceptorHandler handler : handlers)
       {
@@ -41,12 +43,12 @@
       }
    }
 
-   public synchronized void registerKeepAliveHandler(HttpAcceptorHandler httpAcceptorHandler)
+   public synchronized void registerKeepAliveHandler(final HttpAcceptorHandler httpAcceptorHandler)
    {
       handlers.add(httpAcceptorHandler);
    }
 
-   public synchronized void unregisterKeepAliveHandler(HttpAcceptorHandler httpAcceptorHandler)
+   public synchronized void unregisterKeepAliveHandler(final HttpAcceptorHandler httpAcceptorHandler)
    {
       handlers.remove(httpAcceptorHandler);
    }
@@ -54,14 +56,14 @@
    public void close()
    {
       if (future != null)
-      {             
+      {
          future.cancel(false);
       }
 
-      closed  = true;
+      closed = true;
    }
 
-   public synchronized void setFuture(Future<?> future)
+   public synchronized void setFuture(final Future<?> future)
    {
       this.future = future;
    }

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyAcceptor.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyAcceptor.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyAcceptor.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -123,7 +123,7 @@
 
    private final HttpKeepAliveRunnable httpKeepAliveRunnable;
 
-   private ConcurrentMap<Object, Connection> connections = new ConcurrentHashMap<Object, Connection>();
+   private final ConcurrentMap<Object, Connection> connections = new ConcurrentHashMap<Object, Connection>();
 
    private final Executor threadPool;
 
@@ -139,13 +139,13 @@
 
       this.listener = listener;
 
-      this.sslEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.SSL_ENABLED_PROP_NAME,
-                                                               TransportConstants.DEFAULT_SSL_ENABLED,
-                                                               configuration);
+      sslEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.SSL_ENABLED_PROP_NAME,
+                                                          TransportConstants.DEFAULT_SSL_ENABLED,
+                                                          configuration);
 
-      this.httpEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.HTTP_ENABLED_PROP_NAME,
-                                                                TransportConstants.DEFAULT_HTTP_ENABLED,
-                                                                configuration);
+      httpEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.HTTP_ENABLED_PROP_NAME,
+                                                           TransportConstants.DEFAULT_HTTP_ENABLED,
+                                                           configuration);
 
       if (httpEnabled)
       {
@@ -168,51 +168,51 @@
          httpResponseTime = 0;
          httpKeepAliveRunnable = null;
       }
-      this.useNio = ConfigurationHelper.getBooleanProperty(TransportConstants.USE_NIO_PROP_NAME,
-                                                           TransportConstants.DEFAULT_USE_NIO,
-                                                           configuration);
+      useNio = ConfigurationHelper.getBooleanProperty(TransportConstants.USE_NIO_PROP_NAME,
+                                                      TransportConstants.DEFAULT_USE_NIO_SERVER,
+                                                      configuration);
 
-      this.useInvm = ConfigurationHelper.getBooleanProperty(TransportConstants.USE_INVM_PROP_NAME,
-                                                            TransportConstants.DEFAULT_USE_INVM,
-                                                            configuration);
-      this.host = ConfigurationHelper.getStringProperty(TransportConstants.HOST_PROP_NAME,
-                                                        TransportConstants.DEFAULT_HOST,
-                                                        configuration);
-      this.port = ConfigurationHelper.getIntProperty(TransportConstants.PORT_PROP_NAME,
-                                                     TransportConstants.DEFAULT_PORT,
-                                                     configuration);
+      useInvm = ConfigurationHelper.getBooleanProperty(TransportConstants.USE_INVM_PROP_NAME,
+                                                       TransportConstants.DEFAULT_USE_INVM,
+                                                       configuration);
+      host = ConfigurationHelper.getStringProperty(TransportConstants.HOST_PROP_NAME,
+                                                   TransportConstants.DEFAULT_HOST,
+                                                   configuration);
+      port = ConfigurationHelper.getIntProperty(TransportConstants.PORT_PROP_NAME,
+                                                TransportConstants.DEFAULT_PORT,
+                                                configuration);
       if (sslEnabled)
       {
-         this.keyStorePath = ConfigurationHelper.getStringProperty(TransportConstants.KEYSTORE_PATH_PROP_NAME,
-                                                                   TransportConstants.DEFAULT_KEYSTORE_PATH,
-                                                                   configuration);
-         this.keyStorePassword = ConfigurationHelper.getStringProperty(TransportConstants.KEYSTORE_PASSWORD_PROP_NAME,
-                                                                       TransportConstants.DEFAULT_KEYSTORE_PASSWORD,
-                                                                       configuration);
-         this.trustStorePath = ConfigurationHelper.getStringProperty(TransportConstants.TRUSTSTORE_PATH_PROP_NAME,
-                                                                     TransportConstants.DEFAULT_TRUSTSTORE_PATH,
-                                                                     configuration);
-         this.trustStorePassword = ConfigurationHelper.getStringProperty(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME,
-                                                                         TransportConstants.DEFAULT_TRUSTSTORE_PASSWORD,
-                                                                         configuration);
+         keyStorePath = ConfigurationHelper.getStringProperty(TransportConstants.KEYSTORE_PATH_PROP_NAME,
+                                                              TransportConstants.DEFAULT_KEYSTORE_PATH,
+                                                              configuration);
+         keyStorePassword = ConfigurationHelper.getStringProperty(TransportConstants.KEYSTORE_PASSWORD_PROP_NAME,
+                                                                  TransportConstants.DEFAULT_KEYSTORE_PASSWORD,
+                                                                  configuration);
+         trustStorePath = ConfigurationHelper.getStringProperty(TransportConstants.TRUSTSTORE_PATH_PROP_NAME,
+                                                                TransportConstants.DEFAULT_TRUSTSTORE_PATH,
+                                                                configuration);
+         trustStorePassword = ConfigurationHelper.getStringProperty(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME,
+                                                                    TransportConstants.DEFAULT_TRUSTSTORE_PASSWORD,
+                                                                    configuration);
       }
       else
       {
-         this.keyStorePath = null;
-         this.keyStorePassword = null;
-         this.trustStorePath = null;
-         this.trustStorePassword = null;
+         keyStorePath = null;
+         keyStorePassword = null;
+         trustStorePath = null;
+         trustStorePassword = null;
       }
 
-      this.tcpNoDelay = ConfigurationHelper.getBooleanProperty(TransportConstants.TCP_NODELAY_PROPNAME,
-                                                               TransportConstants.DEFAULT_TCP_NODELAY,
-                                                               configuration);
-      this.tcpSendBufferSize = ConfigurationHelper.getIntProperty(TransportConstants.TCP_SENDBUFFER_SIZE_PROPNAME,
-                                                                  TransportConstants.DEFAULT_TCP_SENDBUFFER_SIZE,
-                                                                  configuration);
-      this.tcpReceiveBufferSize = ConfigurationHelper.getIntProperty(TransportConstants.TCP_RECEIVEBUFFER_SIZE_PROPNAME,
-                                                                     TransportConstants.DEFAULT_TCP_RECEIVEBUFFER_SIZE,
-                                                                     configuration);
+      tcpNoDelay = ConfigurationHelper.getBooleanProperty(TransportConstants.TCP_NODELAY_PROPNAME,
+                                                          TransportConstants.DEFAULT_TCP_NODELAY,
+                                                          configuration);
+      tcpSendBufferSize = ConfigurationHelper.getIntProperty(TransportConstants.TCP_SENDBUFFER_SIZE_PROPNAME,
+                                                             TransportConstants.DEFAULT_TCP_SENDBUFFER_SIZE,
+                                                             configuration);
+      tcpReceiveBufferSize = ConfigurationHelper.getIntProperty(TransportConstants.TCP_RECEIVEBUFFER_SIZE_PROPNAME,
+                                                                TransportConstants.DEFAULT_TCP_RECEIVEBUFFER_SIZE,
+                                                                configuration);
 
       this.threadPool = threadPool;
    }
@@ -307,21 +307,24 @@
 
       paused = false;
 
-      if(!Version.ID.equals(VersionLoader.getVersion().getNettyVersion()))
+      if (!Version.ID.equals(VersionLoader.getVersion().getNettyVersion()))
       {
-          log.warn("Unexpected Netty Version was expecting " + VersionLoader.getVersion().getNettyVersion() + " using " + Version.ID);
+         log.warn("Unexpected Netty Version was expecting " + VersionLoader.getVersion().getNettyVersion() +
+                  " using " +
+                  Version.ID);
       }
 
       if (notificationService != null)
       {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("factory"), new SimpleString(NettyAcceptorFactory.class.getName()));
+         props.putSimpleStringProperty(new SimpleString("factory"),
+                                       new SimpleString(NettyAcceptorFactory.class.getName()));
          props.putSimpleStringProperty(new SimpleString("host"), new SimpleString(host));
          props.putIntProperty(new SimpleString("port"), port);
          Notification notification = new Notification(null, NotificationType.ACCEPTOR_STARTED, props);
          notificationService.sendNotification(notification);
       }
-      
+
       log.info("Started Netty Acceptor version " + Version.ID);
    }
 
@@ -366,7 +369,7 @@
          Iterator<Channel> iterator = future.getGroup().iterator();
          while (iterator.hasNext())
          {
-            Channel channel = (Channel)iterator.next();
+            Channel channel = iterator.next();
             if (channel.isBound())
             {
                log.warn(channel + " is still connected to " + channel.getRemoteAddress());
@@ -383,11 +386,12 @@
       }
 
       connections.clear();
-    
+
       if (notificationService != null)
       {
          TypedProperties props = new TypedProperties();
-         props.putSimpleStringProperty(new SimpleString("factory"), new SimpleString(NettyAcceptorFactory.class.getName()));
+         props.putSimpleStringProperty(new SimpleString("factory"),
+                                       new SimpleString(NettyAcceptorFactory.class.getName()));
          props.putSimpleStringProperty(new SimpleString("host"), new SimpleString(host));
          props.putIntProperty(new SimpleString("port"), port);
          Notification notification = new Notification(null, NotificationType.ACCEPTOR_STOPPED, props);
@@ -401,13 +405,13 @@
             e.printStackTrace();
          }
       }
-      
+
       paused = false;
    }
 
    public boolean isStarted()
    {
-      return (channelFactory != null);
+      return channelFactory != null;
    }
 
    private boolean paused;
@@ -455,19 +459,21 @@
    {
       this.notificationService = notificationService;
    }
-   
+
    // Inner classes -----------------------------------------------------------------------------
 
    @ChannelPipelineCoverage("one")
    private final class HornetQServerChannelHandler extends HornetQChannelHandler
    {
-      HornetQServerChannelHandler(ChannelGroup group, BufferHandler handler, ConnectionLifeCycleListener listener)
+      HornetQServerChannelHandler(final ChannelGroup group,
+                                  final BufferHandler handler,
+                                  final ConnectionLifeCycleListener listener)
       {
          super(group, handler, listener);
       }
 
       @Override
-      public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception
+      public void channelConnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception
       {
          new NettyConnection(e.getChannel(), new Listener());
 
@@ -476,7 +482,7 @@
          {
             sslHandler.handshake(e.getChannel()).addListener(new ChannelFutureListener()
             {
-               public void operationComplete(ChannelFuture future) throws Exception
+               public void operationComplete(final ChannelFuture future) throws Exception
                {
                   if (future.isSuccess())
                   {
@@ -521,6 +527,7 @@
          // Execute on different thread to avoid deadlocks
          new Thread()
          {
+            @Override
             public void run()
             {
                listener.connectionException(connectionID, me);

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyAcceptorFactory.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyAcceptorFactory.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyAcceptorFactory.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -38,7 +38,7 @@
    {
       return new NettyAcceptor(configuration, handler, listener, threadPool, scheduledThreadPool);
    }
-   
+
    public Set<String> getAllowableProperties()
    {
       return TransportConstants.ALLOWABLE_ACCEPTOR_KEYS;

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnection.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnection.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnection.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -18,6 +18,7 @@
 import org.hornetq.core.remoting.spi.Connection;
 import org.hornetq.core.remoting.spi.ConnectionLifeCycleListener;
 import org.hornetq.core.remoting.spi.HornetQBuffer;
+import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelFuture;
 import org.jboss.netty.handler.ssl.SslHandler;
@@ -32,16 +33,15 @@
 public class NettyConnection implements Connection
 {
    // Constants -----------------------------------------------------
-   
+
    private static final Logger log = Logger.getLogger(NettyConnection.class);
 
-
    // Attributes ----------------------------------------------------
 
    private final Channel channel;
 
    private boolean closed;
-   
+
    private final ConnectionLifeCycleListener listener;
 
    // Static --------------------------------------------------------
@@ -49,12 +49,12 @@
    // Constructors --------------------------------------------------
 
    public NettyConnection(final Channel channel, final ConnectionLifeCycleListener listener)
-   {      
+   {
       this.channel = channel;
-      
+
       this.listener = listener;
-      
-      listener.connectionCreated(this);           
+
+      listener.connectionCreated(this);
    }
 
    // Public --------------------------------------------------------
@@ -67,14 +67,14 @@
       {
          return;
       }
-                  
+
       SslHandler sslHandler = (SslHandler)channel.getPipeline().get("ssl");
       if (sslHandler != null)
       {
          try
          {
             ChannelFuture sslCloseFuture = sslHandler.close(channel);
-            
+
             if (!sslCloseFuture.awaitUninterruptibly(10000))
             {
                log.warn("Timed out waiting for ssl close future to complete");
@@ -85,38 +85,44 @@
             // ignore
          }
       }
-      
+
       ChannelFuture closeFuture = channel.close();
-      
+
       if (!closeFuture.awaitUninterruptibly(10000))
       {
          log.warn("Timed out waiting for channel to close");
       }
-      
+
       closed = true;
-      
+
       listener.connectionDestroyed(getID());
    }
 
    public HornetQBuffer createBuffer(final int size)
    {
-      return new ChannelBufferWrapper(org.jboss.netty.buffer.ChannelBuffers.buffer(size));
+      ChannelBuffer cb = org.jboss.netty.buffer.ChannelBuffers.dynamicBuffer(size);
+      
+      HornetQBuffer buff = new ChannelBufferWrapper(cb);
+
+      return buff;
    }
 
    public Object getID()
    {
       return channel.getId();
    }
-   
+
    public void write(final HornetQBuffer buffer)
    {
       write(buffer, false);
    }
-   
+
    public void write(final HornetQBuffer buffer, final boolean flush)
    {
-      ChannelFuture future = channel.write(buffer.getUnderlyingBuffer());      
+      log.info("writing buffer " + buffer.readerIndex() + " writer " + buffer.writerIndex());
       
+      ChannelFuture future = channel.write(buffer.getUnderlyingBuffer());
+
       if (flush)
       {
          while (true)
@@ -124,16 +130,16 @@
             try
             {
                boolean ok = future.await(10000);
-               
+
                if (!ok)
                {
                   log.warn("Timed out waiting for packet to be flushed");
                }
-               
+
                break;
             }
             catch (InterruptedException ignore)
-            {            
+            {
             }
          }
       }
@@ -143,7 +149,7 @@
    {
       return channel.getRemoteAddress().toString();
    }
-   
+
    public void fail(final HornetQException me)
    {
       listener.connectionException(channel.getId(), me);

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnector.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnector.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnector.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -126,13 +126,13 @@
 
    private final int tcpReceiveBufferSize;
 
-   private ConcurrentMap<Object, Connection> connections = new ConcurrentHashMap<Object, Connection>();
+   private final ConcurrentMap<Object, Connection> connections = new ConcurrentHashMap<Object, Connection>();
 
    private final String servletPath;
 
    private final VirtualExecutorService virtualExecutor;
 
-   private ScheduledExecutorService scheduledThreadPool;
+   private final ScheduledExecutorService scheduledThreadPool;
 
    // Static --------------------------------------------------------
 
@@ -155,75 +155,75 @@
       {
          throw new IllegalArgumentException("Invalid argument null handler");
       }
-      
+
       this.listener = listener;
 
       this.handler = handler;
 
-      this.sslEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.SSL_ENABLED_PROP_NAME,
-                                                               TransportConstants.DEFAULT_SSL_ENABLED,
-                                                               configuration);
-      this.httpEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.HTTP_ENABLED_PROP_NAME,
-                                                                TransportConstants.DEFAULT_HTTP_ENABLED,
-                                                                configuration);
+      sslEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.SSL_ENABLED_PROP_NAME,
+                                                          TransportConstants.DEFAULT_SSL_ENABLED,
+                                                          configuration);
+      httpEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.HTTP_ENABLED_PROP_NAME,
+                                                           TransportConstants.DEFAULT_HTTP_ENABLED,
+                                                           configuration);
       servletPath = ConfigurationHelper.getStringProperty(TransportConstants.SERVLET_PATH,
                                                           TransportConstants.DEFAULT_SERVLET_PATH,
                                                           configuration);
       if (httpEnabled)
       {
-         this.httpMaxClientIdleTime = ConfigurationHelper.getLongProperty(TransportConstants.HTTP_CLIENT_IDLE_PROP_NAME,
-                                                                          TransportConstants.DEFAULT_HTTP_CLIENT_IDLE_TIME,
-                                                                          configuration);
-         this.httpClientIdleScanPeriod = ConfigurationHelper.getLongProperty(TransportConstants.HTTP_CLIENT_IDLE_SCAN_PERIOD,
-                                                                             TransportConstants.DEFAULT_HTTP_CLIENT_SCAN_PERIOD,
-                                                                             configuration);
-         this.httpRequiresSessionId = ConfigurationHelper.getBooleanProperty(TransportConstants.HTTP_REQUIRES_SESSION_ID,
-                                                                             TransportConstants.DEFAULT_HTTP_REQUIRES_SESSION_ID,
-                                                                             configuration);
+         httpMaxClientIdleTime = ConfigurationHelper.getLongProperty(TransportConstants.HTTP_CLIENT_IDLE_PROP_NAME,
+                                                                     TransportConstants.DEFAULT_HTTP_CLIENT_IDLE_TIME,
+                                                                     configuration);
+         httpClientIdleScanPeriod = ConfigurationHelper.getLongProperty(TransportConstants.HTTP_CLIENT_IDLE_SCAN_PERIOD,
+                                                                        TransportConstants.DEFAULT_HTTP_CLIENT_SCAN_PERIOD,
+                                                                        configuration);
+         httpRequiresSessionId = ConfigurationHelper.getBooleanProperty(TransportConstants.HTTP_REQUIRES_SESSION_ID,
+                                                                        TransportConstants.DEFAULT_HTTP_REQUIRES_SESSION_ID,
+                                                                        configuration);
       }
       else
       {
-         this.httpMaxClientIdleTime = 0;
-         this.httpClientIdleScanPeriod = -1;
-         this.httpRequiresSessionId = false;
+         httpMaxClientIdleTime = 0;
+         httpClientIdleScanPeriod = -1;
+         httpRequiresSessionId = false;
       }
 
-      this.useNio = ConfigurationHelper.getBooleanProperty(TransportConstants.USE_NIO_PROP_NAME,
-                                                           TransportConstants.DEFAULT_USE_NIO,
-                                                           configuration);
-      this.useServlet = ConfigurationHelper.getBooleanProperty(TransportConstants.USE_SERVLET_PROP_NAME,
-                                                               TransportConstants.DEFAULT_USE_SERVLET,
-                                                               configuration);
-      this.host = ConfigurationHelper.getStringProperty(TransportConstants.HOST_PROP_NAME,
-                                                        TransportConstants.DEFAULT_HOST,
-                                                        configuration);
-      this.port = ConfigurationHelper.getIntProperty(TransportConstants.PORT_PROP_NAME,
-                                                     TransportConstants.DEFAULT_PORT,
-                                                     configuration);
+      useNio = ConfigurationHelper.getBooleanProperty(TransportConstants.USE_NIO_PROP_NAME,
+                                                      TransportConstants.DEFAULT_USE_NIO_CLIENT,
+                                                      configuration);
+      useServlet = ConfigurationHelper.getBooleanProperty(TransportConstants.USE_SERVLET_PROP_NAME,
+                                                          TransportConstants.DEFAULT_USE_SERVLET,
+                                                          configuration);
+      host = ConfigurationHelper.getStringProperty(TransportConstants.HOST_PROP_NAME,
+                                                   TransportConstants.DEFAULT_HOST,
+                                                   configuration);
+      port = ConfigurationHelper.getIntProperty(TransportConstants.PORT_PROP_NAME,
+                                                TransportConstants.DEFAULT_PORT,
+                                                configuration);
       if (sslEnabled)
       {
-         this.keyStorePath = ConfigurationHelper.getStringProperty(TransportConstants.KEYSTORE_PATH_PROP_NAME,
-                                                                   TransportConstants.DEFAULT_KEYSTORE_PATH,
-                                                                   configuration);
-         this.keyStorePassword = ConfigurationHelper.getStringProperty(TransportConstants.KEYSTORE_PASSWORD_PROP_NAME,
-                                                                       TransportConstants.DEFAULT_KEYSTORE_PASSWORD,
-                                                                       configuration);
+         keyStorePath = ConfigurationHelper.getStringProperty(TransportConstants.KEYSTORE_PATH_PROP_NAME,
+                                                              TransportConstants.DEFAULT_KEYSTORE_PATH,
+                                                              configuration);
+         keyStorePassword = ConfigurationHelper.getStringProperty(TransportConstants.KEYSTORE_PASSWORD_PROP_NAME,
+                                                                  TransportConstants.DEFAULT_KEYSTORE_PASSWORD,
+                                                                  configuration);
       }
       else
       {
-         this.keyStorePath = null;
-         this.keyStorePassword = null;
+         keyStorePath = null;
+         keyStorePassword = null;
       }
 
-      this.tcpNoDelay = ConfigurationHelper.getBooleanProperty(TransportConstants.TCP_NODELAY_PROPNAME,
-                                                               TransportConstants.DEFAULT_TCP_NODELAY,
-                                                               configuration);
-      this.tcpSendBufferSize = ConfigurationHelper.getIntProperty(TransportConstants.TCP_SENDBUFFER_SIZE_PROPNAME,
-                                                                  TransportConstants.DEFAULT_TCP_SENDBUFFER_SIZE,
-                                                                  configuration);
-      this.tcpReceiveBufferSize = ConfigurationHelper.getIntProperty(TransportConstants.TCP_RECEIVEBUFFER_SIZE_PROPNAME,
-                                                                     TransportConstants.DEFAULT_TCP_RECEIVEBUFFER_SIZE,
-                                                                     configuration);
+      tcpNoDelay = ConfigurationHelper.getBooleanProperty(TransportConstants.TCP_NODELAY_PROPNAME,
+                                                          TransportConstants.DEFAULT_TCP_NODELAY,
+                                                          configuration);
+      tcpSendBufferSize = ConfigurationHelper.getIntProperty(TransportConstants.TCP_SENDBUFFER_SIZE_PROPNAME,
+                                                             TransportConstants.DEFAULT_TCP_SENDBUFFER_SIZE,
+                                                             configuration);
+      tcpReceiveBufferSize = ConfigurationHelper.getIntProperty(TransportConstants.TCP_RECEIVEBUFFER_SIZE_PROPNAME,
+                                                                TransportConstants.DEFAULT_TCP_RECEIVEBUFFER_SIZE,
+                                                                configuration);
 
       virtualExecutor = new VirtualExecutorService(threadPool);
 
@@ -343,7 +343,7 @@
 
    public boolean isStarted()
    {
-      return (channelFactory != null);
+      return channelFactory != null;
    }
 
    public Connection createConnection()
@@ -433,7 +433,9 @@
    @ChannelPipelineCoverage("one")
    private final class HornetQClientChannelHandler extends HornetQChannelHandler
    {
-      HornetQClientChannelHandler(ChannelGroup group, BufferHandler handler, ConnectionLifeCycleListener listener)
+      HornetQClientChannelHandler(final ChannelGroup group,
+                                  final BufferHandler handler,
+                                  final ConnectionLifeCycleListener listener)
       {
          super(group, handler, listener);
       }
@@ -450,20 +452,21 @@
 
       private HttpIdleTimer task;
 
-      private String url = "http://" + host + ":" + port + servletPath;
+      private final String url = "http://" + host + ":" + port + servletPath;
 
-      private Future handShakeFuture = new Future();
+      private final Future handShakeFuture = new Future();
 
       private boolean active = false;
 
       private boolean handshaking = false;
 
-      private CookieDecoder cookieDecoder = new CookieDecoder();
+      private final CookieDecoder cookieDecoder = new CookieDecoder();
 
       private String cookie;
 
-      private CookieEncoder cookieEncoder = new CookieEncoder(false);
+      private final CookieEncoder cookieEncoder = new CookieEncoder(false);
 
+      @Override
       public void channelConnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception
       {
          super.channelConnected(ctx, e);
@@ -479,6 +482,7 @@
          }
       }
 
+      @Override
       public void channelClosed(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception
       {
          if (task != null)
@@ -605,6 +609,7 @@
             // Execute on different thread to avoid deadlocks
             new Thread()
             {
+               @Override
                public void run()
                {
                   listener.connectionDestroyed(connectionID);
@@ -618,6 +623,7 @@
          // Execute on different thread to avoid deadlocks
          new Thread()
          {
+            @Override
             public void run()
             {
                listener.connectionException(connectionID, me);

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnectorFactory.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnectorFactory.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/NettyConnectorFactory.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -33,15 +33,15 @@
    public Connector createConnector(final Map<String, Object> configuration,
                                     final BufferHandler handler,
                                     final ConnectionLifeCycleListener listener,
-                                    final Executor threadPool, 
+                                    final Executor threadPool,
                                     final ScheduledExecutorService scheduledThreadPool)
    {
       return new NettyConnector(configuration, handler, listener, threadPool, scheduledThreadPool);
    }
-   
+
    public Set<String> getAllowableProperties()
    {
       return TransportConstants.ALLOWABLE_CONNECTOR_KEYS;
    }
-   
+
 }

Modified: branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/TransportConstants.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/TransportConstants.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/integration/transports/netty/TransportConstants.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -66,8 +66,11 @@
 
    public static final boolean DEFAULT_SSL_ENABLED = false;
 
-   public static final boolean DEFAULT_USE_NIO = true;
+   public static final boolean DEFAULT_USE_NIO_SERVER = true;
 
+   // For client, using old IO can be quicker
+   public static final boolean DEFAULT_USE_NIO_CLIENT = false;
+
    public static final boolean DEFAULT_USE_INVM = false;
 
    public static final boolean DEFAULT_USE_SERVLET = false;
@@ -114,7 +117,7 @@
       allowableAcceptorKeys.add(SSL_ENABLED_PROP_NAME);
       allowableAcceptorKeys.add(HTTP_ENABLED_PROP_NAME);
       allowableAcceptorKeys.add(HTTP_RESPONSE_TIME_PROP_NAME);
-      allowableAcceptorKeys.add(HTTP_SERVER_SCAN_PERIOD_PROP_NAME);                  
+      allowableAcceptorKeys.add(HTTP_SERVER_SCAN_PERIOD_PROP_NAME);
       allowableAcceptorKeys.add(USE_NIO_PROP_NAME);
       allowableAcceptorKeys.add(USE_INVM_PROP_NAME);
       allowableAcceptorKeys.add(HOST_PROP_NAME);
@@ -126,26 +129,26 @@
       allowableAcceptorKeys.add(TCP_NODELAY_PROPNAME);
       allowableAcceptorKeys.add(TCP_SENDBUFFER_SIZE_PROPNAME);
       allowableAcceptorKeys.add(TCP_RECEIVEBUFFER_SIZE_PROPNAME);
-      
+
       ALLOWABLE_ACCEPTOR_KEYS = Collections.unmodifiableSet(allowableAcceptorKeys);
-      
+
       Set<String> allowableConnectorKeys = new HashSet<String>();
       allowableConnectorKeys.add(SSL_ENABLED_PROP_NAME);
       allowableConnectorKeys.add(HTTP_ENABLED_PROP_NAME);
       allowableConnectorKeys.add(HTTP_CLIENT_IDLE_PROP_NAME);
-      allowableConnectorKeys.add(HTTP_CLIENT_IDLE_SCAN_PERIOD);           
+      allowableConnectorKeys.add(HTTP_CLIENT_IDLE_SCAN_PERIOD);
       allowableConnectorKeys.add(HTTP_REQUIRES_SESSION_ID);
       allowableConnectorKeys.add(USE_SERVLET_PROP_NAME);
       allowableConnectorKeys.add(SERVLET_PATH);
-      allowableConnectorKeys.add(USE_NIO_PROP_NAME);      
+      allowableConnectorKeys.add(USE_NIO_PROP_NAME);
       allowableConnectorKeys.add(HOST_PROP_NAME);
       allowableConnectorKeys.add(PORT_PROP_NAME);
       allowableConnectorKeys.add(KEYSTORE_PATH_PROP_NAME);
-      allowableConnectorKeys.add(KEYSTORE_PASSWORD_PROP_NAME);          
+      allowableConnectorKeys.add(KEYSTORE_PASSWORD_PROP_NAME);
       allowableConnectorKeys.add(TCP_NODELAY_PROPNAME);
       allowableConnectorKeys.add(TCP_SENDBUFFER_SIZE_PROPNAME);
       allowableConnectorKeys.add(TCP_RECEIVEBUFFER_SIZE_PROPNAME);
-      
+
       ALLOWABLE_CONNECTOR_KEYS = Collections.unmodifiableSet(allowableConnectorKeys);
    }
 

Modified: branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQBytesMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQBytesMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQBytesMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -46,12 +46,10 @@
    public static final byte TYPE = 4;
 
    // Attributes ----------------------------------------------------
+   
+   private HornetQBuffer buffer;
 
    // Constructor ---------------------------------------------------
-   public HornetQBytesMessage()
-   {
-      super(HornetQBytesMessage.TYPE);
-   }
 
    /*
     * This constructor is used to construct messages prior to sending
@@ -94,7 +92,7 @@
       checkRead();
       try
       {
-         return getBody().readBoolean();
+         return buffer.readBoolean();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -107,7 +105,7 @@
       checkRead();
       try
       {
-         return getBody().readByte();
+         return buffer.readByte();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -120,7 +118,7 @@
       checkRead();
       try
       {
-         return getBody().readUnsignedByte();
+         return buffer.readUnsignedByte();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -133,7 +131,7 @@
       checkRead();
       try
       {
-         return getBody().readShort();
+         return buffer.readShort();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -146,7 +144,7 @@
       checkRead();
       try
       {
-         return getBody().readUnsignedShort();
+         return buffer.readUnsignedShort();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -159,7 +157,7 @@
       checkRead();
       try
       {
-         return getBody().readChar();
+         return buffer.readChar();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -172,7 +170,7 @@
       checkRead();
       try
       {
-         return getBody().readInt();
+         return buffer.readInt();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -185,7 +183,7 @@
       checkRead();
       try
       {
-         return getBody().readLong();
+         return buffer.readLong();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -198,7 +196,7 @@
       checkRead();
       try
       {
-         return getBody().readFloat();
+         return buffer.readFloat();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -211,7 +209,7 @@
       checkRead();
       try
       {
-         return getBody().readDouble();
+         return buffer.readDouble();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -224,7 +222,7 @@
       checkRead();
       try
       {
-         return getBody().readUTF();
+         return buffer.readUTF();
       }
       catch (IndexOutOfBoundsException e)
       {
@@ -248,13 +246,13 @@
    {
       checkRead();
 
-      if (!getBody().readable()) { return -1; }
+      if (!buffer.readable()) { return -1; }
 
-      int read = Math.min(length, getBody().readableBytes());
+      int read = Math.min(length, buffer.readableBytes());
 
       if (read != 0)
       {
-         getBody().readBytes(value, 0, read);
+         buffer.readBytes(value, 0, read);
       }
 
       return read;
@@ -263,49 +261,49 @@
    public void writeBoolean(final boolean value) throws JMSException
    {
       checkWrite();
-      getBody().writeBoolean(value);
+      buffer.writeBoolean(value);
    }
 
    public void writeByte(final byte value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(value);
+      buffer.writeByte(value);
    }
 
    public void writeShort(final short value) throws JMSException
    {
       checkWrite();
-      getBody().writeShort(value);
+      buffer.writeShort(value);
    }
 
    public void writeChar(final char value) throws JMSException
    {
       checkWrite();
-      getBody().writeChar(value);
+      buffer.writeChar(value);
    }
 
    public void writeInt(final int value) throws JMSException
    {
       checkWrite();
-      getBody().writeInt(value);
+      buffer.writeInt(value);
    }
 
    public void writeLong(final long value) throws JMSException
    {
       checkWrite();
-      getBody().writeLong(value);
+      buffer.writeLong(value);
    }
 
    public void writeFloat(final float value) throws JMSException
    {
       checkWrite();
-      getBody().writeFloat(value);
+      buffer.writeFloat(value);
    }
 
    public void writeDouble(final double value) throws JMSException
    {
       checkWrite();
-      getBody().writeDouble(value);
+      buffer.writeDouble(value);
    }
 
    public void writeUTF(final String value) throws JMSException
@@ -313,7 +311,7 @@
       checkWrite();
       try
       {
-         getBody().writeUTF(value);
+         buffer.writeUTF(value);
       }
       catch (Exception e)
       {
@@ -326,14 +324,14 @@
    public void writeBytes(final byte[] value) throws JMSException
    {
       checkWrite();
-      getBody().writeBytes(value);
+      buffer.writeBytes(value);
    }
 
    public void writeBytes(final byte[] value, final int offset, final int length)
          throws JMSException
    {
       checkWrite();
-      getBody().writeBytes(value, offset, length);
+      buffer.writeBytes(value, offset, length);
    }
 
    public void writeObject(final Object value) throws JMSException
@@ -392,11 +390,11 @@
       {
          readOnly = true;
 
-         getBody().resetReaderIndex();
+         buffer.resetReaderIndex();
       }
       else
       {
-         getBody().resetReaderIndex();
+         buffer.resetReaderIndex();
       }
    }
 
@@ -405,8 +403,8 @@
    public void clearBody() throws JMSException
    {
       super.clearBody();
-      HornetQBuffer currentBody = message.getBody();
-      currentBody.clear();
+      
+      buffer.clear();
    }
 
    public long getBodyLength() throws JMSException
@@ -419,6 +417,10 @@
    public void doBeforeSend() throws Exception
    {
       reset();
+      
+      message.encodeToBuffer();
+      
+      message.getBuffer().writeBytes(buffer, 0, buffer.writerIndex());
    }
 
    // Public --------------------------------------------------------

Modified: branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMapMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMapMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMapMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -55,12 +55,7 @@
    // Static --------------------------------------------------------
 
    // Constructors --------------------------------------------------
-   public HornetQMapMessage()
-   {
-      super(HornetQMapMessage.TYPE);
 
-      map = new TypedProperties();
-   }
    /*
     * This constructor is used to construct messages prior to sending
     */
@@ -371,9 +366,10 @@
    
    public void doBeforeSend() throws Exception
    {
-      message.getBody().clear();
-      map.encode(message.getBody());
+      message.encodeToBuffer();
       
+      map.encode(message.getBuffer());
+      
       super.doBeforeSend();
    }
    
@@ -381,7 +377,7 @@
    {        
       super.doBeforeReceive();
       
-      map.decode(message.getBody());
+      map.decode(message.getBuffer());
    }
    
    // Package protected ---------------------------------------------

Modified: branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -232,31 +232,7 @@
    private String jmsType;
 
    // Constructors --------------------------------------------------
-   /**
-    * constructors for test purposes only
-    */
-   public HornetQMessage()
-   {
-      message = new ClientMessageImpl(HornetQMessage.TYPE,
-                                      true,
-                                      0,
-                                      System.currentTimeMillis(),
-                                      (byte)4,
-                                      ChannelBuffers.dynamicBuffer(1024));
-
-   }
-
-   public HornetQMessage(final byte type)
-   {
-      message = new ClientMessageImpl(type,
-                                      true,
-                                      0,
-                                      System.currentTimeMillis(),
-                                      (byte)4,
-                                      ChannelBuffers.dynamicBuffer(1024));
-
-   }
-
+   
    /*
     * Create a new message prior to sending
     */
@@ -351,6 +327,7 @@
       {
          throw new JMSException("JMSMessageID must start with ID:");
       }
+      
       if (jmsMessageID == null)
       {
          message.removeProperty(HORNETQ_MESSAGE_ID);
@@ -359,6 +336,7 @@
       {
          message.putStringProperty(HORNETQ_MESSAGE_ID, new SimpleString(jmsMessageID));
       }
+      
       msgID = jmsMessageID;
    }
 
@@ -755,6 +733,7 @@
    public void setBooleanProperty(final String name, final boolean value) throws JMSException
    {
       checkProperty(name, value);
+      
       message.putBooleanProperty(new SimpleString(name), value);
    }
 
@@ -878,12 +857,13 @@
 
    public void doBeforeSend() throws Exception
    {
-      message.getBody().resetReaderIndex();
+      message.getBuffer().resetReaderIndex();
    }
 
    public void doBeforeReceive() throws Exception
    {
-      HornetQBuffer body = message.getBody();
+      HornetQBuffer body = message.getBuffer();
+      
       if (body != null)
       {
          body.resetReaderIndex();
@@ -985,10 +965,10 @@
       }
    }
 
-   protected HornetQBuffer getBody()
-   {
-      return message.getBody();
-   }
+//   protected HornetQBuffer getBody()
+//   {
+//      return message.getBody();
+//   }
 
    // Private ------------------------------------------------------------
 

Modified: branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMessageProducer.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMessageProducer.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQMessageProducer.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -78,9 +78,9 @@
 
    private HornetQDestination defaultDestination;
 
-   private final String messageIDPrefix;
+   private final SimpleString messageIDPrefix;
 
-   private final AtomicLong sequenceNumber = new AtomicLong(0);
+   private volatile long sequenceNumber;
 
    private ClientSession clientSession;
 
@@ -105,7 +105,7 @@
       // then session, producers & messages ID could be created using simple sequences
       String uuid = UUIDGenerator.getInstance().generateSimpleStringUUID().toString();
 
-      messageIDPrefix = "ID:" + uuid + ":";
+      messageIDPrefix = new SimpleString("ID:" + uuid + ":");
    }
 
    // MessageProducer implementation --------------------------------
@@ -404,7 +404,8 @@
       if (!disableMessageID)
       {
          // Generate an id
-         msg.setJMSMessageID(messageIDPrefix + sequenceNumber.incrementAndGet());
+
+         msg.getCoreMessage().putStringProperty(HornetQMessage.HORNETQ_MESSAGE_ID, generateOldMessageID());
       }
 
       if (foreign)
@@ -443,7 +444,47 @@
          throw JMSExceptionHelper.convertFromHornetQException(e);
       }
    }
+   
+   //This is faster than doing standard String concatenation and conversions from long to string
+   private SimpleString generateMessageID()
+   {
+      byte[] prefixData = messageIDPrefix.getData();
+      
+      int len = prefixData.length + 16 * 2;
 
+      byte[] bytes = new byte[len];
+
+      System.arraycopy(messageIDPrefix.getData(), 0, bytes, 0, prefixData.length);
+      
+      int j = prefixData.length;
+      
+      long l = sequenceNumber++;
+      
+      for (int i = 0; i < 16; i++)
+      {
+         int ch = (int)(l & 0xF);
+
+         l = l >> 4;
+
+         char chr = (char)(ch + 48);
+
+         bytes[j] = (byte)chr;
+
+         j += 2;
+      }
+      
+      return new SimpleString(bytes);
+   }
+   
+   private SimpleString generateOldMessageID()
+   {
+      SimpleString ss = new SimpleString(messageIDPrefix.getData());
+      
+      ss.concat(String.valueOf(sequenceNumber++));
+      
+      return ss;
+   }
+   
    private void checkClosed() throws JMSException
    {
       if (producer.isClosed())

Modified: branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQObjectMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQObjectMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQObjectMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -14,10 +14,11 @@
 
 package org.hornetq.jms.client;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.io.OutputStream;
 import java.io.Serializable;
 
 import javax.jms.JMSException;
@@ -25,13 +26,14 @@
 
 import org.hornetq.core.client.ClientMessage;
 import org.hornetq.core.client.ClientSession;
+import org.hornetq.core.remoting.spi.HornetQBuffer;
 
 /**
  * This class implements javax.jms.ObjectMessage
  * 
  * Don't used ObjectMessage if you want good performance!
  * 
- * Serialization is slooooow!
+ * Java Serialization is slooooow!
  * 
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
  * @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
@@ -49,20 +51,12 @@
 
    // Attributes ----------------------------------------------------
    
-   // keep a snapshot of the Serializable Object as a byte[] to provide Object isolation
-   private byte[] data;
-
+   private Serializable object;
+   
    // Static --------------------------------------------------------
 
    // Constructors --------------------------------------------------
    
-   /*
-    * This constructor is used to construct messages prior to sending
-    */
-   public HornetQObjectMessage()
-   {
-      super(HornetQObjectMessage.TYPE);
-   }
 
    public HornetQObjectMessage( final ClientSession session)
    {
@@ -92,32 +86,23 @@
    }
    
    public void doBeforeSend() throws Exception
-   {
-      getBody().clear();
-      if (data != null)
-      {
-         getBody().writeInt(data.length);
-         getBody().writeBytes(data);
-      }
-      
+   {      
       super.doBeforeSend();
+      
+      ObjectOutputStream oos = new ObjectOutputStream(new BufferOutputStream(message.getBuffer()));
+      
+      oos.writeObject(object);
+      
+      oos.flush();
    }
    
-   
    public void doBeforeReceive() throws Exception
    {
       super.doBeforeReceive();
-      try
-      {
-         int len = getBody().readInt();
-         data = new byte[len];
-         getBody().readBytes(data);
-      }
-      catch (Exception e)
-      {
-         data = null;
-      }
       
+      ObjectInputStream ois = new ObjectInputStream(new BufferInputStream(message.getBuffer()));
+      
+      object = (Serializable)ois.readObject();      
    }
       
    // ObjectMessage implementation ----------------------------------
@@ -126,61 +111,22 @@
    {  
       checkWrite();
 
-      if (object != null)
-      {
-         try 
-         {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
-
-            ObjectOutputStream oos = new ObjectOutputStream(baos);
-
-            oos.writeObject(object);
-
-            oos.flush();
-
-            data = baos.toByteArray();
-         }
-         catch (Exception e)
-         {
-            JMSException je = new JMSException("Failed to serialize object");
-            je.setLinkedException(e);
-            throw je;
-         }
-      }
+      this.object = object;
    }
 
    // lazy deserialize the Object the first time the client requests it
    public Serializable getObject() throws JMSException
    {
-      if (data == null || data.length == 0)
-      {
-         return null;
-      }
-
-      try
-      {
-         ByteArrayInputStream bais = new ByteArrayInputStream(data);
-         ObjectInputStream ois = new org.hornetq.utils.ObjectInputStreamWithClassLoader(bais);
-         Serializable object = (Serializable)ois.readObject();
-         return object;
-      }
-      catch (Exception e)
-      {
-         JMSException je = new JMSException(e.getMessage());
-         je.setStackTrace(e.getStackTrace());
-         throw je;
-      }
+      return object;
    }
 
    public void clearBody() throws JMSException
    {
       super.clearBody();
       
-      data = null;
+      object = null;
    }
    
-   
-
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------
@@ -188,4 +134,36 @@
    // Private -------------------------------------------------------
 
    // Inner classes -------------------------------------------------
+   
+   private static class BufferOutputStream extends OutputStream
+   {
+      private HornetQBuffer buffer;
+      
+      BufferOutputStream(final HornetQBuffer buffer)
+      {
+         this.buffer = buffer;
+      }
+
+      @Override
+      public void write(final int b) throws IOException
+      {
+         buffer.writeByte((byte)b);
+      }            
+   }
+   
+   private static class BufferInputStream extends InputStream
+   {
+      private HornetQBuffer buffer;
+      
+      BufferInputStream(final HornetQBuffer buffer)
+      {
+         this.buffer = buffer;
+      }
+
+      @Override
+      public int read() throws IOException
+      {
+         return buffer.readByte();
+      }      
+   }
 }

Modified: branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQStreamMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQStreamMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQStreamMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -11,7 +11,6 @@
  * permissions and limitations under the License.
  */
 
-
 package org.hornetq.jms.client;
 
 import javax.jms.JMSException;
@@ -22,6 +21,7 @@
 import org.hornetq.core.client.ClientMessage;
 import org.hornetq.core.client.ClientSession;
 import org.hornetq.core.logging.Logger;
+import org.hornetq.core.remoting.spi.HornetQBuffer;
 import org.hornetq.utils.DataConstants;
 
 /**
@@ -46,61 +46,55 @@
    // Constants -----------------------------------------------------
 
    private static final Logger log = Logger.getLogger(HornetQStreamMessage.class);
-   
-   
+
    public static final byte TYPE = 6;
 
    // Attributes ----------------------------------------------------
- 
+
+   private HornetQBuffer buffer;
+
    // Static --------------------------------------------------------
 
    // Constructors --------------------------------------------------
 
-   /*
-    * This constructor is used to construct messages prior to sending
-    */
-   public HornetQStreamMessage()
-   {   
-      super(HornetQStreamMessage.TYPE);
-   }
-
    public HornetQStreamMessage(final ClientSession session)
-   {   
+   {
       super(HornetQStreamMessage.TYPE, session);
    }
-   
+
    public HornetQStreamMessage(final ClientMessage message, final ClientSession session)
    {
       super(message, session);
    }
-   
+
    public HornetQStreamMessage(final StreamMessage foreign, final ClientSession session) throws JMSException
    {
       super(foreign, HornetQStreamMessage.TYPE, session);
-      
+
       foreign.reset();
-      
+
       try
       {
          while (true)
          {
             Object obj = foreign.readObject();
-            this.writeObject(obj);
+            writeObject(obj);
          }
       }
       catch (MessageEOFException e)
       {
-         //Ignore
+         // Ignore
       }
    }
 
    // Public --------------------------------------------------------
 
+   @Override
    public byte getType()
    {
       return HornetQStreamMessage.TYPE;
    }
-   
+
    // StreamMessage implementation ----------------------------------
 
    public boolean readBoolean() throws JMSException
@@ -108,17 +102,17 @@
       checkRead();
       try
       {
-         byte type = getBody().readByte();
-         
+         byte type = buffer.readByte();
+
          switch (type)
          {
             case DataConstants.BOOLEAN:
-               return getBody().readBoolean();
+               return buffer.readBoolean();
             case DataConstants.STRING:
-               String s = getBody().readNullableString();
+               String s = buffer.readNullableString();
                return Boolean.valueOf(s);
             default:
-               throw new MessageFormatException("Invalid conversion");           
+               throw new MessageFormatException("Invalid conversion");
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -132,16 +126,16 @@
       checkRead();
       try
       {
-         byte type = getBody().readByte();
+         byte type = buffer.readByte();
          switch (type)
          {
             case DataConstants.BYTE:
-               return getBody().readByte();
+               return buffer.readByte();
             case DataConstants.STRING:
-               String s = getBody().readNullableString();
+               String s = buffer.readNullableString();
                return Byte.parseByte(s);
             default:
-               throw new MessageFormatException("Invalid conversion");           
+               throw new MessageFormatException("Invalid conversion");
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -155,18 +149,18 @@
       checkRead();
       try
       {
-         byte type = getBody().readByte();
+         byte type = buffer.readByte();
          switch (type)
          {
             case DataConstants.BYTE:
-               return getBody().readByte();
+               return buffer.readByte();
             case DataConstants.SHORT:
-               return getBody().readShort();
+               return buffer.readShort();
             case DataConstants.STRING:
-               String s = getBody().readNullableString();
+               String s = buffer.readNullableString();
                return Short.parseShort(s);
             default:
-               throw new MessageFormatException("Invalid conversion");           
+               throw new MessageFormatException("Invalid conversion");
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -180,13 +174,13 @@
       checkRead();
       try
       {
-         byte type = getBody().readByte();
+         byte type = buffer.readByte();
          switch (type)
          {
             case DataConstants.CHAR:
-               return getBody().readChar();
+               return buffer.readChar();
             default:
-               throw new MessageFormatException("Invalid conversion");           
+               throw new MessageFormatException("Invalid conversion");
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -200,20 +194,20 @@
       checkRead();
       try
       {
-         byte type = getBody().readByte();
+         byte type = buffer.readByte();
          switch (type)
          {
             case DataConstants.BYTE:
-               return getBody().readByte();
+               return buffer.readByte();
             case DataConstants.SHORT:
-               return getBody().readShort();
+               return buffer.readShort();
             case DataConstants.INT:
-               return getBody().readInt();
+               return buffer.readInt();
             case DataConstants.STRING:
-               String s = getBody().readNullableString();
+               String s = buffer.readNullableString();
                return Integer.parseInt(s);
             default:
-               throw new MessageFormatException("Invalid conversion");           
+               throw new MessageFormatException("Invalid conversion");
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -227,22 +221,22 @@
       checkRead();
       try
       {
-         byte type = getBody().readByte();
+         byte type = buffer.readByte();
          switch (type)
          {
             case DataConstants.BYTE:
-               return getBody().readByte();
+               return buffer.readByte();
             case DataConstants.SHORT:
-               return getBody().readShort();
+               return buffer.readShort();
             case DataConstants.INT:
-               return getBody().readInt();
+               return buffer.readInt();
             case DataConstants.LONG:
-               return getBody().readLong();
+               return buffer.readLong();
             case DataConstants.STRING:
-               String s = getBody().readNullableString();
+               String s = buffer.readNullableString();
                return Long.parseLong(s);
             default:
-               throw new MessageFormatException("Invalid conversion");           
+               throw new MessageFormatException("Invalid conversion");
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -256,16 +250,16 @@
       checkRead();
       try
       {
-         byte type = getBody().readByte();
+         byte type = buffer.readByte();
          switch (type)
          {
             case DataConstants.FLOAT:
-               return getBody().readFloat();
+               return buffer.readFloat();
             case DataConstants.STRING:
-               String s = getBody().readNullableString();
+               String s = buffer.readNullableString();
                return Float.parseFloat(s);
             default:
-               throw new MessageFormatException("Invalid conversion");           
+               throw new MessageFormatException("Invalid conversion");
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -279,18 +273,18 @@
       checkRead();
       try
       {
-         byte type = getBody().readByte();
+         byte type = buffer.readByte();
          switch (type)
          {
             case DataConstants.FLOAT:
-               return getBody().readFloat();
+               return buffer.readFloat();
             case DataConstants.DOUBLE:
-               return getBody().readDouble();
+               return buffer.readDouble();
             case DataConstants.STRING:
-               String s = getBody().readNullableString();
+               String s = buffer.readNullableString();
                return Double.parseDouble(s);
             default:
-               throw new MessageFormatException("Invalid conversion: " + type);           
+               throw new MessageFormatException("Invalid conversion: " + type);
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -298,35 +292,35 @@
          throw new MessageEOFException("");
       }
    }
-   
+
    public String readString() throws JMSException
    {
       checkRead();
       try
       {
-         byte type = getBody().readByte();
+         byte type = buffer.readByte();
          switch (type)
          {
             case DataConstants.BOOLEAN:
-               return String.valueOf(getBody().readBoolean());
+               return String.valueOf(buffer.readBoolean());
             case DataConstants.BYTE:
-               return String.valueOf(getBody().readByte());
+               return String.valueOf(buffer.readByte());
             case DataConstants.SHORT:
-               return String.valueOf(getBody().readShort());
+               return String.valueOf(buffer.readShort());
             case DataConstants.CHAR:
-               return String.valueOf(getBody().readChar());
+               return String.valueOf(buffer.readChar());
             case DataConstants.INT:
-               return String.valueOf(getBody().readInt());
+               return String.valueOf(buffer.readInt());
             case DataConstants.LONG:
-               return String.valueOf(getBody().readLong());
+               return String.valueOf(buffer.readLong());
             case DataConstants.FLOAT:
-               return String.valueOf(getBody().readFloat());
+               return String.valueOf(buffer.readFloat());
             case DataConstants.DOUBLE:
-               return String.valueOf(getBody().readDouble());
+               return String.valueOf(buffer.readDouble());
             case DataConstants.STRING:
-               return getBody().readNullableString();
+               return buffer.readNullableString();
             default:
-               throw new MessageFormatException("Invalid conversion");           
+               throw new MessageFormatException("Invalid conversion");
          }
       }
       catch (IndexOutOfBoundsException e)
@@ -336,7 +330,7 @@
    }
 
    private int len;
-   
+
    public int readBytes(final byte[] value) throws JMSException
    {
       checkRead();
@@ -349,145 +343,144 @@
          }
          else if (len == 0)
          {
-            byte type = getBody().readByte();
+            byte type = buffer.readByte();
             if (type != DataConstants.BYTES)
             {
-               throw new MessageFormatException("Invalid conversion"); 
+               throw new MessageFormatException("Invalid conversion");
             }
-            len = getBody().readInt();       
-         }     
+            len = buffer.readInt();
+         }
          int read = Math.min(value.length, len);
-         getBody().readBytes(value, 0, read);
+         buffer.readBytes(value, 0, read);
          len -= read;
          if (len == 0)
          {
             len = -1;
          }
-         return read;      
+         return read;
       }
       catch (IndexOutOfBoundsException e)
       {
          throw new MessageEOFException("");
       }
    }
-   
+
    public Object readObject() throws JMSException
    {
       checkRead();
-      byte type = getBody().readByte();
+      byte type = buffer.readByte();
       switch (type)
       {
          case DataConstants.BOOLEAN:
-            return getBody().readBoolean();
+            return buffer.readBoolean();
          case DataConstants.BYTE:
-            return getBody().readByte();
+            return buffer.readByte();
          case DataConstants.SHORT:
-            return getBody().readShort();
+            return buffer.readShort();
          case DataConstants.CHAR:
-            return getBody().readChar();
+            return buffer.readChar();
          case DataConstants.INT:
-            return getBody().readInt();
+            return buffer.readInt();
          case DataConstants.LONG:
-            return getBody().readLong();
+            return buffer.readLong();
          case DataConstants.FLOAT:
-            return getBody().readFloat();
+            return buffer.readFloat();
          case DataConstants.DOUBLE:
-            return getBody().readDouble();
+            return buffer.readDouble();
          case DataConstants.STRING:
-            return getBody().readNullableString();         
+            return buffer.readNullableString();
          case DataConstants.BYTES:
-            int len = getBody().readInt();
+            int len = buffer.readInt();
             byte[] bytes = new byte[len];
-            getBody().readBytes(bytes);
+            buffer.readBytes(bytes);
             return bytes;
          default:
-            throw new MessageFormatException("Invalid conversion");           
+            throw new MessageFormatException("Invalid conversion");
       }
    }
 
    public void writeBoolean(final boolean value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.BOOLEAN);
-      getBody().writeBoolean(value);
+      buffer.writeByte(DataConstants.BOOLEAN);
+      buffer.writeBoolean(value);
    }
 
    public void writeByte(final byte value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.BYTE);
-      getBody().writeByte(value);
+      buffer.writeByte(DataConstants.BYTE);
+      buffer.writeByte(value);
    }
 
    public void writeShort(final short value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.SHORT);
-      getBody().writeShort(value);
+      buffer.writeByte(DataConstants.SHORT);
+      buffer.writeShort(value);
    }
 
    public void writeChar(final char value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.CHAR);
-      getBody().writeChar(value);
+      buffer.writeByte(DataConstants.CHAR);
+      buffer.writeChar(value);
    }
 
    public void writeInt(final int value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.INT);
-      getBody().writeInt(value);
+      buffer.writeByte(DataConstants.INT);
+      buffer.writeInt(value);
    }
 
    public void writeLong(final long value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.LONG);
-      getBody().writeLong(value);
+      buffer.writeByte(DataConstants.LONG);
+      buffer.writeLong(value);
    }
 
    public void writeFloat(final float value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.FLOAT);
-      getBody().writeFloat(value);
+      buffer.writeByte(DataConstants.FLOAT);
+      buffer.writeFloat(value);
    }
 
    public void writeDouble(final double value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.DOUBLE);
-      getBody().writeDouble(value);
+      buffer.writeByte(DataConstants.DOUBLE);
+      buffer.writeDouble(value);
    }
-   
+
    public void writeString(final String value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.STRING);
-      getBody().writeNullableString(value);
+      buffer.writeByte(DataConstants.STRING);
+      buffer.writeNullableString(value);
    }
 
    public void writeBytes(final byte[] value) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.BYTES);
-      getBody().writeInt(value.length);
-      getBody().writeBytes(value);
+      buffer.writeByte(DataConstants.BYTES);
+      buffer.writeInt(value.length);
+      buffer.writeBytes(value);
    }
 
-   public void writeBytes(final byte[] value, final int offset, final int length)
-         throws JMSException
+   public void writeBytes(final byte[] value, final int offset, final int length) throws JMSException
    {
       checkWrite();
-      getBody().writeByte(DataConstants.BYTES);
-      getBody().writeInt(length);
-      getBody().writeBytes(value, offset, length);
+      buffer.writeByte(DataConstants.BYTES);
+      buffer.writeInt(length);
+      buffer.writeBytes(value, offset, length);
    }
 
    public void writeObject(final Object value) throws JMSException
    {
-      if (value == null) 
+      if (value == null)
       {
          throw new NullPointerException("Attempt to write a null value");
       }
@@ -529,7 +522,7 @@
       }
       else if (value instanceof Character)
       {
-         this.writeChar((Character)value);
+         writeChar((Character)value);
       }
       else
       {
@@ -543,27 +536,35 @@
       {
          readOnly = true;
       }
-      getBody().resetReaderIndex();
+      buffer.resetReaderIndex();
    }
 
    // HornetQRAMessage overrides ----------------------------------------
-  
+
+   @Override
    public void clearBody() throws JMSException
    {
       super.clearBody();
-      message.getBody().clear();
+
+      buffer.clear();
+
    }
-   
+
+   @Override
    public void doBeforeSend() throws Exception
    {
       reset();
+
+      message.encodeToBuffer();
+
+      message.getBuffer().writeBytes(buffer, 0, buffer.writerIndex());
    }
-   
+
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------
 
    // Private -------------------------------------------------------
-   
+
    // Inner classes -------------------------------------------------
 }

Modified: branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQTextMessage.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQTextMessage.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/jms/client/HornetQTextMessage.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -21,6 +21,7 @@
 import org.hornetq.core.client.ClientMessage;
 import org.hornetq.core.client.ClientSession;
 import org.hornetq.core.logging.Logger;
+import org.hornetq.utils.SimpleString;
 
 /**
  * This class implements javax.jms.TextMessage ported from SpyTextMessage in JBossMQ.
@@ -46,8 +47,9 @@
 
    // Attributes ----------------------------------------------------
    
-   //We cache it locally
-   private String text;
+   //We cache it locally - it's more performant to cache as a SimpleString, the AbstractChannelBuffer write
+   //methods are more efficient for a SimpleString
+   private SimpleString text;
    
    // Static --------------------------------------------------------
 
@@ -56,13 +58,11 @@
    /*
     * This constructor is used to construct messages prior to sending
     */
-   public HornetQTextMessage()
-   {
-      super(HornetQTextMessage.TYPE);
-   }
-   /**
-    * constructors for test purposes only
-    */
+//   public HornetQTextMessage()
+//   {
+//      super(HornetQTextMessage.TYPE);
+//   }
+
    public HornetQTextMessage(final ClientSession session)
    {
       super(HornetQTextMessage.TYPE, session);
@@ -80,7 +80,7 @@
    {
       super(foreign, HornetQTextMessage.TYPE, session);
       
-      text = foreign.getText();
+      text = new SimpleString(foreign.getText());
    }
 
    // Public --------------------------------------------------------
@@ -96,13 +96,12 @@
    {
       checkWrite();
       
-      this.text = text;
+      this.text = new SimpleString(text);
    }
 
    public String getText() throws JMSException
    {
-      //TODO lazily get the text
-      return text;
+      return text.toString();
    }
    
    public void clearBody() throws JMSException
@@ -116,9 +115,10 @@
    
    public void doBeforeSend() throws Exception
    {
-      getBody().clear();
-      getBody().writeNullableString(text);      
+      message.encodeToBuffer();
       
+      message.getBuffer().writeNullableSimpleString(text);
+      
       super.doBeforeSend();
    }
    
@@ -126,7 +126,7 @@
    {
       super.doBeforeReceive();
       
-      text = getBody().readNullableString();                        
+      text = message.getBuffer().readNullableSimpleString();                        
    }
    
    // Package protected ---------------------------------------------

Modified: branches/20-optimisation/src/main/org/hornetq/ra/inflow/HornetQMessageHandler.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/ra/inflow/HornetQMessageHandler.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/ra/inflow/HornetQMessageHandler.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -13,18 +13,12 @@
 package org.hornetq.ra.inflow;
 
 import java.util.UUID;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 
 import javax.jms.InvalidClientIDException;
-import javax.jms.JMSException;
 import javax.jms.MessageListener;
+import javax.resource.ResourceException;
 import javax.resource.spi.endpoint.MessageEndpoint;
 import javax.resource.spi.endpoint.MessageEndpointFactory;
-import javax.resource.ResourceException;
-import javax.transaction.Status;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
 
 import org.hornetq.core.client.ClientConsumer;
 import org.hornetq.core.client.ClientMessage;
@@ -102,7 +96,7 @@
          }
 
          SimpleString queueName = new SimpleString(HornetQTopic.createQueueNameForDurableSubscription(activation.getActivationSpec()
-               .getClientID(),
+                                                                                                                .getClientID(),
                                                                                                       subscriptionName));
 
          SessionQueueQueryResponseMessage subResponse = session.queueQuery(queueName);
@@ -222,9 +216,9 @@
          beforeDelivery = true;
          msg.doBeforeReceive();
          message.acknowledge();
-         ((MessageListener) endpoint).onMessage(msg);
+         ((MessageListener)endpoint).onMessage(msg);
          endpoint.afterDelivery();
-         if(useLocalTx)
+         if (useLocalTx)
          {
             session.commit();
          }
@@ -232,8 +226,8 @@
       catch (Throwable e)
       {
          log.error("Failed to deliver message", e);
-         //we need to call before/afterDelivery as a pair
-         if(beforeDelivery)
+         // we need to call before/afterDelivery as a pair
+         if (beforeDelivery)
          {
             try
             {
@@ -244,7 +238,7 @@
                log.warn("Unable to call after delivery");
             }
          }
-         if(useLocalTx)
+         if (useLocalTx)
          {
             try
             {

Modified: branches/20-optimisation/src/main/org/hornetq/utils/SimpleString.java
===================================================================
--- branches/20-optimisation/src/main/org/hornetq/utils/SimpleString.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/src/main/org/hornetq/utils/SimpleString.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -93,7 +93,7 @@
 
       str = string;
    }
-
+   
    public SimpleString(final byte[] data)
    {
       this.data = data;

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/EncodeSizeTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/EncodeSizeTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/EncodeSizeTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -60,7 +60,7 @@
          
          HornetQBuffer body = ChannelBuffers.dynamicBuffer(bytes);
          
-         clientMessage.setBody(body);
+         clientMessage.setBuffer(body);
          
          int clientEncodeSize = clientMessage.getEncodeSize();
              
@@ -104,7 +104,7 @@
          
          HornetQBuffer body = ChannelBuffers.dynamicBuffer(bytes);
          
-         clientMessage.setBody(body);
+         clientMessage.setBuffer(body);
          
          int clientEncodeSize = clientMessage.getEncodeSize();
          

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/String64KLimitTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/String64KLimitTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/String64KLimitTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -90,16 +90,16 @@
       String s4 = genString(10 * 64 * 1024);
 
       ClientMessage tm1 = session.createClientMessage(false);
-      tm1.getBody().writeString(s1);
+      tm1.getBuffer().writeString(s1);
 
       ClientMessage tm2 = session.createClientMessage(false);
-      tm2.getBody().writeString(s2);
+      tm2.getBuffer().writeString(s2);
 
       ClientMessage tm3 = session.createClientMessage(false);
-      tm3.getBody().writeString(s3);
+      tm3.getBuffer().writeString(s3);
 
       ClientMessage tm4 = session.createClientMessage(false);
-      tm4.getBody().writeString(s4);
+      tm4.getBuffer().writeString(s4);
 
       producer.send(tm1);
 
@@ -113,23 +113,23 @@
 
       assertNotNull(rm1);
 
-      assertEquals(s1, rm1.getBody().readString());
+      assertEquals(s1, rm1.getBuffer().readString());
 
       ClientMessage rm2 = consumer.receive(1000);
 
       assertNotNull(rm2);
 
-      assertEquals(s2, rm2.getBody().readString());
+      assertEquals(s2, rm2.getBuffer().readString());
 
       ClientMessage rm3 = consumer.receive(1000);
 
-      assertEquals(s3, rm3.getBody().readString());
+      assertEquals(s3, rm3.getBuffer().readString());
 
       assertNotNull(rm3);
 
       ClientMessage rm4 = consumer.receive(1000);
 
-      assertEquals(s4, rm4.getBody().readString());
+      assertEquals(s4, rm4.getBuffer().readString());
 
       assertNotNull(rm4);
    }
@@ -155,15 +155,15 @@
       String s4 = genString(10 * 64 * 1024);
 
       ClientMessage tm1 = session.createClientMessage(false);
-      tm1.getBody().writeUTF(s1);
+      tm1.getBuffer().writeUTF(s1);
 
       ClientMessage tm2 = session.createClientMessage(false);
-      tm2.getBody().writeUTF(s2);
+      tm2.getBuffer().writeUTF(s2);
 
       try
       {
          ClientMessage tm3 = session.createClientMessage(false);
-         tm3.getBody().writeUTF(s3);
+         tm3.getBuffer().writeUTF(s3);
          fail("can not write UTF string bigger than 64K");
       }
       catch (Exception e)
@@ -173,7 +173,7 @@
       try
       {
          ClientMessage tm4 = session.createClientMessage(false);
-         tm4.getBody().writeUTF(s4);
+         tm4.getBuffer().writeUTF(s4);
          fail("can not write UTF string bigger than 64K");
       }
       catch (Exception e)
@@ -191,8 +191,8 @@
 
       assertNotNull(rm2);
 
-      assertEquals(s1, rm1.getBody().readUTF());
-      assertEquals(s2, rm2.getBody().readUTF());
+      assertEquals(s1, rm1.getBuffer().readUTF());
+      assertEquals(s2, rm2.getBuffer().readUTF());
    }
 
    // Protected -----------------------------------------------------

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/AddressSettingsTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/AddressSettingsTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/AddressSettingsTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -78,9 +78,9 @@
          session.createQueue(dlaB, dlqB, false);
          ClientSession sendSession = sf.createSession(false, true, true);
          ClientMessage cm = sendSession.createClientMessage(true);
-         cm.getBody().writeString("A");
+         cm.getBuffer().writeString("A");
          ClientMessage cm2 = sendSession.createClientMessage(true);
-         cm2.getBody().writeString("B");
+         cm2.getBuffer().writeString("B");
          ClientProducer cp1 = sendSession.createProducer(addressA);
          ClientProducer cp2 = sendSession.createProducer(addressB);
          cp1.send(cm);
@@ -102,10 +102,10 @@
          cc2.close();
          message = dlqARec.receive(5000);
          assertNotNull(message);
-         assertEquals("A", message.getBody().readString());
+         assertEquals("A", message.getBuffer().readString());
          message = dlqBrec.receive(5000);
          assertNotNull(message);
-         assertEquals("B", message.getBody().readString());
+         assertEquals("B", message.getBuffer().readString());
          sendSession.close();
          session.close();
       }
@@ -141,9 +141,9 @@
          session.createQueue(dlaB, dlqB, false);
          ClientSession sendSession = sf.createSession(false, true, true);
          ClientMessage cm = sendSession.createClientMessage(true);
-         cm.getBody().writeString("A");
+         cm.getBuffer().writeString("A");
          ClientMessage cm2 = sendSession.createClientMessage(true);
-         cm2.getBody().writeString("B");
+         cm2.getBuffer().writeString("B");
          ClientProducer cp1 = sendSession.createProducer(addressA);
          ClientProducer cp2 = sendSession.createProducer(addressB);
          cp1.send(cm);
@@ -165,10 +165,10 @@
          cc2.close();
          message = dlqARec.receive(5000);
          assertNotNull(message);
-         assertEquals("A", message.getBody().readString());
+         assertEquals("A", message.getBuffer().readString());
          message = dlqBrec.receive(5000);
          assertNotNull(message);
-         assertEquals("B", message.getBody().readString());
+         assertEquals("B", message.getBuffer().readString());
          sendSession.close();
          session.close();
       }
@@ -204,9 +204,9 @@
          session.createQueue(dlaB, dlqB, false);
          ClientSession sendSession = sf.createSession(false, true, true);
          ClientMessage cm = sendSession.createClientMessage(true);
-         cm.getBody().writeString("A");
+         cm.getBuffer().writeString("A");
          ClientMessage cm2 = sendSession.createClientMessage(true);
-         cm2.getBody().writeString("B");
+         cm2.getBuffer().writeString("B");
          ClientProducer cp1 = sendSession.createProducer(addressA);
          ClientProducer cp2 = sendSession.createProducer(addressB);
          cp1.send(cm);
@@ -228,10 +228,10 @@
          cc2.close();
          message = dlqARec.receive(5000);
          assertNotNull(message);
-         assertEquals("A", message.getBody().readString());
+         assertEquals("A", message.getBuffer().readString());
          message = dlqBrec.receive(5000);
          assertNotNull(message);
-         assertEquals("B", message.getBody().readString());
+         assertEquals("B", message.getBuffer().readString());
          sendSession.close();
          session.close();
       }
@@ -273,11 +273,11 @@
          session.createQueue(dlaC, dlqC, false);
          ClientSession sendSession = sf.createSession(false, true, true);
          ClientMessage cm = sendSession.createClientMessage(true);
-         cm.getBody().writeString("A");
+         cm.getBuffer().writeString("A");
          ClientMessage cm2 = sendSession.createClientMessage(true);
-         cm2.getBody().writeString("B");
+         cm2.getBuffer().writeString("B");
          ClientMessage cm3 = sendSession.createClientMessage(true);
-         cm3.getBody().writeString("C");
+         cm3.getBuffer().writeString("C");
          ClientProducer cp1 = sendSession.createProducer(addressA2);
          ClientProducer cp2 = sendSession.createProducer(addressB2);
          ClientProducer cp3 = sendSession.createProducer(addressC);
@@ -307,13 +307,13 @@
          cc3.close();
          message = dlqARec.receive(5000);
          assertNotNull(message);
-         assertEquals("A", message.getBody().readString());
+         assertEquals("A", message.getBuffer().readString());
          message = dlqBrec.receive(5000);
          assertNotNull(message);
-         assertEquals("B", message.getBody().readString());
+         assertEquals("B", message.getBuffer().readString());
          message = dlqCrec.receive(5000);
          assertNotNull(message);
-         assertEquals("C", message.getBody().readString());
+         assertEquals("C", message.getBuffer().readString());
          sendSession.close();
          session.close();
       }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerRoundRobinTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerRoundRobinTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerRoundRobinTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -57,7 +57,7 @@
          for (int i = 0; i < numMessage; i++)
          {
             ClientMessage cm = session.createClientMessage(false);
-            cm.getBody().writeInt(i);
+            cm.getBuffer().writeInt(i);
             cp.send(cm);
          }
          int currMessage = 0;
@@ -67,7 +67,7 @@
             {
                ClientMessage cm = consumers[j].receive(5000);
                assertNotNull(cm);
-               assertEquals(currMessage++, cm.getBody().readInt());
+               assertEquals(currMessage++, cm.getBuffer().readInt());
             }
          }
          //sendSession.close();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -88,7 +88,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
       // assert that all the messages are there and none have been acked
       assertEquals(0, ((Queue)server.getPostOffice().getBinding(QUEUE).getBindable()).getDeliveringCount());
@@ -122,7 +122,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
       // assert that all the messages are there and none have been acked
       assertEquals(0, ((Queue)server.getPostOffice().getBinding(QUEUE).getBindable()).getDeliveringCount());
@@ -156,7 +156,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
          if (i < 50)
          {
             message2.acknowledge();
@@ -194,7 +194,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
          if (i < 50)
          {
             message2.acknowledge();
@@ -347,7 +347,7 @@
       {
          ClientMessage message = session.createClientMessage(false);
 
-         message.getBody().writeBytes(bytes);
+         message.getBuffer().writeBytes(bytes);
 
          message.putIntProperty("count", i);
 
@@ -407,7 +407,7 @@
       {
          ClientMessage message = session.createClientMessage(false);
 
-         message.getBody().writeBytes(bytes);
+         message.getBuffer().writeBytes(bytes);
 
          message.putIntProperty("count", i);
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerWindowSizeTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerWindowSizeTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ConsumerWindowSizeTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -264,7 +264,7 @@
          ClientMessage msg = createTextMessage(session, "This one will expire");
          if (largeMessages)
          {
-            msg.getBody().writeBytes(new byte[600]);
+            msg.getBuffer().writeBytes(new byte[600]);
          }
 
          msg.setExpiration(System.currentTimeMillis() + 100);
@@ -291,7 +291,7 @@
 
             if (largeMessages)
             {
-               msg.getBody().writeBytes(new byte[600]);
+               msg.getBuffer().writeBytes(new byte[600]);
             }
 
             prod.send(msg);
@@ -395,7 +395,7 @@
             ClientMessage msg = createTextMessage(session1, "Msg" + i);
             if (largeMessages)
             {
-               msg.getBody().writeBytes(new byte[600]);
+               msg.getBuffer().writeBytes(new byte[600]);
             }
             prod.send(msg);
          }
@@ -421,7 +421,7 @@
 
             assertNotNull("expected message at i = " + i, msg);
 
-            assertEquals("Msg" + i, msg.getBody().readString());
+            assertEquals("Msg" + i, msg.getBuffer().readString());
 
             msg.acknowledge();
 
@@ -456,7 +456,7 @@
             ClientMessage msg = createTextMessage(session1, "Msg" + i);
             if (largeMessages)
             {
-               msg.getBody().writeBytes(new byte[600]);
+               msg.getBuffer().writeBytes(new byte[600]);
             }
             prod.send(msg);
          }
@@ -470,7 +470,7 @@
             ClientMessage msg = cons2.receive(1000);
             assertNotNull("expected message at i = " + i, msg);
 
-            assertEquals("Msg" + i, msg.getBody().readString());
+            assertEquals("Msg" + i, msg.getBuffer().readString());
 
             msg.acknowledge();
 
@@ -484,7 +484,7 @@
 
             assertNotNull("expected message at i = " + i, msg);
 
-            assertEquals("Msg" + i, msg.getBody().readString());
+            assertEquals("Msg" + i, msg.getBuffer().readString());
 
             msg.acknowledge();
 
@@ -607,7 +607,7 @@
 
                      if (largeMessages)
                      {
-                        message.getBody().readBytes(new byte[600]);
+                        message.getBuffer().readBytes(new byte[600]);
                      }
 
                      latchRead.countDown();
@@ -632,7 +632,7 @@
             ClientMessage msg = createTextMessage(session, "Msg" + i);
             if (largeMessages)
             {
-               msg.getBody().writeBytes(new byte[600]);
+               msg.getBuffer().writeBytes(new byte[600]);
             }
             prod.send(msg);
          }
@@ -790,7 +790,7 @@
             ClientMessage msg = createTextMessage(session, "Msg" + i);
             if (largeMessage)
             {
-               msg.getBody().writeBytes(new byte[600]);
+               msg.getBuffer().writeBytes(new byte[600]);
             }
             prod.send(msg);
          }
@@ -934,7 +934,7 @@
             ClientMessage msg = createTextMessage(sessionA, "Msg" + i);
             if (largeMessages)
             {
-               msg.getBody().writeBytes(new byte[600]);
+               msg.getBuffer().writeBytes(new byte[600]);
             }
             prod.send(msg);
          }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/CoreClientTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/CoreClientTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/CoreClientTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -9,11 +9,10 @@
  * 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.hornetq.tests.integration.client;
 
-import org.hornetq.core.buffers.ChannelBuffers;
 import org.hornetq.core.client.ClientConsumer;
 import org.hornetq.core.client.ClientMessage;
 import org.hornetq.core.client.ClientProducer;
@@ -33,13 +32,11 @@
 public class CoreClientTest extends UnitTestCase
 {
    private static final Logger log = Logger.getLogger(CoreClientTest.class);
-      
+
    // Constants -----------------------------------------------------
 
-  
    // Attributes ----------------------------------------------------
 
-   
    // Static --------------------------------------------------------
 
    // Constructors --------------------------------------------------
@@ -48,64 +45,78 @@
 
    public void testCoreClientNetty() throws Exception
    {
-      testCoreClient("org.hornetq.integration.transports.netty.NettyAcceptorFactory", "org.hornetq.integration.transports.netty.NettyConnectorFactory");
+      testCoreClient("org.hornetq.integration.transports.netty.NettyAcceptorFactory",
+                     "org.hornetq.integration.transports.netty.NettyConnectorFactory");
    }
-   
+
    public void testCoreClientInVM() throws Exception
    {
-      testCoreClient("org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory", "org.hornetq.core.remoting.impl.invm.InVMConnectorFactory");
+      testCoreClient("org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory",
+                     "org.hornetq.core.remoting.impl.invm.InVMConnectorFactory");
    }
-   
+
    private void testCoreClient(final String acceptorFactoryClassName, final String connectorFactoryClassName) throws Exception
-   {             
+   {
       final SimpleString QUEUE = new SimpleString("CoreClientTestQueue");
-      
+
       Configuration conf = new ConfigurationImpl();
-      
-      conf.setSecurityEnabled(false);   
-      
+
+      conf.setSecurityEnabled(false);
+
       conf.getAcceptorConfigurations().add(new TransportConfiguration(acceptorFactoryClassName));
-            
-      HornetQServer server = HornetQ.newHornetQServer(conf, false);   
-           
+
+      HornetQServer server = HornetQ.newHornetQServer(conf, false);
+
       server.start();
-      
+
       ClientSessionFactory sf = new ClientSessionFactoryImpl(new TransportConfiguration(connectorFactoryClassName));
       sf.setConsumerWindowSize(0);
 
       ClientSession session = sf.createSession(false, true, true);
-      
+
       session.createQueue(QUEUE, QUEUE, null, false);
-      
-      ClientProducer producer = session.createProducer(QUEUE);     
-       
-      final int numMessages = 10000;
-      
+
+      ClientProducer producer = session.createProducer(QUEUE);
+
+      final int numMessages = 1;
+
       for (int i = 0; i < numMessages; i++)
       {
-         ClientMessage message = session.createClientMessage(HornetQTextMessage.TYPE, false, 0,
-               System.currentTimeMillis(), (byte) 1);         
-         message.setBody(ChannelBuffers.buffer(3000));
-         
-         message.getBody().writeString("testINVMCoreClient");
+         ClientMessage message = session.createClientMessage(HornetQTextMessage.TYPE,
+                                                             false,
+                                                             0,
+                                                             System.currentTimeMillis(),
+                                                             (byte)1);
+
+         message.putStringProperty("foo", "bar");
+
+         message.setDestination(QUEUE);
+
+         message.encodeToBuffer();
+
+         message.getBuffer().writeString("testINVMCoreClient");
+
+         log.info("sending message " + i);
          producer.send(message);
       }
-      
+
+      log.info("sent messages");
+
       ClientConsumer consumer = session.createConsumer(QUEUE);
-      
+
       session.start();
-      
+
       for (int i = 0; i < numMessages; i++)
       {
          ClientMessage message2 = consumer.receive();
 
-         assertEquals("testINVMCoreClient", message2.getBody().readString());
-         
+         assertEquals("testINVMCoreClient", message2.getBuffer().readString());
+
          message2.acknowledge();
       }
-      
+
       session.close();
-      
+
       server.stop();
    }
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/DeadLetterAddressTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/DeadLetterAddressTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/DeadLetterAddressTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -61,7 +61,7 @@
       ClientMessage m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       // force a cancel
       clientSession.rollback();
       m = clientConsumer.receiveImmediate();
@@ -70,7 +70,7 @@
       clientConsumer = clientSession.createConsumer(dlq);
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
    }
 
    public void testBasicSendToMultipleQueues() throws Exception
@@ -93,7 +93,7 @@
       ClientMessage m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       // force a cancel
       clientSession.rollback();
       m = clientConsumer.receiveImmediate();
@@ -103,13 +103,13 @@
       m = clientConsumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       clientConsumer.close();
       clientConsumer = clientSession.createConsumer(dlq2);
       m = clientConsumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       clientConsumer.close();
    }
 
@@ -127,7 +127,7 @@
       ClientMessage m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       // force a cancel
       clientSession.rollback();
       m = clientConsumer.receiveImmediate();
@@ -174,7 +174,7 @@
             {
                origIds.put("Message:" + j, tm.getMessageID());
             }
-            assertEquals("Message:" + j, tm.getBody().readString());
+            assertEquals("Message:" + j, tm.getBuffer().readString());
          }
          clientSession.rollback();
       }
@@ -192,7 +192,7 @@
 
          assertNotNull(tm);
 
-         String text = tm.getBody().readString();
+         String text = tm.getBuffer().readString();
          assertEquals("Message:" + i, text);
 
          // Check the headers
@@ -248,7 +248,7 @@
       clientConsumer = clientSession.createConsumer(deadLetterQueue);
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
    }
 
    public void testDeadlLetterAddressWithWildcardAddressSettings() throws Exception
@@ -288,7 +288,7 @@
       clientConsumer = clientSession.createConsumer(deadLetterQueue);
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
    }
 
    public void testDeadLetterAddressWithOverridenSublevelAddressSettings() throws Exception

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/DeliveryOrderTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/DeliveryOrderTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/DeliveryOrderTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -56,7 +56,7 @@
             for (int i = 0; i < numMessages; i++)
             {
                ClientMessage cm = sendSession.createClientMessage(false);
-               cm.getBody().writeInt(i);
+               cm.getBuffer().writeInt(i);
                cp.send(cm);
                if (i % 10 == 0)
                {
@@ -70,7 +70,7 @@
             {
                ClientMessage cm = c.receive(5000);
                assertNotNull(cm);
-               assertEquals(i, cm.getBody().readInt());
+               assertEquals(i, cm.getBuffer().readInt());
             }
             sendSession.close();
          }
@@ -97,7 +97,7 @@
             for (int i = 0; i < numMessages; i++)
             {
                ClientMessage cm = sendSession.createClientMessage(false);
-               cm.getBody().writeInt(i);
+               cm.getBuffer().writeInt(i);
                cp.send(cm);
             }
             ClientConsumer c = sendSession.createConsumer(queueA);
@@ -107,7 +107,7 @@
                ClientMessage cm = c.receive(5000);
                assertNotNull(cm);
                cm.acknowledge();
-               assertEquals(i, cm.getBody().readInt());
+               assertEquals(i, cm.getBuffer().readInt());
             }
             sendSession.rollback();
             for (int i = 0; i < numMessages; i++)
@@ -115,7 +115,7 @@
                ClientMessage cm = c.receive(5000);
                assertNotNull(cm);
                cm.acknowledge();
-               assertEquals(i, cm.getBody().readInt());
+               assertEquals(i, cm.getBuffer().readInt());
             }
             sendSession.close();
          }
@@ -155,7 +155,7 @@
             for (int i = 0; i < numMessage; i++)
             {
                ClientMessage cm = sendSession.createClientMessage(false);
-               cm.getBody().writeInt(count.getAndIncrement());
+               cm.getBuffer().writeInt(count.getAndIncrement());
                clientProducer.send(cm);
             }
             assertTrue(latch.await(10, TimeUnit.SECONDS));
@@ -194,7 +194,7 @@
 
          public void onMessage(ClientMessage message)
          {
-            int i = message.getBody().readInt();
+            int i = message.getBuffer().readInt();
             try
             {
                message.acknowledge();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ExpiryAddressTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ExpiryAddressTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ExpiryAddressTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -69,7 +69,7 @@
       clientConsumer = clientSession.createConsumer(eq);
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       m.acknowledge();
       
       // PageSize should be the same as when it started
@@ -117,7 +117,7 @@
       log.info("acking");
       m.acknowledge();
       
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       
       clientConsumer.close();
       
@@ -130,7 +130,7 @@
       log.info("acking");
       m.acknowledge();
       
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       
       clientConsumer.close();
       
@@ -197,7 +197,7 @@
 
          assertNotNull(tm);
 
-         String text = tm.getBody().readString();
+         String text = tm.getBuffer().readString();
          assertEquals("Message:" + i, text);
 
          // Check the headers
@@ -234,7 +234,7 @@
       clientConsumer = clientSession.createConsumer(eq);
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       m.acknowledge();
    }
 
@@ -264,7 +264,7 @@
       clientConsumer = clientSession.createConsumer(eq);
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       m.acknowledge();
    }
    
@@ -307,7 +307,7 @@
       clientConsumer = clientSession.createConsumer(specificExpiryQueue);
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");
+      assertEquals(m.getBuffer().readString(), "heyho!");
       m.acknowledge();
    }
    

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/HeuristicXATest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/HeuristicXATest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/HeuristicXATest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -120,7 +120,7 @@
 
          ClientMessage msg = session.createClientMessage(true);
 
-         msg.getBody().writeBytes(new byte[123]);
+         msg.getBuffer().writeBytes(new byte[123]);
 
          producer.send(msg);
 
@@ -227,7 +227,7 @@
 
          ClientMessage msg = session.createClientMessage(true);
 
-         msg.getBody().writeBytes(new byte[123]);
+         msg.getBuffer().writeBytes(new byte[123]);
 
          producer.send(msg);
 
@@ -334,7 +334,7 @@
 
          ClientMessage msg = session.createClientMessage(true);
 
-         msg.getBody().writeBytes(new byte[123]);
+         msg.getBuffer().writeBytes(new byte[123]);
 
          producer.send(msg);
 
@@ -449,7 +449,7 @@
 
          ClientMessage msg = session.createClientMessage(true);
 
-         msg.getBody().writeBytes(new byte[123]);
+         msg.getBuffer().writeBytes(new byte[123]);
 
          producer.send(msg);
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/JournalCrashTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/JournalCrashTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/JournalCrashTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -178,7 +178,7 @@
          {
             ClientMessage msg = session.createClientMessage(true);
             msg.getProperties().putIntProperty(new SimpleString("key"), i);
-            msg.getBody().writeUTF("message " + i);
+            msg.getBuffer().writeUTF("message " + i);
             prod.send(msg);
          }
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/LargeMessageTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/LargeMessageTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/LargeMessageTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -114,7 +114,7 @@
 
          try
          {
-            msg1.getBody().readByte();
+            msg1.getBuffer().readByte();
             fail("Exception was expected");
          }
          catch (Throwable ignored)
@@ -200,7 +200,7 @@
 
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg1.getBuffer().readByte());
          }
 
          session.close();
@@ -224,7 +224,7 @@
 
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg1.getBuffer().readByte());
          }
 
          msg1.acknowledge();
@@ -241,7 +241,7 @@
 
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg1.getBuffer().readByte());
          }
 
          msg1.acknowledge();
@@ -307,7 +307,7 @@
          assertEquals(1, msg.getDeliveryCount());
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg.getBuffer().readByte());
          }
          session.rollback();
 
@@ -322,7 +322,7 @@
          msg.acknowledge();
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg.getBuffer().readByte());
          }
          assertEquals(2, msg.getDeliveryCount());
          msg.acknowledge();
@@ -410,7 +410,7 @@
 
          for (int j = 0; j < messageSize; j++)
          {
-            assertEquals(getSamplebyte(j), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(j), msg1.getBuffer().readByte());
          }
 
          consumerExpiry.close();
@@ -428,7 +428,7 @@
 
             for (int j = 0; j < messageSize; j++)
             {
-               assertEquals(getSamplebyte(j), msg1.getBody().readByte());
+               assertEquals(getSamplebyte(j), msg1.getBuffer().readByte());
             }
 
             consumerExpiry.close();
@@ -450,7 +450,7 @@
 
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg1.getBuffer().readByte());
          }
 
          session.commit();
@@ -545,7 +545,7 @@
 
          for (int j = 0; j < messageSize; j++)
          {
-            assertEquals(getSamplebyte(j), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(j), msg1.getBuffer().readByte());
          }
 
          consumerExpiry.close();
@@ -562,7 +562,7 @@
 
             for (int j = 0; j < messageSize; j++)
             {
-               assertEquals(getSamplebyte(j), msg1.getBody().readByte());
+               assertEquals(getSamplebyte(j), msg1.getBuffer().readByte());
             }
 
             consumerExpiry.close();
@@ -589,7 +589,7 @@
 
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg1.getBuffer().readByte());
          }
 
          session.commit();
@@ -674,7 +674,7 @@
 
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg1.getBuffer().readByte());
          }
 
          session.close();
@@ -698,7 +698,7 @@
 
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg1.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg1.getBuffer().readByte());
          }
 
          msg1.acknowledge();
@@ -802,7 +802,7 @@
 
          for (int i = 0; i < messageSize; i++)
          {
-            assertEquals(getSamplebyte(i), msg2.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg2.getBuffer().readByte());
          }
 
          session.close();
@@ -1668,7 +1668,7 @@
 
                assertNotNull(clientMessage);
 
-               assertEquals(numberOfBytes, clientMessage.getBody().writerIndex());
+               assertEquals(numberOfBytes, clientMessage.getBuffer().writerIndex());
 
                clientMessage.acknowledge();
 
@@ -1782,7 +1782,7 @@
                {
                   for (int byteRead = 0; byteRead < SIZE; byteRead++)
                   {
-                     assertEquals(getSamplebyte(byteRead), msg.getBody().readByte());
+                     assertEquals(getSamplebyte(byteRead), msg.getBuffer().readByte());
                   }
                }
 
@@ -1883,7 +1883,7 @@
                {
                   for (int byteRead = 0; byteRead < SIZE; byteRead++)
                   {
-                     assertEquals(getSamplebyte(byteRead), msg.getBody().readByte());
+                     assertEquals(getSamplebyte(byteRead), msg.getBuffer().readByte());
                   }
                }
 
@@ -2128,7 +2128,7 @@
          
          for (int i = 0 ; i < LARGE_MESSAGE_SIZE; i++)
          {
-            assertEquals(getSamplebyte(i), msg.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg.getBuffer().readByte());
          }
          
          msg.acknowledge();
@@ -2223,7 +2223,7 @@
             }
 
             message = session.createClientMessage(true);
-            message.setBody(bodyLocal);
+            message.setBuffer(bodyLocal);
 
             producer.send(message);
          }
@@ -2262,12 +2262,12 @@
 
             try
             {
-               assertEqualsByteArrays(body.writerIndex(), body.array(), message2.getBody().array());
+               assertEqualsByteArrays(body.writerIndex(), body.array(), message2.getBuffer().array());
             }
             catch (AssertionFailedError e)
             {
                log.info("Expected buffer:" + dumbBytesHex(body.array(), 40));
-               log.info("Arriving buffer:" + dumbBytesHex(message2.getBody().array(), 40));
+               log.info("Arriving buffer:" + dumbBytesHex(message2.getBuffer().array(), 40));
                throw e;
             }
          }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessageCounterTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessageCounterTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessageCounterTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -91,7 +91,7 @@
 
          session.commit();
 
-         assertEquals("m" + i, message.getBody().readString());
+         assertEquals("m" + i, message.getBuffer().readString());
       }
 
       session.close();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessageGroupingTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessageGroupingTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessageGroupingTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -108,14 +108,14 @@
       int i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       assertEquals(50, dummyMessageHandler2.list.size());
       i = 1;
       for (ClientMessage message : dummyMessageHandler2.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       consumer.close();
@@ -155,14 +155,14 @@
       int i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       assertEquals(50, dummyMessageHandler2.list.size());
       i = 1;
       for (ClientMessage message : dummyMessageHandler2.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       consumer.close();
@@ -196,11 +196,11 @@
       {
          ClientMessage cm = consumer.receive(500);
          assertNotNull(cm);
-         assertEquals(cm.getBody().readString(), "m" + i);
+         assertEquals(cm.getBuffer().readString(), "m" + i);
          i++;
          cm = consumer2.receive(500);
          assertNotNull(cm);
-         assertEquals(cm.getBody().readString(), "m" + i);
+         assertEquals(cm.getBuffer().readString(), "m" + i);
       }
       
       log.info("closing consumers");
@@ -218,13 +218,13 @@
       {
          ClientMessage cm = consumer.receive(500);
          assertNotNull(cm);
-         assertEquals(cm.getBody().readString(), "m" + i);
+         assertEquals(cm.getBuffer().readString(), "m" + i);
       }
       for (int i = 1; i < numMessages; i += 2)
       {
          ClientMessage cm = consumer.receive(500);
          assertNotNull(cm);
-         assertEquals(cm.getBody().readString(), "m" + i);
+         assertEquals(cm.getBuffer().readString(), "m" + i);
       }
       consumer.close();
    }
@@ -258,7 +258,7 @@
       int i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 1;
       }
       consumer.close();
@@ -300,14 +300,14 @@
       int i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       assertEquals(dummyMessageHandler2.list.size(), 50);
       i = 1;
       for (ClientMessage message : dummyMessageHandler2.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       consumer.close();
@@ -352,14 +352,14 @@
       int i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       assertEquals(dummyMessageHandler2.list.size(), 50);
       i = 1;
       for (ClientMessage message : dummyMessageHandler2.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       latch = new CountDownLatch(numMessages);
@@ -371,14 +371,14 @@
       i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       assertEquals(dummyMessageHandler2.list.size(), 50);
       i = 1;
       for (ClientMessage message : dummyMessageHandler2.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       consumer = this.clientSession.createConsumer(qName);
@@ -426,14 +426,14 @@
       int i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       assertEquals(dummyMessageHandler2.list.size(), 50);
       i = 1;
       for (ClientMessage message : dummyMessageHandler2.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       consumer.close();
@@ -482,14 +482,14 @@
       int i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       assertEquals(dummyMessageHandler2.list.size(), 50);
       i = 1;
       for (ClientMessage message : dummyMessageHandler2.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       latch = new CountDownLatch(numMessages);
@@ -505,14 +505,14 @@
       i = 0;
       for (ClientMessage message : dummyMessageHandler.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       assertEquals(dummyMessageHandler2.list.size(), 50);
       i = 1;
       for (ClientMessage message : dummyMessageHandler2.list)
       {
-         assertEquals(message.getBody().readString(), "m" + i);
+         assertEquals(message.getBuffer().readString(), "m" + i);
          i += 2;
       }
       consumer = this.clientSession.createConsumer(qName);

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessagePriorityTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessagePriorityTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/MessagePriorityTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -87,7 +87,7 @@
          ClientMessage m = consumer.receive(500);
          assertNotNull(m);
          assertEquals(messages[i].getPriority(), m.getPriority());
-         assertEquals(m.getBody().readString(), messages[i].getBody().readString());
+         assertEquals(m.getBuffer().readString(), messages[i].getBuffer().readString());
       }
 
       consumer.close();
@@ -131,7 +131,7 @@
          ClientMessage m = consumer.receive(500);
          assertNotNull(m);
          assertEquals(messages[i].getPriority(), m.getPriority());
-         assertEquals(m.getBody().readString(), messages[i].getBody().readString());
+         assertEquals(m.getBuffer().readString(), messages[i].getBuffer().readString());
       }
 
       consumer.close();
@@ -252,7 +252,7 @@
       ClientMessage m = consumer.receive(500);
       assertNotNull(m);
       assertEquals(expectedPriority, m.getPriority());
-      assertEquals(expectedStringInBody, m.getBody().readString());
+      assertEquals(expectedStringInBody, m.getBuffer().readString());
    }
 
    // Inner classes -------------------------------------------------

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/NewDeadLetterAddressTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/NewDeadLetterAddressTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/NewDeadLetterAddressTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -58,7 +58,7 @@
       ClientMessage m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "heyho!");      
+      assertEquals(m.getBuffer().readString(), "heyho!");      
    }
 
    @Override

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/PagingTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/PagingTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/PagingTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -114,7 +114,7 @@
          {
             message = session.createClientMessage(true);
 
-            HornetQBuffer bodyLocal = message.getBody();
+            HornetQBuffer bodyLocal = message.getBuffer();
 
             for (int j = 1; j <= numberOfIntegers; j++)
             {
@@ -170,12 +170,12 @@
 
             try
             {
-               assertEqualsByteArrays(body.length, body, message2.getBody().array());
+               assertEqualsByteArrays(body.length, body, message2.getBuffer().array());
             }
             catch (AssertionFailedError e)
             {
                log.info("Expected buffer:" + dumbBytesHex(body, 40));
-               log.info("Arriving buffer:" + dumbBytesHex(message2.getBody().array(), 40));
+               log.info("Arriving buffer:" + dumbBytesHex(message2.getBuffer().array(), 40));
                throw e;
             }
          }
@@ -242,7 +242,7 @@
          while (true)
          {
             message = session.createClientMessage(true);
-            message.setBody(bodyLocal);
+            message.setBuffer(bodyLocal);
 
             // Stop sending message as soon as we start paging
             if (server.getPostOffice().getPagingManager().getPageStore(ADDRESS).isPaging())
@@ -265,7 +265,7 @@
          for (int i = 0; i < 10; i++)
          {
             message = session.createClientMessage(true);
-            message.setBody(bodyLocal);
+            message.setBuffer(bodyLocal);
             message.putIntProperty(new SimpleString("id"), i);
 
             // Consume messages to force an eventual out of order delivery
@@ -387,7 +387,7 @@
          {
             message = session.createClientMessage(true);
 
-            message.setBody(ChannelBuffers.wrappedBuffer(body));
+            message.setBuffer(ChannelBuffers.wrappedBuffer(body));
             message.putIntProperty(new SimpleString("id"), i);
 
             TestSupportPageStore store = (TestSupportPageStore)server.getPostOffice()
@@ -440,12 +440,12 @@
 
             try
             {
-               assertEqualsByteArrays(body.length, body, message2.getBody().array());
+               assertEqualsByteArrays(body.length, body, message2.getBuffer().array());
             }
             catch (AssertionFailedError e)
             {
                log.info("Expected buffer:" + dumbBytesHex(body, 40));
-               log.info("Arriving buffer:" + dumbBytesHex(message2.getBody().array(), 40));
+               log.info("Arriving buffer:" + dumbBytesHex(message2.getBuffer().array(), 40));
                throw e;
             }
          }
@@ -506,7 +506,7 @@
          {
             message = session.createClientMessage(true);
 
-            HornetQBuffer bodyLocal = message.getBody();
+            HornetQBuffer bodyLocal = message.getBuffer();
 
             for (int j = 1; j <= numberOfIntegers; j++)
             {
@@ -579,7 +579,7 @@
          {
             message = session.createClientMessage(true);
 
-            HornetQBuffer bodyLocal = message.getBody();
+            HornetQBuffer bodyLocal = message.getBuffer();
 
             for (int j = 1; j <= numberOfIntegers; j++)
             {
@@ -672,7 +672,7 @@
             HornetQBuffer bodyLocal = ChannelBuffers.wrappedBuffer(new byte[1024]);
 
             message = session.createClientMessage(true);
-            message.setBody(bodyLocal);
+            message.setBuffer(bodyLocal);
 
             producer.send(message);
          }
@@ -700,7 +700,7 @@
             HornetQBuffer bodyLocal = ChannelBuffers.wrappedBuffer(new byte[1024]);
 
             message = session.createClientMessage(true);
-            message.setBody(bodyLocal);
+            message.setBuffer(bodyLocal);
 
             producer.send(message);
          }
@@ -727,7 +727,7 @@
             HornetQBuffer bodyLocal = ChannelBuffers.wrappedBuffer(new byte[1024]);
 
             message = session.createClientMessage(true);
-            message.setBody(bodyLocal);
+            message.setBuffer(bodyLocal);
 
             producer.send(message);
          }
@@ -804,7 +804,7 @@
          HornetQBuffer bodyLocal = ChannelBuffers.wrappedBuffer(new byte[1024]);
 
          message = session.createClientMessage(true);
-         message.setBody(bodyLocal);
+         message.setBuffer(bodyLocal);
 
          for (int i = 0; i < NUMBER_OF_MESSAGES; i++)
          {
@@ -918,7 +918,7 @@
          for (int i = 0; i < NUMBER_OF_MESSAGES; i++)
          {
             ClientMessage msg = session.createClientMessage(true);
-            msg.getBody().writeBytes(new byte[512]);
+            msg.getBuffer().writeBytes(new byte[512]);
 
             producerPaged.send(msg);
             producerNonPaged.send(msg);
@@ -1030,7 +1030,7 @@
          for (int i = 0; i < NUMBER_MESSAGES_BEFORE_PAGING; i++)
          {
             ClientMessage msg = session.createClientMessage(true);
-            msg.getBody().writeBytes(new byte[512]);
+            msg.getBuffer().writeBytes(new byte[512]);
 
             producerA.send(msg);
             producerB.send(msg);
@@ -1044,7 +1044,7 @@
          for (int i = 0; i < NUMBER_MESSAGES_BEFORE_PAGING; i++)
          {
             ClientMessage msg = session.createClientMessage(true);
-            msg.getBody().writeBytes(new byte[512]);
+            msg.getBuffer().writeBytes(new byte[512]);
 
             producerA.send(msg);
             producerB.send(msg);
@@ -1058,7 +1058,7 @@
          for (int i = NUMBER_MESSAGES_BEFORE_PAGING * 2; i < NUMBER_OF_MESSAGES; i++)
          {
             ClientMessage msg = session.createClientMessage(true);
-            msg.getBody().writeBytes(new byte[512]);
+            msg.getBuffer().writeBytes(new byte[512]);
 
             producerA.send(msg);
             producerB.send(msg);

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ProducerFlowControlTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ProducerFlowControlTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ProducerFlowControlTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -227,13 +227,13 @@
             {
                // log.info("got message " + count);
 
-               int availBytes = message.getBody().readableBytes();
+               int availBytes = message.getBuffer().readableBytes();
 
                assertEquals(messageSize, availBytes);
 
                byte[] bytes = new byte[availBytes];
 
-               message.getBody().readBytes(bytes);
+               message.getBuffer().readBytes(bytes);
 
                message.acknowledge();
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ProducerTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ProducerTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ProducerTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -80,7 +80,7 @@
       ClientProducer producer = session.createProducer(QUEUE);
       ClientMessage message = session.createClientMessage(true);
       byte[] body = new byte[1000];
-      message.getBody().writeBytes(body);
+      message.getBuffer().writeBytes(body);
       producer.send(message);
       assertTrue(latch.await(5, TimeUnit.SECONDS));
       session.close();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/QueueBrowserTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/QueueBrowserTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/QueueBrowserTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -85,7 +85,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
 
       consumer.close();
@@ -96,7 +96,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
 
       consumer.close();
@@ -133,7 +133,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
 
       consumer.close();
@@ -144,7 +144,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
 
       consumer.close();
@@ -184,7 +184,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
 
       session.close();
@@ -219,11 +219,11 @@
       for (int i = 0; i < numMessages; i++)
       {
          ClientMessage message2 = consumer.receive(1000);
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
          message2 = consumer2.receive(1000);
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
          message2 = consumer3.receive(1000);
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
 
       session.close();
@@ -258,17 +258,17 @@
       for (int i = 0; i < 50; i++)
       {
          ClientMessage message2 = consumer.receive(1000);
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
       for (int i = 50; i < numMessages; i++)
       {
          ClientMessage message2 = consumer2.receive(1000);
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
       for (int i = 0; i < numMessages; i++)
       {
          ClientMessage message2 = consumer3.receive(1000);
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
 
       session.close();
@@ -312,7 +312,7 @@
       {
          ClientMessage message2 = consumer.receive(1000);
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
       // assert that all the messages are there and none have been acked
       assertEquals(0, ((Queue)server.getPostOffice().getBinding(QUEUE).getBindable()).getDeliveringCount());
@@ -349,7 +349,7 @@
 
          message2.acknowledge();
 
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
       }
       // assert that all the messages are there and none have been acked
       assertEquals(0, ((Queue)server.getPostOffice().getBinding(QUEUE).getBindable()).getDeliveringCount());

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ReceiveImmediateTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ReceiveImmediateTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/ReceiveImmediateTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -167,7 +167,7 @@
       {
          ClientMessage message2 = consumer.receiveImmediate();
          assertNotNull("did not receive message " + i, message2);
-         assertEquals("m" + i, message2.getBody().readString());
+         assertEquals("m" + i, message2.getBuffer().readString());
          if (!browser)
          {
             message2.acknowledge();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/SelfExpandingBufferTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/SelfExpandingBufferTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/SelfExpandingBufferTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -84,7 +84,7 @@
 
          ClientMessage msg = session.createClientMessage(true);
 
-         HornetQBuffer buffer = msg.getBody();
+         HornetQBuffer buffer = msg.getBuffer();
 
          for (int i = 0; i < 10; i++)
          {

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/WildCardRoutingTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/WildCardRoutingTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/client/WildCardRoutingTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -54,11 +54,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -79,11 +79,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -112,11 +112,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -153,11 +153,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -182,11 +182,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -214,11 +214,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       clientConsumer.close();
       clientSession.deleteQueue(queueName);
@@ -272,39 +272,39 @@
 
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m3", m.getBody().readString());
+      assertEquals("m3", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m4", m.getBody().readString());
+      assertEquals("m4", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m5", m.getBody().readString());
+      assertEquals("m5", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m6", m.getBody().readString());
+      assertEquals("m6", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m7", m.getBody().readString());
+      assertEquals("m7", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m8", m.getBody().readString());
+      assertEquals("m8", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m9", m.getBody().readString());
+      assertEquals("m9", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -369,39 +369,39 @@
 
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m3", m.getBody().readString());
+      assertEquals("m3", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m4", m.getBody().readString());
+      assertEquals("m4", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m5", m.getBody().readString());
+      assertEquals("m5", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m6", m.getBody().readString());
+      assertEquals("m6", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m7", m.getBody().readString());
+      assertEquals("m7", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m8", m.getBody().readString());
+      assertEquals("m8", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m9", m.getBody().readString());
+      assertEquals("m9", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -439,11 +439,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -468,11 +468,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -498,11 +498,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -527,11 +527,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -556,7 +556,7 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -581,11 +581,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
    }
 
@@ -608,7 +608,7 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -633,7 +633,7 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -658,7 +658,7 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -683,7 +683,7 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -708,7 +708,7 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);
@@ -736,11 +736,11 @@
       producer2.send(createTextMessage("m2", clientSession));
       ClientMessage m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m1", m.getBody().readString());
+      assertEquals("m1", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receive(500);
       assertNotNull(m);
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();
       m = clientConsumer.receiveImmediate();
       assertNull(m);

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/ClientCrashTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/ClientCrashTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/ClientCrashTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -78,7 +78,7 @@
       // send the message to the queue
       Message messageFromClient = consumer.receive(5000);
       assertNotNull("no message received", messageFromClient);
-      assertEquals(MESSAGE_TEXT_FROM_CLIENT, messageFromClient.getBody().readString());
+      assertEquals(MESSAGE_TEXT_FROM_CLIENT, messageFromClient.getBuffer().readString());
 
       assertActiveConnections(1 + 1); // One local and one from the other vm
       assertActiveSession(1 + 1);
@@ -88,7 +88,7 @@
                                                           0,
                                                           System.currentTimeMillis(),
                                                           (byte)1);
-      message.getBody().writeString(ClientCrashTest.MESSAGE_TEXT_FROM_SERVER);
+      message.getBuffer().writeString(ClientCrashTest.MESSAGE_TEXT_FROM_SERVER);
       producer.send(message);
 
       log.debug("waiting for the client VM to crash ...");

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/ClientExitTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/ClientExitTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/ClientExitTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -70,7 +70,7 @@
       Message message = consumer.receive(15000);
 
       assertNotNull(message);
-      assertEquals(MESSAGE_TEXT, message.getBody().readString());
+      assertEquals(MESSAGE_TEXT, message.getBuffer().readString());
 
       // the client VM should exit by itself. If it doesn't, that means we have a problem
       // and the test will timeout

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/CrashClient.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/CrashClient.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/CrashClient.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -63,7 +63,7 @@
                                                              0,
                                                              System.currentTimeMillis(),
                                                              (byte)1);
-         message.getBody().writeString(ClientCrashTest.MESSAGE_TEXT_FROM_CLIENT);
+         message.getBuffer().writeString(ClientCrashTest.MESSAGE_TEXT_FROM_CLIENT);
 
          producer.send(message);
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/GracefulClient.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/GracefulClient.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/clientcrash/GracefulClient.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -61,7 +61,7 @@
 
          ClientMessage message = session.createClientMessage(HornetQTextMessage.TYPE, false, 0,
                System.currentTimeMillis(), (byte) 1);
-         message.getBody().writeString(messageText);
+         message.getBuffer().writeString(messageText);
          producer.send(message);
 
          session.start();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -184,7 +184,7 @@
 
             message.putIntProperty(propKey, i);
 
-            message.getBody().writeBytes(bytes);
+            message.getBuffer().writeBytes(bytes);
 
             producer0.send(message);
          }
@@ -261,7 +261,7 @@
 
       for (int j = 0; j < 1024; j++)
       {
-         message.getBody().readBytes(byteRead);
+         message.getBuffer().readBytes(byteRead);
       }
    }
 
@@ -540,7 +540,7 @@
 
          message.putStringProperty(propKey, new SimpleString("bing"));
 
-         message.getBody().writeString("doo be doo be doo be doo");
+         message.getBuffer().writeString("doo be doo be doo be doo");
 
          producer0.send(message);
       }
@@ -555,7 +555,7 @@
 
          assertEquals(new SimpleString("bong"), val);
 
-         String sval = message.getBody().readString();
+         String sval = message.getBuffer().readString();
 
          assertEquals("dee be dee be dee be dee", sval);
 
@@ -666,7 +666,7 @@
          {
             ClientMessage message = session0.createClientMessage(false);
 
-            message.setBody(ChannelBuffers.wrappedBuffer(new byte[1024]));
+            message.setBuffer(ChannelBuffers.wrappedBuffer(new byte[1024]));
 
             message.putIntProperty(propKey, i);
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/bridge/SimpleTransformer.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/bridge/SimpleTransformer.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/bridge/SimpleTransformer.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -46,7 +46,7 @@
       message.putStringProperty(new SimpleString("wibble"), new SimpleString("bong"));
       
       //Change the body
-      HornetQBuffer buffer = message.getBody();
+      HornetQBuffer buffer = message.getBuffer();
       
       buffer.readerIndex(0);
       

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/AsynchronousFailoverTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/AsynchronousFailoverTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/AsynchronousFailoverTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -218,7 +218,7 @@
          {
             ClientMessage message = session.createClientMessage(true);
 
-            message.getBody().writeString("message" + i);
+            message.getBuffer().writeString("message" + i);
 
             message.putIntProperty("counter", i);
 
@@ -313,7 +313,7 @@
             {
                ClientMessage message = session.createClientMessage(true);
 
-               message.getBody().writeString("message" + i);
+               message.getBuffer().writeString("message" + i);
 
                message.putIntProperty("counter", i);
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/FailoverTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/FailoverTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/FailoverTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -1706,7 +1706,7 @@
          {
             ClientMessage message = session.createClientMessage(true);
 
-            message.getBody().writeString("message");
+            message.getBuffer().writeString("message");
 
             try
             {
@@ -2082,7 +2082,7 @@
     */
    protected void assertMessageBody(int i, ClientMessage message)
    {
-      assertEquals("message" + i, message.getBody().readString());
+      assertEquals("message" + i, message.getBuffer().readString());
    }
 
    /**
@@ -2092,7 +2092,7 @@
     */
    protected void setBody(int i, ClientMessage message) throws Exception
    {
-      message.getBody().writeString("message" + i);
+      message.getBuffer().writeString("message" + i);
    }
 
    // Private -------------------------------------------------------
@@ -2115,7 +2115,7 @@
                                                              System.currentTimeMillis(),
                                                              (byte)1);
          message.putIntProperty(new SimpleString("count"), i);
-         message.getBody().writeString("aardvarks");
+         message.getBuffer().writeString("aardvarks");
          producer.send(message);
       }
 
@@ -2127,7 +2127,7 @@
       {
          ClientMessage message2 = consumer.receive();
 
-         assertEquals("aardvarks", message2.getBody().readString());
+         assertEquals("aardvarks", message2.getBuffer().readString());
 
          assertEquals(i, message2.getObjectProperty(new SimpleString("count")));
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/LargeMessageFailoverTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/LargeMessageFailoverTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/LargeMessageFailoverTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -95,7 +95,7 @@
     */
    protected void assertMessageBody(int i, ClientMessage message)
    {
-      HornetQBuffer buffer = message.getBody();
+      HornetQBuffer buffer = message.getBuffer();
 
       for (int j = 0; j < ClientSessionFactoryImpl.DEFAULT_MIN_LARGE_MESSAGE_SIZE * 3; j++)
       {

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/PagingFailoverTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/PagingFailoverTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/PagingFailoverTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -114,7 +114,7 @@
                session.commit();
             }
             ClientMessage msg = session.createClientMessage(true);
-            msg.setBody(ChannelBuffers.buffer(1024));
+            msg.setBuffer(ChannelBuffers.buffer(1024));
             msg.putIntProperty(new SimpleString("key"), i);
             prod.send(msg);
          }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/ReplicatedDistributionTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/ReplicatedDistributionTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/failover/ReplicatedDistributionTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -78,7 +78,7 @@
          {
             ClientMessage msg = sessionOne.createClientMessage(true);
             
-            msg.setBody(ChannelBuffers.wrappedBuffer(new byte[1024]));
+            msg.setBuffer(ChannelBuffers.wrappedBuffer(new byte[1024]));
             
             msg.putIntProperty(new SimpleString("key"), i);
             
@@ -182,7 +182,7 @@
          for (int i = 0; i < 100; i++)
          {
             ClientMessage msg = sessionOne.createClientMessage(true);
-            msg.setBody(ChannelBuffers.wrappedBuffer(new byte[1024]));
+            msg.setBuffer(ChannelBuffers.wrappedBuffer(new byte[1024]));
             msg.putIntProperty(new SimpleString("key"), i);
             producer.send(msg);
          }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/reattach/MultiThreadRandomReattachTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/reattach/MultiThreadRandomReattachTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/reattach/MultiThreadRandomReattachTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -55,7 +55,7 @@
    @Override
    protected boolean checkSize(final ClientMessage message)
    {
-      return 0 == message.getBody().writerIndex();
+      return 0 == message.getBuffer().writerIndex();
    }
 
 }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/reattach/ReattachTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/reattach/ReattachTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/cluster/reattach/ReattachTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -101,7 +101,7 @@
                                                                 System.currentTimeMillis(),
                                                                 (byte)1);
             message.putIntProperty(new SimpleString("count"), i);
-            message.getBody().writeString("aardvarks");
+            message.getBuffer().writeString("aardvarks");
             producer.send(message);
          }
 
@@ -119,7 +119,7 @@
 
             assertNotNull(message);
 
-            assertEquals("aardvarks", message.getBody().readString());
+            assertEquals("aardvarks", message.getBuffer().readString());
 
             assertEquals(i, message.getObjectProperty(new SimpleString("count")));
 
@@ -175,7 +175,7 @@
                                                              System.currentTimeMillis(),
                                                              (byte)1);
          message.putIntProperty(new SimpleString("count"), i);
-         message.getBody().writeString("aardvarks");
+         message.getBuffer().writeString("aardvarks");
          producer.send(message);
       }
 
@@ -213,7 +213,7 @@
 
          assertNotNull(message);
 
-         assertEquals("aardvarks", message.getBody().readString());
+         assertEquals("aardvarks", message.getBuffer().readString());
 
          assertEquals(i, message.getIntProperty("count").intValue());
 
@@ -285,7 +285,7 @@
                                                              System.currentTimeMillis(),
                                                              (byte)1);
          message.putIntProperty(new SimpleString("count"), i);
-         message.getBody().writeString("aardvarks");
+         message.getBuffer().writeString("aardvarks");
          producer.send(message);
       }
 
@@ -328,7 +328,7 @@
 
          assertNotNull(message);
 
-         assertEquals("aardvarks", message.getBody().readString());
+         assertEquals("aardvarks", message.getBuffer().readString());
 
          assertEquals(i, message.getIntProperty("count").intValue());
 
@@ -379,7 +379,7 @@
                                                              System.currentTimeMillis(),
                                                              (byte)1);
          message.putIntProperty(new SimpleString("count"), i);
-         message.getBody().writeString("aardvarks");
+         message.getBuffer().writeString("aardvarks");
          producer.send(message);
       }
 
@@ -462,7 +462,7 @@
                                                              System.currentTimeMillis(),
                                                              (byte)1);
          message.putIntProperty(new SimpleString("count"), i);
-         message.getBody().writeString("aardvarks");
+         message.getBuffer().writeString("aardvarks");
          producer.send(message);
       }
 
@@ -483,7 +483,7 @@
 
          assertNotNull(message);
 
-         assertEquals("aardvarks", message.getBody().readString());
+         assertEquals("aardvarks", message.getBuffer().readString());
 
          assertEquals(i, message.getIntProperty("count").intValue());
 
@@ -530,7 +530,7 @@
                                                              System.currentTimeMillis(),
                                                              (byte)1);
          message.putIntProperty(new SimpleString("count"), i);
-         message.getBody().writeString("aardvarks");
+         message.getBuffer().writeString("aardvarks");
          producer.send(message);
       }
 
@@ -569,7 +569,7 @@
 
          assertNotNull(message);
 
-         assertEquals("aardvarks", message.getBody().readString());
+         assertEquals("aardvarks", message.getBuffer().readString());
 
          assertEquals(i, message.getIntProperty("count").intValue());
 
@@ -622,7 +622,7 @@
                                                              System.currentTimeMillis(),
                                                              (byte)1);
          message.putIntProperty(new SimpleString("count"), i);
-         message.getBody().writeString("aardvarks");
+         message.getBuffer().writeString("aardvarks");
          producer.send(message);
       }
 
@@ -645,7 +645,7 @@
 
          assertNotNull(message);
 
-         assertEquals("aardvarks", message.getBody().readString());
+         assertEquals("aardvarks", message.getBuffer().readString());
 
          assertEquals(i, message.getObjectProperty(new SimpleString("count")));
 
@@ -701,7 +701,7 @@
                                                              System.currentTimeMillis(),
                                                              (byte)1);
          message.putIntProperty(new SimpleString("count"), i);
-         message.getBody().writeString("aardvarks");
+         message.getBuffer().writeString("aardvarks");
          producer.send(message);
       }
 
@@ -724,7 +724,7 @@
 
          assertNotNull(message);
 
-         assertEquals("aardvarks", message.getBody().readString());
+         assertEquals("aardvarks", message.getBuffer().readString());
 
          assertEquals(i, message.getIntProperty("count").intValue());
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/http/CoreClientOverHttpTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/http/CoreClientOverHttpTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/http/CoreClientOverHttpTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -65,7 +65,7 @@
       {
          ClientMessage message = session.createClientMessage(HornetQTextMessage.TYPE, false, 0,
                System.currentTimeMillis(), (byte) 1);
-         message.getBody().writeString("CoreClientOverHttpTest");
+         message.getBuffer().writeString("CoreClientOverHttpTest");
          producer.send(message);
       }
 
@@ -77,7 +77,7 @@
       {
          ClientMessage message2 = consumer.receive();
 
-         assertEquals("CoreClientOverHttpTest", message2.getBody().readString());
+         assertEquals("CoreClientOverHttpTest", message2.getBuffer().readString());
 
          message2.acknowledge();
       }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/largemessage/LargeMessageTestBase.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/largemessage/LargeMessageTestBase.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/largemessage/LargeMessageTestBase.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -349,7 +349,7 @@
                         else
                         {
 
-                           HornetQBuffer buffer = message.getBody();
+                           HornetQBuffer buffer = message.getBuffer();
                            buffer.resetReaderIndex();
                            assertEquals(numberOfBytes, buffer.writerIndex());
                            for (long b = 0; b < numberOfBytes; b++)
@@ -422,7 +422,7 @@
                      assertEquals(i, ((Integer)message.getObjectProperty(new SimpleString("counter-message"))).intValue());
                   }
 
-                  HornetQBuffer buffer = message.getBody();
+                  HornetQBuffer buffer = message.getBuffer();
                   buffer.resetReaderIndex();
 
                   if (useStreamOnConsume)
@@ -571,7 +571,7 @@
             {
                bytes[j] = getSamplebyte(j);
             }
-            message.getBody().writeBytes(bytes);
+            message.getBuffer().writeBytes(bytes);
          }
          message.putIntProperty(new SimpleString("counter-message"), i);
          if (delayDelivery > 0)

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/largemessage/ServerLargeMessageTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/largemessage/ServerLargeMessageTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/largemessage/ServerLargeMessageTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -90,7 +90,7 @@
          
          for (int i = 0 ; i < 2 * ClientSessionFactoryImpl.DEFAULT_MIN_LARGE_MESSAGE_SIZE; i++)
          {
-            assertEquals(getSamplebyte(i), msg.getBody().readByte());
+            assertEquals(getSamplebyte(i), msg.getBuffer().readByte());
          }
          
          msg.acknowledge();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/management/AddressControlTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/management/AddressControlTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/management/AddressControlTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -359,7 +359,7 @@
       for (int i = 0; i < NUMBER_MESSAGES_BEFORE_PAGING; i++)
       {
          ClientMessage msg = session.createClientMessage(true);
-         msg.getBody().writeBytes(new byte[512]);
+         msg.getBuffer().writeBytes(new byte[512]);
          producer.send(msg);
       }
       session.commit();
@@ -368,21 +368,21 @@
       assertEquals(0, addressControl.getNumberOfPages());
       
       ClientMessage msg = session.createClientMessage(true);
-      msg.getBody().writeBytes(new byte[512]);
+      msg.getBuffer().writeBytes(new byte[512]);
       producer.send(msg);
 
       session.commit();
       assertEquals(1, addressControl.getNumberOfPages());
       
       msg = session.createClientMessage(true);
-      msg.getBody().writeBytes(new byte[512]);
+      msg.getBuffer().writeBytes(new byte[512]);
       producer.send(msg);
 
       session.commit();
       assertEquals(1, addressControl.getNumberOfPages());
       
       msg = session.createClientMessage(true);
-      msg.getBody().writeBytes(new byte[512]);
+      msg.getBuffer().writeBytes(new byte[512]);
       producer.send(msg);
 
       session.commit();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/management/ManagementServiceImplTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/management/ManagementServiceImplTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/management/ManagementServiceImplTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -69,7 +69,7 @@
       // invoke attribute and operation on the server
       ServerMessage message = new ServerMessageImpl();
       HornetQBuffer body = ChannelBuffers.buffer(2048);
-      message.setBody(body);
+      message.setBuffer(body);
       ManagementHelper.putOperationInvocation(message,
                                               ResourceNames.CORE_SERVER,
                                               "createQueue",
@@ -94,7 +94,7 @@
       // invoke attribute and operation on the server
       ServerMessage message = new ServerMessageImpl();
       HornetQBuffer body = ChannelBuffers.buffer(2048);
-      message.setBody(body);
+      message.setBuffer(body);
       ManagementHelper.putOperationInvocation(message,
                                               ResourceNames.CORE_SERVER,
                                               "thereIsNoSuchOperation");
@@ -118,7 +118,7 @@
       // invoke attribute and operation on the server
       ServerMessage message = new ServerMessageImpl();
       HornetQBuffer body = ChannelBuffers.buffer(2048);
-      message.setBody(body);
+      message.setBuffer(body);
       ManagementHelper.putOperationInvocation(message,
                                               "Resouce.Does.Not.Exist",
                                               "toString");
@@ -142,7 +142,7 @@
       // invoke attribute and operation on the server
       ServerMessage message = new ServerMessageImpl();
       HornetQBuffer body = ChannelBuffers.buffer(2048);
-      message.setBody(body);
+      message.setBuffer(body);
       ManagementHelper.putAttribute(message, ResourceNames.CORE_SERVER, "attribute.Does.Not.Exist");
       
       ServerMessage reply = server.getManagementService().handleMessage(message);

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/paging/PageCrashTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/paging/PageCrashTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/paging/PageCrashTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -151,7 +151,7 @@
          ClientMessage message = null;
 
          message = session.createClientMessage(true);
-         message.getBody().writeBytes(new byte[1024]);
+         message.getBuffer().writeBytes(new byte[1024]);
 
          PagingStore store = server.getPostOffice().getPagingManager().getPageStore(ADDRESS);
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/replication/ReplicationTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/replication/ReplicationTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/replication/ReplicationTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -292,7 +292,7 @@
 
          SimpleString dummy = new SimpleString("dummy");
          msg.setDestination(dummy);
-         msg.setBody(ChannelBuffers.wrappedBuffer(new byte[10]));
+         msg.setBuffer(ChannelBuffers.wrappedBuffer(new byte[10]));
 
          replicatedJournal.appendAddRecordTransactional(23, 24, (byte)1, new FakeData());
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/scheduling/DelayedMessageTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/scheduling/DelayedMessageTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/scheduling/DelayedMessageTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -112,7 +112,7 @@
          
             assertNotNull(tm);
          
-            assertEquals("message" + i, tm.getBody().readString());
+            assertEquals("message" + i, tm.getBuffer().readString());
          }
          
          //Now close the session
@@ -176,7 +176,7 @@
          {
             ClientMessage tm = consumer2.receive(500);
             assertNotNull(tm);
-            assertEquals("message" + i, tm.getBody().readString());
+            assertEquals("message" + i, tm.getBuffer().readString());
          }
          
          //Now rollback
@@ -231,7 +231,7 @@
       {
          ClientMessage tm = consumer2.receive(500);
          assertNotNull(tm);
-         assertEquals("message" + i, tm.getBody().readString());
+         assertEquals("message" + i, tm.getBuffer().readString());
       }
 
       //Now rollback
@@ -265,7 +265,7 @@
                                                           0,
                                                           System.currentTimeMillis(),
                                                           (byte)1);
-      message.getBody().writeString(body);
+      message.getBuffer().writeString(body);
       return message;
    }
 }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/scheduling/ScheduledMessageTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/scheduling/ScheduledMessageTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/scheduling/ScheduledMessageTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -149,7 +149,7 @@
 
       ClientMessage message2 = consumer.receive(10250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m1", message2.getBody().readString());
+      assertEquals("m1", message2.getBuffer().readString());
 
       message2.acknowledge();
 
@@ -183,8 +183,8 @@
       session.start();
       ClientMessage message3 = consumer.receive(1000);
       ClientMessage message2 = consumer2.receive(1000);
-      assertEquals("m1", message3.getBody().readString());
-      assertEquals("m1", message2.getBody().readString());
+      assertEquals("m1", message3.getBuffer().readString());
+      assertEquals("m1", message2.getBuffer().readString());
       long time = System.currentTimeMillis();
       // force redelivery
       consumer.close();
@@ -195,8 +195,8 @@
       message2 = consumer2.receive(1000);
       time += 5000;
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m1", message3.getBody().readString());
-      assertEquals("m1", message2.getBody().readString());
+      assertEquals("m1", message3.getBuffer().readString());
+      assertEquals("m1", message2.getBuffer().readString());
       message2.acknowledge();
       message3.acknowledge();
 
@@ -234,8 +234,8 @@
       assertNotNull(message3);
       ClientMessage message2 = consumer2.receive(1000);
       assertNotNull(message2);
-      assertEquals("m1", message3.getBody().readString());
-      assertEquals("m1", message2.getBody().readString());
+      assertEquals("m1", message3.getBuffer().readString());
+      assertEquals("m1", message2.getBuffer().readString());
       long time = System.currentTimeMillis();
       // force redelivery
       consumer.close();
@@ -257,8 +257,8 @@
       assertNotNull(message2);
       time += 5000;
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m1", message3.getBody().readString());
-      assertEquals("m1", message2.getBody().readString());
+      assertEquals("m1", message3.getBuffer().readString());
+      assertEquals("m1", message2.getBuffer().readString());
       message2.acknowledge();
       message3.acknowledge();
 
@@ -284,7 +284,7 @@
                                                           0,
                                                           System.currentTimeMillis(),
                                                           (byte)1);
-      message.getBody().writeString("testINVMCoreClient");
+      message.getBuffer().writeString("testINVMCoreClient");
       message.setDurable(true);
       long time = System.currentTimeMillis();
       time += 10000;
@@ -309,7 +309,7 @@
 
       ClientMessage message2 = consumer.receive(11000);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("testINVMCoreClient", message2.getBody().readString());
+      assertEquals("testINVMCoreClient", message2.getBuffer().readString());
 
       message2.acknowledge();
 
@@ -370,27 +370,27 @@
 
       ClientMessage message = consumer.receive(11000);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m1", message.getBody().readString());
+      assertEquals("m1", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m2", message.getBody().readString());
+      assertEquals("m2", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m3", message.getBody().readString());
+      assertEquals("m3", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m4", message.getBody().readString());
+      assertEquals("m4", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m5", message.getBody().readString());
+      assertEquals("m5", message.getBuffer().readString());
       message.acknowledge();
 
       // Make sure no more messages
@@ -451,27 +451,27 @@
 
       ClientMessage message = consumer.receive(10250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m1", message.getBody().readString());
+      assertEquals("m1", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m3", message.getBody().readString());
+      assertEquals("m3", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m5", message.getBody().readString());
+      assertEquals("m5", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m2", message.getBody().readString());
+      assertEquals("m2", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m4", message.getBody().readString());
+      assertEquals("m4", message.getBuffer().readString());
       message.acknowledge();
 
       // Make sure no more messages
@@ -526,24 +526,24 @@
       session.start();
 
       ClientMessage message = consumer.receive(1000);
-      assertEquals("m2", message.getBody().readString());
+      assertEquals("m2", message.getBuffer().readString());
       message.acknowledge();
       message = consumer.receive(1000);
-      assertEquals("m4", message.getBody().readString());
+      assertEquals("m4", message.getBuffer().readString());
       message.acknowledge();
       message = consumer.receive(10250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m1", message.getBody().readString());
+      assertEquals("m1", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m3", message.getBody().readString());
+      assertEquals("m3", message.getBuffer().readString());
       message.acknowledge();
       time += 1000;
       message = consumer.receive(1250);
       assertTrue(System.currentTimeMillis() >= time);
-      assertEquals("m5", message.getBody().readString());
+      assertEquals("m5", message.getBuffer().readString());
       message.acknowledge();
 
       // Make sure no more messages
@@ -593,7 +593,7 @@
       System.out.println("elapsed time = " + (end - time));
       assertTrue(end  >= time);
       assertNotNull(message2);
-      assertEquals("testINVMCoreClient", message2.getBody().readString());
+      assertEquals("testINVMCoreClient", message2.getBuffer().readString());
 
       message2.acknowledge();
       session.end(xid2, XAResource.TMSUCCESS);
@@ -698,25 +698,25 @@
 
       ClientMessage rm1 = consumer.receive(250);
       assertNotNull(rm1);
-      assertEquals("testScheduled2", rm1.getBody().readString());
+      assertEquals("testScheduled2", rm1.getBuffer().readString());
 
       ClientMessage rm2 = consumer.receive(250);
       assertNotNull(rm2);
-      assertEquals("testScheduled3", rm2.getBody().readString());
+      assertEquals("testScheduled3", rm2.getBuffer().readString());
 
       ClientMessage rm3 = consumer.receive(250);
       assertNotNull(rm3);
-      assertEquals("testScheduled4", rm3.getBody().readString());
+      assertEquals("testScheduled4", rm3.getBuffer().readString());
 
       //Now the one with a scheduled with a -ve number
       ClientMessage rm5 = consumer.receive(250);
       assertNotNull(rm5);
-      assertEquals("testScheduled9", rm5.getBody().readString());
+      assertEquals("testScheduled9", rm5.getBuffer().readString());
 
       //Now the scheduled
       ClientMessage rm6 = consumer.receive(3250);
       assertNotNull(rm6);
-      assertEquals("testScheduled7", rm6.getBody().readString());
+      assertEquals("testScheduled7", rm6.getBuffer().readString());
 
       long now2 = System.currentTimeMillis();
 
@@ -724,7 +724,7 @@
 
       ClientMessage rm7 = consumer.receive(1250);
       assertNotNull(rm7);
-      assertEquals("testScheduled6", rm7.getBody().readString());
+      assertEquals("testScheduled6", rm7.getBuffer().readString());
 
       now2 = System.currentTimeMillis();
 
@@ -732,7 +732,7 @@
 
       ClientMessage rm8 = consumer.receive(1250);
       assertNotNull(rm8);
-      assertEquals("testScheduled5", rm8.getBody().readString());
+      assertEquals("testScheduled5", rm8.getBuffer().readString());
 
       now2 = System.currentTimeMillis();
 
@@ -740,7 +740,7 @@
 
       ClientMessage rm9 = consumer.receive(1250);
       assertNotNull(rm9);
-      assertEquals("testScheduled8", rm9.getBody().readString());
+      assertEquals("testScheduled8", rm9.getBuffer().readString());
 
       now2 = System.currentTimeMillis();
 
@@ -748,7 +748,7 @@
 
       ClientMessage rm10 = consumer.receive(1250);
       assertNotNull(rm10);
-      assertEquals("testScheduled1", rm10.getBody().readString());
+      assertEquals("testScheduled1", rm10.getBuffer().readString());
 
       now2 = System.currentTimeMillis();
 
@@ -772,7 +772,7 @@
                                                           0,
                                                           System.currentTimeMillis(),
                                                           (byte)1);
-      message.getBody().writeString(body);
+      message.getBuffer().writeString(body);
       return message;
    }
 }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/security/SimpleClient.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/security/SimpleClient.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/security/SimpleClient.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -65,7 +65,7 @@
                                                              0,
                                                              System.currentTimeMillis(),
                                                              (byte)1);
-         message.getBody().writeString(messageText);
+         message.getBuffer().writeString(messageText);
          producer.send(message);
 
          session.start();
@@ -76,7 +76,7 @@
             throw new Exception("did not receive the message");
          }
          
-         String text = receivedMsg.getBody().readString();
+         String text = receivedMsg.getBuffer().readString();
          if (text == null || !text.equals(messageText))
          {
             throw new Exception("received " + text + ", was expecting " + messageText);

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/ExpiryRunnerTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/ExpiryRunnerTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/ExpiryRunnerTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -131,7 +131,7 @@
          ClientMessage cm = consumer.receive(500);
          assertNotNull("message not received " + i, cm);
          cm.acknowledge();
-         assertEquals("m" + i, cm.getBody().readString());
+         assertEquals("m" + i, cm.getBuffer().readString());
       }
       consumer.close();
       Thread.sleep(2100);
@@ -208,7 +208,7 @@
          {
             break;
          }
-         String text = cm.getBody().readString();
+         String text = cm.getBuffer().readString();
          cm.acknowledge();
          assertFalse(dummyMessageHandler.payloads.contains(text));
          dummyMessageHandler.payloads.add(text);
@@ -327,7 +327,7 @@
                   break;
                }
                message.acknowledge();
-               payloads.add(message.getBody().readString());
+               payloads.add(message.getBuffer().readString());
 
                Thread.sleep(110);
             }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/LVQRecoveryTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/LVQRecoveryTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/LVQRecoveryTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -82,11 +82,11 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
    }
 
    public void testManyMessagesReceivedWithRollback() throws Exception
@@ -119,27 +119,27 @@
       producer.send(m1);
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       producer.send(m2);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       producer.send(m3);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       producer.send(m4);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       producer.send(m5);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       producer.send(m6);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       clientSessionXa.end(xid, XAResource.TMSUCCESS);
       clientSessionXa.prepare(xid);
 
@@ -153,7 +153,7 @@
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = consumer.receiveImmediate();
       assertNull(m);
    }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/LVQTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/LVQTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/server/LVQTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -63,7 +63,7 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
    }
 
    public void testMultipleMessages() throws Exception
@@ -88,11 +88,11 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
    }
 
    public void testFirstMessageReceivedButAckedAfter() throws Exception
@@ -110,11 +110,11 @@
       assertNotNull(m);
       producer.send(m2);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
    }
 
    public void testFirstMessageReceivedAndCancelled() throws Exception
@@ -130,13 +130,13 @@
       clientSession.start();
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       producer.send(m2);
       consumer.close();
       consumer = clientSession.createConsumer(qName1);
       m = consumer.receive(1000);
       assertNotNull(m);      
-      assertEquals("m2", m.getBody().readString());
+      assertEquals("m2", m.getBuffer().readString());
       m.acknowledge();      
       m = consumer.receiveImmediate();
       assertNull(m);
@@ -164,33 +164,33 @@
       producer.send(m1);
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       producer.send(m2);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       producer.send(m3);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       producer.send(m4);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       producer.send(m5);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       producer.send(m6);
       m = consumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       consumer.close();
       consumer = clientSession.createConsumer(qName1);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = consumer.receiveImmediate();
       assertNull(m);
    }
@@ -211,7 +211,7 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
    }
 
    public void testMultipleMessagesInTx() throws Exception
@@ -236,11 +236,11 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSessionTxReceives.commit();
       m = consumer.receiveImmediate();
       assertNull(m);
@@ -266,30 +266,30 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       producer.send(m3);
       producer.send(m4);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSessionTxReceives.rollback();
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
    }
 
    public void testMultipleMessagesInTxSend() throws Exception
@@ -320,7 +320,7 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
    }
 
    public void testMultipleMessagesPersistedCorrectly() throws Exception
@@ -356,7 +356,7 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = consumer.receiveImmediate();
       assertNull(m);
    }
@@ -395,7 +395,7 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = consumer.receiveImmediate();
       assertNull(m);
    }
@@ -428,32 +428,32 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       producer.send(m2);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       producer.send(m3);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       producer.send(m4);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       producer.send(m5);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       producer.send(m6);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");      
+      assertEquals(m.getBuffer().readString(), "m6");      
    }
 
    public void testMultipleAcksPersistedCorrectlyInTx() throws Exception
@@ -484,32 +484,32 @@
       ClientMessage m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       producer.send(m2);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       producer.send(m3);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       producer.send(m4);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       producer.send(m5);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       producer.send(m6);
       m = consumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       clientSessionTxReceives.commit();      
    }
    

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/ssl/CoreClientOverSSL.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/ssl/CoreClientOverSSL.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/ssl/CoreClientOverSSL.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -67,7 +67,7 @@
 
          ClientMessage message = session.createClientMessage(HornetQTextMessage.TYPE, false, 0,
                System.currentTimeMillis(), (byte) 1);
-         message.getBody().writeString(CoreClientOverSSLTest.MESSAGE_TEXT_FROM_CLIENT);
+         message.getBuffer().writeString(CoreClientOverSSLTest.MESSAGE_TEXT_FROM_CLIENT);
          producer.send(message);
 
          session.close();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/BasicXaRecoveryTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/BasicXaRecoveryTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/BasicXaRecoveryTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -508,16 +508,16 @@
       clientSession.start();
       ClientMessage m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
    }
 
    public void testBasicSendWithRollback(final boolean stopServer) throws Exception
@@ -611,16 +611,16 @@
       clientSession.start();
       ClientMessage m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m7");
+      assertEquals(m.getBuffer().readString(), "m7");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m8");
+      assertEquals(m.getBuffer().readString(), "m8");
    }
 
    public void testMultipleTxSendWithCommit(final boolean stopServer) throws Exception
@@ -673,28 +673,28 @@
       clientSession.start();
       ClientMessage m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m7");
+      assertEquals(m.getBuffer().readString(), "m7");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m8");
+      assertEquals(m.getBuffer().readString(), "m8");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
    }
 
    public void testMultipleTxSendWithRollback(final boolean stopServer) throws Exception
@@ -799,16 +799,16 @@
       clientSession.start();
       ClientMessage m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       m = clientConsumer.receiveImmediate();
       assertNull(m);
    }
@@ -862,28 +862,28 @@
       clientSession.start();
       ClientMessage m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m7");
+      assertEquals(m.getBuffer().readString(), "m7");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m8");
+      assertEquals(m.getBuffer().readString(), "m8");
    }
 
    public void testBasicReceiveWithCommit(final boolean stopServer) throws Exception
@@ -905,19 +905,19 @@
       ClientMessage m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession.end(xid, XAResource.TMSUCCESS);
       assertEquals("Expected XA_OK", XAResource.XA_OK, clientSession.prepare(xid));
 
@@ -963,19 +963,19 @@
       ClientMessage m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession.end(xid, XAResource.TMSUCCESS);
       clientSession.prepare(xid);
 
@@ -1004,16 +1004,16 @@
       clientSession.start();
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
    }
 
    public void testMultipleTxReceiveWithCommit(final boolean stopServer) throws Exception
@@ -1049,19 +1049,19 @@
       ClientMessage m = clientConsumer2.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       m = clientConsumer2.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = clientConsumer2.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m7");
+      assertEquals(m.getBuffer().readString(), "m7");
       m = clientConsumer2.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m8");
+      assertEquals(m.getBuffer().readString(), "m8");
       clientSession2.end(xid2, XAResource.TMSUCCESS);
       clientSession2.prepare(xid2);
       clientSession2.close();
@@ -1071,19 +1071,19 @@
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession.end(xid, XAResource.TMSUCCESS);
       clientSession.prepare(xid);
 
@@ -1139,19 +1139,19 @@
       ClientMessage m = clientConsumer2.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       m = clientConsumer2.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = clientConsumer2.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m7");
+      assertEquals(m.getBuffer().readString(), "m7");
       m = clientConsumer2.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m8");
+      assertEquals(m.getBuffer().readString(), "m8");
       clientSession2.end(xid2, XAResource.TMSUCCESS);
       clientSession2.prepare(xid2);
       clientSession2.close();
@@ -1161,19 +1161,19 @@
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession.end(xid, XAResource.TMSUCCESS);
       clientSession.prepare(xid);
 
@@ -1195,19 +1195,19 @@
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
    }
 
    protected void stopAndRestartServer() throws Exception
@@ -1250,7 +1250,7 @@
                                                                 0,
                                                                 System.currentTimeMillis(),
                                                                 (byte)1);
-      message.getBody().writeString(s);
+      message.getBuffer().writeString(s);
       return message;
    }
 
@@ -1261,7 +1261,7 @@
                                                                 0,
                                                                 System.currentTimeMillis(),
                                                                 (byte)1);
-      message.getBody().writeBytes(b);
+      message.getBuffer().writeBytes(b);
       return message;
    }
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/BasicXaTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/BasicXaTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/BasicXaTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -163,16 +163,16 @@
       ClientConsumer clientConsumer = clientSession.createConsumer(atestq);
       ClientMessage m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
    }
 
    public void testReceivePrepareDoesntRollbackOnClose() throws Exception
@@ -196,19 +196,19 @@
       ClientMessage m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(1000);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession.end(xid, XAResource.TMSUCCESS);
       clientSession.prepare(xid);
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/XaTimeoutTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/XaTimeoutTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/integration/xa/XaTimeoutTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -178,19 +178,19 @@
       ClientMessage m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession.end(xid, XAResource.TMSUCCESS);
       CountDownLatch latch = new CountDownLatch(1);
       messagingService.getResourceManager().getTransaction(xid).addOperation(new RollbackCompleteOperation(latch));
@@ -211,19 +211,19 @@
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = consumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession2.close();
    }
 
@@ -256,19 +256,19 @@
       ClientMessage m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession.end(xid, XAResource.TMSUCCESS);
       CountDownLatch latch = new CountDownLatch(1);
       messagingService.getResourceManager().getTransaction(xid).addOperation(new RollbackCompleteOperation(latch));
@@ -289,19 +289,19 @@
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = consumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       m = consumer.receiveImmediate();
       assertNull(m);
       clientSession2.close();
@@ -336,19 +336,19 @@
       ClientMessage m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = clientConsumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = clientConsumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession.end(xid, XAResource.TMSUCCESS);
       clientSession.prepare(xid);
       CountDownLatch latch = new CountDownLatch(1);
@@ -364,19 +364,19 @@
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m5");
+      assertEquals(m.getBuffer().readString(), "m5");
       m = consumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m6");
+      assertEquals(m.getBuffer().readString(), "m6");
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m7");
+      assertEquals(m.getBuffer().readString(), "m7");
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m8");
+      assertEquals(m.getBuffer().readString(), "m8");
       m = consumer.receiveImmediate();
       assertNull(m);
       clientSession2.close();
@@ -440,19 +440,19 @@
       clientSession2.start();
       ClientMessage m = consumer.receive(500);
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m1");
+      assertEquals(m.getBuffer().readString(), "m1");
       m = consumer.receive(500);
       assertNotNull(m);
       m.acknowledge();
-      assertEquals(m.getBody().readString(), "m2");
+      assertEquals(m.getBuffer().readString(), "m2");
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m3");
+      assertEquals(m.getBuffer().readString(), "m3");
       m = consumer.receive(500);
       m.acknowledge();
       assertNotNull(m);
-      assertEquals(m.getBody().readString(), "m4");
+      assertEquals(m.getBuffer().readString(), "m4");
       clientSession2.close();
    }
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/performance/paging/MeasurePagingMultiThreadTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/performance/paging/MeasurePagingMultiThreadTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/performance/paging/MeasurePagingMultiThreadTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -101,7 +101,7 @@
                session = factory.createSession(false, true, true);
                producer = session.createProducer(adr);
                msg = session.createClientMessage(true);
-               msg.getBody().writeBytes(new byte[SIZE_OF_MESSAGE]);
+               msg.getBuffer().writeBytes(new byte[SIZE_OF_MESSAGE]);
             }
 
             // run is not going to close sessions or anything, as we don't want to measure that time
@@ -202,7 +202,7 @@
       ClientProducer producer = session.createProducer(adr);
       ClientMessage msg = session.createClientMessage(true);
 
-      msg.getBody().writeBytes(new byte[messageSize]);
+      msg.getBuffer().writeBytes(new byte[messageSize]);
 
       sendMessages(nMessages, producer, msg);
    }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/performance/persistence/StorageManagerTimingTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/performance/persistence/StorageManagerTimingTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/performance/persistence/StorageManagerTimingTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -176,7 +176,7 @@
                   implMsg.putStringProperty(new SimpleString("Key"), new SimpleString("This String is worthless!"));
 
                   implMsg.setMessageID(i);
-                  implMsg.setBody(ChannelBuffers.wrappedBuffer(bytes));
+                  implMsg.setBuffer(ChannelBuffers.wrappedBuffer(bytes));
 
                   implMsg.setDestination(address);
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/CompactingStressTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/CompactingStressTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/CompactingStressTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -115,7 +115,7 @@
          for (int j = 0; j < 1000; j++)
          {
             Message msg = session.createClientMessage(true);
-            msg.getBody().writeBytes(new byte[1024]);
+            msg.getBuffer().writeBytes(new byte[1024]);
 
             prod.send(msg);
          }
@@ -186,7 +186,7 @@
          byte[] buffer = new byte[10 * 1024];
 
          ClientMessage msg = session.createClientMessage(true);
-         msg.setBody(ChannelBuffers.wrappedBuffer(buffer));
+         msg.setBuffer(ChannelBuffers.wrappedBuffer(buffer));
          for (int i = 0; i < TOT_AD3; i++)
          {
             producer.send(msg);
@@ -246,7 +246,7 @@
                      slowProd.send(session.createClientMessage(true));
                   }
                   ClientMessage msg = session.createClientMessage(true);
-                  msg.setBody(ChannelBuffers.wrappedBuffer(new byte[1024]));
+                  msg.setBuffer(ChannelBuffers.wrappedBuffer(new byte[1024]));
                   prod.send(msg);
                }
                sessionSlow.commit();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/LargeJournalStressTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/LargeJournalStressTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/LargeJournalStressTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -117,7 +117,7 @@
                      slowProd.send(session.createClientMessage(true));
                   }
                   ClientMessage msg = session.createClientMessage(true);
-                  msg.setBody(ChannelBuffers.wrappedBuffer(new byte[1024]));
+                  msg.setBuffer(ChannelBuffers.wrappedBuffer(new byte[1024]));
                   prod.send(msg);
                }
                sessionSlow.commit();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/MultiThreadConsumerStressTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/MultiThreadConsumerStressTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/MultiThreadConsumerStressTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -249,7 +249,7 @@
                   System.out.println(Thread.currentThread().getName() + "::received #" + i);
                }
                ClientMessage msg = session.createClientMessage(true);
-               msg.setBody(ChannelBuffers.wrappedBuffer(new byte[1024]));
+               msg.setBuffer(ChannelBuffers.wrappedBuffer(new byte[1024]));
                prod.send(msg);
             }
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/NIOMultiThreadCompactorStressTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/NIOMultiThreadCompactorStressTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/stress/journal/NIOMultiThreadCompactorStressTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -303,7 +303,7 @@
       for (int i = 0; i < nmessages; i++)
       {
          ClientMessage msg = session.createClientMessage(true);
-         msg.getBody().writeBytes(new byte[1024]);
+         msg.getBuffer().writeBytes(new byte[1024]);
          prod.send(msg);
       }
       session.commit();
@@ -455,7 +455,7 @@
                   // System.out.println(Thread.currentThread().getName() + "::sent #" + i);
                }
                ClientMessage msg = session.createClientMessage(true);
-               msg.setBody(ChannelBuffers.wrappedBuffer(new byte[1024]));
+               msg.setBuffer(ChannelBuffers.wrappedBuffer(new byte[1024]));
                prod.send(msg);
             }
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/filter/impl/FilterTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/filter/impl/FilterTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/filter/impl/FilterTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -102,7 +102,7 @@
    public void testHQSize() throws Exception
    {
       message.setDestination(RandomUtil.randomSimpleString());      
-      message.setBody(ChannelBuffers.wrappedBuffer(RandomUtil.randomBytes(1)));
+      message.setBuffer(ChannelBuffers.wrappedBuffer(RandomUtil.randomBytes(1)));
       assertTrue(message.getEncodeSize() < 1024);
       
       Filter moreThan128 = FilterImpl.createFilter(new SimpleString("HQSize > 128"));
@@ -111,7 +111,7 @@
       assertFalse(moreThan128.match(message));
       assertTrue(lessThan1024.match(message));
       
-      message.setBody(ChannelBuffers.wrappedBuffer(RandomUtil.randomBytes(1024)));
+      message.setBuffer(ChannelBuffers.wrappedBuffer(RandomUtil.randomBytes(1024)));
 
       assertTrue(moreThan128.match(message));
       assertFalse(lessThan1024.match(message));

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/message/impl/MessageImplTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/message/impl/MessageImplTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/message/impl/MessageImplTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -115,8 +115,8 @@
          message.setPriority(priority2);
          assertEquals(priority2, message.getPriority());
          
-         message.setBody(body);
-         assertTrue(body == message.getBody());
+         message.setBuffer(body);
+         assertTrue(body == message.getBuffer());
       }      
    }
    
@@ -149,7 +149,7 @@
       Message msg = new ClientMessageImpl(false); 
 
       byte[] bytes = new byte[]{(byte)1, (byte)2, (byte)3};
-      msg.setBody(ChannelBuffers.wrappedBuffer(bytes));
+      msg.setBuffer(ChannelBuffers.wrappedBuffer(bytes));
          
       msg.setDestination(address);
       msg.putStringProperty(new SimpleString("Key"), new SimpleString("This String is worthless!"));
@@ -300,7 +300,7 @@
 
       assertEquals(msg1.getType(), msg2.getType());         
 
-      assertEqualsByteArrays(msg1.getBody().array(), msg2.getBody().array());      
+      assertEqualsByteArrays(msg1.getBuffer().array(), msg2.getBuffer().array());      
 
       assertEquals(msg1.getDestination(), msg2.getDestination());
       

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PageImplTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PageImplTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PageImplTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -109,7 +109,7 @@
 
          assertEquals(simpleDestination, (msgs.get(i).getMessage(null)).getDestination());
 
-         assertEqualsByteArrays(buffers.get(i).array(), (msgs.get(i).getMessage(null)).getBody().array());
+         assertEqualsByteArrays(buffers.get(i).array(), (msgs.get(i).getMessage(null)).getBuffer().array());
       }
 
       impl.delete();
@@ -182,7 +182,7 @@
 
          assertEquals(simpleDestination, (msgs.get(i).getMessage(null)).getDestination());
 
-         assertEqualsByteArrays(buffers.get(i).array(), (msgs.get(i).getMessage(null)).getBody().array());
+         assertEqualsByteArrays(buffers.get(i).array(), (msgs.get(i).getMessage(null)).getBuffer().array());
       }
 
       impl.delete();

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PagingManagerImplTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PagingManagerImplTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PagingManagerImplTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -90,7 +90,7 @@
 
       assertEquals(1, msgs.size());
 
-      assertEqualsByteArrays(msg.getBody().array(), (msgs.get(0).getMessage(null)).getBody().array());
+      assertEqualsByteArrays(msg.getBuffer().array(), (msgs.get(0).getMessage(null)).getBuffer().array());
 
       assertTrue(store.isPaging());
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PagingStoreImplTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PagingStoreImplTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/paging/impl/PagingStoreImplTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -295,7 +295,7 @@
       for (int i = 0; i < 10; i++)
       {
          assertEquals(0, msg.get(i).getMessage(null).getMessageID());
-         assertEqualsByteArrays(buffers.get(i).array(), msg.get(i).getMessage(null).getBody().array());
+         assertEqualsByteArrays(buffers.get(i).array(), msg.get(i).getMessage(null).getBuffer().array());
       }
 
    }
@@ -366,7 +366,7 @@
          for (int i = 0; i < 5; i++)
          {
             assertEquals(0, msg.get(i).getMessage(null).getMessageID());
-            assertEqualsByteArrays(buffers.get(pageNr * 5 + i).array(), msg.get(i).getMessage(null).getBody().array());
+            assertEqualsByteArrays(buffers.get(pageNr * 5 + i).array(), msg.get(i).getMessage(null).getBuffer().array());
          }
       }
 
@@ -410,7 +410,7 @@
 
       assertEquals(0l, msgs.get(0).getMessage(null).getMessageID());
 
-      assertEqualsByteArrays(buffers.get(0).array(), msgs.get(0).getMessage(null).getBody().array());
+      assertEqualsByteArrays(buffers.get(0).array(), msgs.get(0).getMessage(null).getBuffer().array());
 
       assertEquals(1, storeImpl.getNumberOfPages());
 
@@ -589,14 +589,14 @@
 
          for (PagedMessage msg : msgs)
          {
-            long id = msg.getMessage(null).getBody().readLong();
-            msg.getMessage(null).getBody().resetReaderIndex();
+            long id = msg.getMessage(null).getBuffer().readLong();
+            msg.getMessage(null).getBuffer().resetReaderIndex();
 
             ServerMessage msgWritten = buffers.remove(id);
             buffers2.put(id, msg.getMessage(null));
             assertNotNull(msgWritten);
             assertEquals(msg.getMessage(null).getDestination(), msgWritten.getDestination());
-            assertEqualsByteArrays(msgWritten.getBody().array(), msg.getMessage(null).getBody().array());
+            assertEqualsByteArrays(msgWritten.getBuffer().array(), msg.getMessage(null).getBuffer().array());
          }
       }
 
@@ -662,11 +662,11 @@
          for (PagedMessage msg : msgs)
          {
 
-            long id = msg.getMessage(null).getBody().readLong();
+            long id = msg.getMessage(null).getBuffer().readLong();
             ServerMessage msgWritten = buffers2.remove(id);
             assertNotNull(msgWritten);
             assertEquals(msg.getMessage(null).getDestination(), msgWritten.getDestination());
-            assertEqualsByteArrays(msgWritten.getBody().array(), msg.getMessage(null).getBody().array());
+            assertEqualsByteArrays(msgWritten.getBuffer().array(), msg.getMessage(null).getBuffer().array());
          }
       }
 
@@ -675,9 +675,9 @@
       lastPage.close();
       assertEquals(1, lastMessages.size());
 
-      lastMessages.get(0).getMessage(null).getBody().resetReaderIndex();
-      assertEquals(lastMessages.get(0).getMessage(null).getBody().readLong(), lastMessageId);
-      assertEqualsByteArrays(lastMessages.get(0).getMessage(null).getBody().array(), lastMsg.getBody().array());
+      lastMessages.get(0).getMessage(null).getBuffer().resetReaderIndex();
+      assertEquals(lastMessages.get(0).getMessage(null).getBuffer().readLong(), lastMessageId);
+      assertEqualsByteArrays(lastMessages.get(0).getMessage(null).getBuffer().array(), lastMsg.getBuffer().array());
 
       assertEquals(0, buffers2.size());
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/postoffice/impl/BindingsImplTest.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/postoffice/impl/BindingsImplTest.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/unit/core/postoffice/impl/BindingsImplTest.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -488,7 +488,7 @@
       /* (non-Javadoc)
        * @see org.hornetq.core.message.Message#getBody()
        */
-      public HornetQBuffer getBody()
+      public HornetQBuffer getBuffer()
       {
 
          return null;
@@ -737,7 +737,7 @@
       /* (non-Javadoc)
        * @see org.hornetq.core.message.Message#setBody(org.hornetq.core.remoting.spi.HornetQBuffer)
        */
-      public void setBody(final HornetQBuffer body)
+      public void setBuffer(final HornetQBuffer body)
       {
 
       }

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/util/ServiceTestBase.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/util/ServiceTestBase.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/util/ServiceTestBase.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -353,8 +353,8 @@
 
    public String getTextMessage(ClientMessage m)
    {
-      m.getBody().resetReaderIndex();
-      return m.getBody().readString();
+      m.getBuffer().resetReaderIndex();
+      return m.getBuffer().readString();
    }
 
    protected ClientMessage createTextMessage(final ClientSession session, final String s, final boolean durable)
@@ -364,7 +364,7 @@
                                                           0,
                                                           System.currentTimeMillis(),
                                                           (byte)1);
-      message.getBody().writeString(s);
+      message.getBuffer().writeString(s);
       return message;
    }
 
@@ -375,7 +375,7 @@
                                                           0,
                                                           System.currentTimeMillis(),
                                                           (byte)1);
-      message.getBody().writeBytes(b);
+      message.getBuffer().writeBytes(b);
       return message;
    }
 

Modified: branches/20-optimisation/tests/src/org/hornetq/tests/util/UnitTestCase.java
===================================================================
--- branches/20-optimisation/tests/src/org/hornetq/tests/util/UnitTestCase.java	2009-11-18 18:10:11 UTC (rev 8313)
+++ branches/20-optimisation/tests/src/org/hornetq/tests/util/UnitTestCase.java	2009-11-18 19:46:20 UTC (rev 8314)
@@ -842,7 +842,7 @@
 
       message.setMessageID(id);
 
-      message.getBody().writeString(UUID.randomUUID().toString());
+      message.getBuffer().writeString(UUID.randomUUID().toString());
       
       message.setDestination(new SimpleString("foo"));
 
@@ -873,7 +873,7 @@
                                                                 0,
                                                                 System.currentTimeMillis(),
                                                                 (byte)1);
-      message.getBody().writeString(s);
+      message.getBuffer().writeString(s);
       return message;
    }
    



More information about the hornetq-commits mailing list