[jboss-cvs] JBoss Messaging SVN: r3386 - in branches/Branch_JBMESSAGING-544: src/main/org/jboss/jms/wireformat and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 30 12:20:15 EST 2007


Author: jmesnil
Date: 2007-11-30 12:20:15 -0500 (Fri, 30 Nov 2007)
New Revision: 3386

Added:
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/wireformat/
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/wireformat/JMSWireFormat.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DecoderStatus.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/MinaPacketCodec.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/internal/
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/internal/MinaRemotingBuffer.java
Removed:
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/AbstractPacketCodecTest.java
Modified:
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveriesRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AddCallbackMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AddTemporaryDestinationMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageBlockRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageBlockResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CancelDeliveriesMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CancelDeliveryMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ChangeRateMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateBrowserRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateBrowserResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateDestinationRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateDestinationResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeleteTemporaryDestinationMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetClientAOPStackResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetClientIDResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetPreparedTransactionsResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetTopologyResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockRequestCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockResponseCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/JMSExceptionMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/RecoverDeliveriesMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendTransactionMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SetClientIDMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/TextPacketCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/UnsubscribeMessageCodec.java
   branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java
Log:
http://jira.jboss.org/jira/browse/JBMESSAGING-544 Replace client-server transport with NIO based transport
* refactored remoting.codec package to remove any dependency to MINA (put in the internal subpackage instead)
* reintroduced an empty JMSWireFormat required to compile

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/wireformat/JMSWireFormat.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/wireformat/JMSWireFormat.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/wireformat/JMSWireFormat.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -0,0 +1,106 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.jms.wireformat;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Map;
+
+import org.jboss.logging.Logger;
+import org.jboss.remoting.marshal.Marshaller;
+import org.jboss.remoting.marshal.UnMarshaller;
+
+/**
+ * We do not use Java or JBoss serialization to send data over the wire. Serialization adds
+ * considerable overhead in terms of the amount of data sent (it adds class information plus block
+ * data information) which significantly degrades performance.
+ * 
+ * Instead we define a customer wire format that minimises the amount of data sent.
+ * 
+ * The only exception to this rule is when sending an ObjectMessage which contains a user defined
+ * object whose type is only known at run-time. In this case we use serialization.
+ * 
+ * @author <a href="tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="ovidiu at feodorov.com">Ovidiu Feodorov</a>
+ * @version <tt>$Revision: 3265 $</tt>
+ *
+ * $Id: JMSWireFormat.java 3265 2007-10-31 12:44:42Z timfox $
+ */
+public class JMSWireFormat implements Marshaller, UnMarshaller
+{
+   // Constants ------------------------------------------------------------------------------------
+
+   private static final long serialVersionUID = -7646123424863782043L;
+
+   private static final Logger log = Logger.getLogger(JMSWireFormat.class);
+   
+   // Static ---------------------------------------------------------------------------------------
+
+   // Attributes -----------------------------------------------------------------------------------
+
+   protected boolean trace;
+
+   // Constructors ---------------------------------------------------------------------------------
+
+   public JMSWireFormat()
+   {
+   }
+
+   // Marshaller implementation --------------------------------------------------------------------
+
+   public void write(Object obj, OutputStream out) throws IOException
+   {          
+      throw new IllegalStateException("JBoss Remoting wireformat must not be used");
+   }
+   
+   public Marshaller cloneMarshaller() throws CloneNotSupportedException
+   {
+      return null;
+   }
+
+   // UnMarshaller implementation ------------------------------------------------------------------
+
+   public Object read(InputStream in, Map map) throws IOException, ClassNotFoundException
+   {            
+      throw new IllegalStateException("JBoss Remoting wireformat must not be used");
+   }
+      
+   public UnMarshaller cloneUnMarshaller() throws CloneNotSupportedException
+   {
+      return null;
+   }
+
+   public void setClassLoader(ClassLoader classloader)
+   {
+   }
+
+   // Public ---------------------------------------------------------------------------------------
+
+   // Package protected ----------------------------------------------------------------------------
+
+   // Protected ------------------------------------------------------------------------------------
+
+   // Private --------------------------------------------------------------------------------------      
+
+   // Inner classes --------------------------------------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -18,51 +18,33 @@
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoder;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
 import org.jboss.jms.destination.JBossDestination;
 import org.jboss.messaging.core.contract.Message;
 import org.jboss.messaging.core.impl.message.MessageFactory;
 import org.jboss.messaging.core.remoting.Constants;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
 import org.jboss.messaging.core.remoting.wireformat.PacketType;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
  */
-public abstract class AbstractPacketCodec<P extends AbstractPacket> implements
-MessageEncoder<P>, MessageDecoder
+public abstract class AbstractPacketCodec<P extends AbstractPacket>
 {
    // Constants -----------------------------------------------------
 
-   private static final CharsetEncoder UTF_8_ENCODER = Charset.forName("UTF-8")
-   .newEncoder();
-
-   private static final CharsetDecoder UTF_8_DECODER = Charset.forName("UTF-8")
-   .newDecoder();
-
-   private static final byte TRUE = (byte) 0;
-
-   private static final byte FALSE = (byte) 1;
-
    protected static final int INT_LENGTH = 4;
 
    protected static final int FLOAT_LENGTH = 4;
 
    protected static final int LONG_LENGTH = 8;
 
-   // used to terminate encoded Strings
-   protected static final byte NULL_BYTE = (byte) 0;
+   public static final CharsetEncoder UTF_8_ENCODER = Charset.forName("UTF-8")
+   .newEncoder();
 
-   protected static final byte NULL_STRING = (byte) 0;
+   public static final CharsetDecoder UTF_8_DECODER = Charset.forName("UTF-8")
+   .newDecoder();
 
-   protected static final byte NOT_NULL_STRING = (byte) 1;
-
    // Attributes ----------------------------------------------------
 
    private PacketType type;
@@ -80,11 +62,12 @@
 
    // Public --------------------------------------------------------
 
-   // MessageEncoder implementation ---------------------------------
-
-   public void encode(IoSession session, P packet, ProtocolEncoderOutput out)
+   public void encode(P packet, RemotingBuffer buf)
    throws Exception
    {
+      assert packet != null;
+      assert buf != null;
+      
       byte version = packet.getVersion();
       if (version == Constants.NO_VERSION_SET)
       {
@@ -97,115 +80,100 @@
 
       int headerLength = LONG_LENGTH + sizeof(targetID) + sizeof(callbackID);
 
-      IoBuffer buf = IoBuffer.allocate(256);
-
-      // Enable auto-expand for easier encoding
-      buf.setAutoExpand(true);
-
       buf.put(packet.getType().byteValue());
       buf.put(version);
       buf.putInt(headerLength);
       buf.putLong(correlationID);
-      putString(buf, targetID);
-      putString(buf, callbackID);
+      buf.putNullableString(targetID);
+      buf.putNullableString(callbackID);
 
-      encodeBody(session, packet, buf);
-
-      buf.flip();
-      out.write(buf);
+      encodeBody(packet, buf);
    }
 
    // MessageDecoder implementation ---------------------------------
 
-   public MessageDecoderResult decodable(IoSession session, IoBuffer in)
+   public DecoderStatus decodable(RemotingBuffer buffer)
    {
-      byte t = in.get();
+      byte t = buffer.get();
       if (t != type.byteValue())
       {
-         return NOT_OK;
+         return DecoderStatus.NOT_OK;
       }
-      in.get(); // version
-      if (in.remaining() < INT_LENGTH)
+      buffer.get(); // version
+      if (buffer.remaining() < INT_LENGTH)
       {
          System.out.println("need more data to read header length");
          // can not read next int
-         return NEED_DATA;
+         return DecoderStatus.NEED_DATA;
       }
-      int headerLength = in.getInt();
-      if (in.remaining() < headerLength)
+      int headerLength = buffer.getInt();
+      if (buffer.remaining() < headerLength)
       {
          System.out.println("need more data to read header");
-         return NEED_DATA;
+         return DecoderStatus.NEED_DATA;
       }
-      in.getLong(); // correlation ID
+      buffer.getLong(); // correlation ID
       try
       {
-         in.getString(UTF_8_DECODER);
+         buffer.getString(UTF_8_DECODER);
       } catch (CharacterCodingException e)
       {
-         return NOT_OK;
+         return DecoderStatus.NOT_OK;
       }
       try
       {
-         in.getString(UTF_8_DECODER);
+         buffer.getString(UTF_8_DECODER);
       } catch (CharacterCodingException e)
       {
-         return NOT_OK;
+         return DecoderStatus.NOT_OK;
       }
 
-      if (in.remaining() < INT_LENGTH)
+      if (buffer.remaining() < INT_LENGTH)
       {
          System.out.println("need more data to read body length");
          // can not read next int
-         return NEED_DATA;
+         return DecoderStatus.NEED_DATA;
       }
-      int bodyLength = in.getInt();
+      int bodyLength = buffer.getInt();
       if (bodyLength == 0)
       {
-         return OK;
+         return DecoderStatus.OK;
       }
-      if (in.remaining() < bodyLength)
+      if (buffer.remaining() < bodyLength)
       {
          System.out.println("need more data to read body");
-         return NEED_DATA;
+         return DecoderStatus.NEED_DATA;
       }
-      return OK;
+      return DecoderStatus.OK;
    }
 
-   public MessageDecoderResult decode(IoSession session, IoBuffer in,
-         ProtocolDecoderOutput out) throws Exception
+   public P decode(RemotingBuffer wrapper) throws Exception
    {
-      in.get(); // skip message type
-      byte version = in.get();
-      in.getInt(); // skip header length
-      long correlationID = in.getLong();
-      String targetID = getString(in);
-      String callbackID = getString(in);
+      wrapper.get(); // skip message type
+      byte version = wrapper.get();
+      wrapper.getInt(); // skip header length
+      long correlationID = wrapper.getLong();
+      String targetID = MinaPacketCodec.getString(wrapper);
+      String callbackID = MinaPacketCodec.getString(wrapper);
 
-      P packet = decodeBody(session, in);
+      P packet = decodeBody(wrapper);
 
       if (packet == null)
       {
-         return NEED_DATA;
+         return null;
       }
       packet.setVersion(version);
       packet.setTargetID(targetID);
       packet.setCorrelationID(correlationID);
       packet.setCallbackID(callbackID);
-      out.write(packet);
-
-      return OK;
+      
+      return packet;
    }
-
-   public void finishDecode(IoSession session, ProtocolDecoderOutput out)
-   throws Exception
-   {
-   }
-
-   protected abstract void encodeBody(IoSession session, P packet, IoBuffer out)
+   
+   protected abstract void encodeBody(P packet, RemotingBuffer buf)
    throws Exception;
 
-   protected abstract P decodeBody(IoSession session, IoBuffer in)
+   protected abstract P decodeBody(RemotingBuffer buffer)
    throws Exception;
 
    public static int sizeof(String nullableString)
@@ -220,63 +188,6 @@
       }
    }
 
-   public static void putString(IoBuffer out, String nullableString)
-   throws CharacterCodingException
-   {
-
-      if (nullableString == null)
-      {
-         out.put(NULL_STRING);
-      } else
-      {
-         out.put(NOT_NULL_STRING);
-         out.putString(nullableString, UTF_8_ENCODER);
-         out.put(NULL_BYTE);
-      }
-   }
-
-   public static String getString(IoBuffer in) throws CharacterCodingException
-   {
-      byte check = in.get();
-      if (check == NULL_STRING)
-      {
-         return null;
-      } else
-      {
-         assert check == NOT_NULL_STRING;
-
-         return in.getString(UTF_8_DECODER);
-      }
-   }
-
-   public static void putBoolean(IoBuffer out, boolean b)
-   {
-      if (b)
-      {
-         out.put(TRUE);
-      } else
-      {
-         out.put(FALSE);
-      }
-   }
-
-   public static boolean getBoolean(IoBuffer in)
-   {
-      byte b = in.get();
-      if (b == TRUE)
-      {
-         return true;
-      } else
-      {
-         assert b == FALSE;
-         return false;
-      }
-   }
-   
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-
    protected static byte[] encode(JBossDestination destination) throws Exception
    {
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -306,6 +217,7 @@
       msg.read(new DataInputStream(bais));
       return msg;
    }
+   
    // Private -------------------------------------------------------
 
    // Inner classes -------------------------------------------------

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveriesRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveriesRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveriesRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -11,8 +11,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.delegate.Ack;
 import org.jboss.jms.delegate.DefaultAck;
 import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveriesMessage;
@@ -41,8 +39,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         AcknowledgeDeliveriesMessage request, IoBuffer out) throws Exception
+   protected void encodeBody(AcknowledgeDeliveriesMessage request,
+         RemotingBuffer out) throws Exception
    {
 
       long[] deliveryIDs = convert(request.getAcks());
@@ -56,8 +54,7 @@
    }
 
    @Override
-   protected AcknowledgeDeliveriesMessage decodeBody(IoSession session,
-         IoBuffer in) throws Exception
+   protected AcknowledgeDeliveriesMessage decodeBody(RemotingBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
       if (in.remaining() < bodyLength)

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_ACKDELIVERY;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryRequest;
 
 /**
@@ -36,8 +34,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         AcknowledgeDeliveryRequest request, IoBuffer out) throws Exception
+   protected void encodeBody(AcknowledgeDeliveryRequest request,
+         RemotingBuffer out) throws Exception
    {
       long deliveryID = request.getDeliveryID();
 
@@ -46,8 +44,7 @@
    }
 
    @Override
-   protected AcknowledgeDeliveryRequest decodeBody(IoSession session,
-         IoBuffer in) throws Exception
+   protected AcknowledgeDeliveryRequest decodeBody(RemotingBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
       if (in.remaining() < bodyLength)

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AcknowledgeDeliveryResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_ACKDELIVERY;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryResponse;
 
 /**
@@ -36,16 +34,15 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         AcknowledgeDeliveryResponse response, IoBuffer out) throws Exception
+   protected void encodeBody(AcknowledgeDeliveryResponse response,
+         RemotingBuffer out) throws Exception
    {
       out.putInt(1); //body length
-      putBoolean(out, response.isAcknowledged());
+      out.putBoolean(response.isAcknowledged());
    }
 
    @Override
-   protected AcknowledgeDeliveryResponse decodeBody(IoSession session,
-         IoBuffer in) throws Exception
+   protected AcknowledgeDeliveryResponse decodeBody(RemotingBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
       if (in.remaining() < bodyLength)
@@ -53,7 +50,7 @@
          return null;
       }
 
-      boolean acknowledged = getBoolean(in);
+      boolean acknowledged = in.getBoolean();
 
       return new AcknowledgeDeliveryResponse(acknowledged);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AddCallbackMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AddCallbackMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AddCallbackMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_UPDATECALLBACK;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.UpdateCallbackMessage;
 
 /**
@@ -36,8 +35,7 @@
    // AbstractPackedCodec overrides----------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, UpdateCallbackMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(UpdateCallbackMessage message, RemotingBuffer out) throws Exception
    {
       String remotingSessionID = message.getRemotingSessionID();
       String clientVMID = message.getClientVMID();
@@ -46,13 +44,13 @@
       int bodyLength = sizeof(remotingSessionID) + sizeof(clientVMID) + 1;
 
       out.putInt(bodyLength);
-      putString(out, remotingSessionID);
-      putString(out, clientVMID);
-      putBoolean(out, add);
+      out.putNullableString(remotingSessionID);
+      out.putNullableString(clientVMID);
+      out.putBoolean(add);
    }
 
    @Override
-   protected UpdateCallbackMessage decodeBody(IoSession session, IoBuffer in)
+   protected UpdateCallbackMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -60,9 +58,9 @@
       {
          return null;
       }
-      String remotingSessionID = getString(in);
-      String clientVMID = getString(in);
-      boolean add = getBoolean(in);
+      String remotingSessionID = MinaPacketCodec.getString(in);
+      String clientVMID = MinaPacketCodec.getString(in);
+      boolean add = in.getBoolean();
 
       return new UpdateCallbackMessage(remotingSessionID, clientVMID, add);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AddTemporaryDestinationMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AddTemporaryDestinationMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AddTemporaryDestinationMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_ADDTEMPORARYDESTINATION;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.destination.JBossDestination;
 import org.jboss.messaging.core.remoting.wireformat.AddTemporaryDestinationMessage;
 
@@ -37,8 +35,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, AddTemporaryDestinationMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(AddTemporaryDestinationMessage message, RemotingBuffer out) throws Exception
    {
       byte[] destination = encode(message.getDestination());
 
@@ -50,7 +47,7 @@
    }
 
    @Override
-   protected AddTemporaryDestinationMessage decodeBody(IoSession session, IoBuffer in)
+   protected AddTemporaryDestinationMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_BROWSER_HASNEXTMESSAGE;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageResponse;
 
 /**
@@ -36,16 +34,15 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         BrowserHasNextMessageResponse response, IoBuffer out) throws Exception
+   protected void encodeBody(BrowserHasNextMessageResponse response,
+         RemotingBuffer out) throws Exception
    {
       out.putInt(1); //body length
-      putBoolean(out, response.hasNext());
+      out.putBoolean(response.hasNext());
    }
 
    @Override
-   protected BrowserHasNextMessageResponse decodeBody(IoSession session,
-         IoBuffer in) throws Exception
+   protected BrowserHasNextMessageResponse decodeBody(RemotingBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
       if (in.remaining() < bodyLength)
@@ -53,7 +50,7 @@
          return null;
       }
 
-      boolean hasNext = getBoolean(in);
+      boolean hasNext = in.getBoolean();
 
       return new BrowserHasNextMessageResponse(hasNext);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageBlockRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageBlockRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageBlockRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_BROWSER_NEXTMESSAGEBLOCK;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageBlockRequest;
 
 /**
@@ -35,15 +33,14 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, BrowserNextMessageBlockRequest request,
-         IoBuffer out) throws Exception
+   protected void encodeBody(BrowserNextMessageBlockRequest request, RemotingBuffer out) throws Exception
    {
       out.putInt(LONG_LENGTH);
       out.putLong(request.getMaxMessages());
    }
 
    @Override
-   protected BrowserNextMessageBlockRequest decodeBody(IoSession session, IoBuffer in)
+   protected BrowserNextMessageBlockRequest decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageBlockResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageBlockResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageBlockResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -13,8 +13,6 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.messaging.core.impl.message.MessageFactory;
 import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageBlockResponse;
@@ -42,8 +40,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, BrowserNextMessageBlockResponse response,
-         IoBuffer out) throws Exception
+   protected void encodeBody(BrowserNextMessageBlockResponse response, RemotingBuffer out) throws Exception
    {
       JBossMessage[] messages = response.getMessages();
       
@@ -58,7 +55,7 @@
    }
 
    @Override
-   protected BrowserNextMessageBlockResponse decodeBody(IoSession session, IoBuffer in)
+   protected BrowserNextMessageBlockResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_BROWSER_NEXTMESSAGE;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageResponse;
 
@@ -36,8 +34,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, BrowserNextMessageResponse response,
-         IoBuffer out) throws Exception
+   protected void encodeBody(BrowserNextMessageResponse response, RemotingBuffer out) throws Exception
    {
       JBossMessage message = response.getMessage();
       byte[] encodedMsg = encode(response.getMessage());
@@ -51,7 +48,7 @@
    }
 
    @Override
-   protected BrowserNextMessageResponse decodeBody(IoSession session, IoBuffer in)
+   protected BrowserNextMessageResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CancelDeliveriesMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CancelDeliveriesMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CancelDeliveriesMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -11,8 +11,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.delegate.Cancel;
 import org.jboss.jms.delegate.DefaultCancel;
 import org.jboss.messaging.core.remoting.wireformat.CancelDeliveriesMessage;
@@ -43,8 +41,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         CancelDeliveriesMessage message, IoBuffer out) throws Exception
+   protected void encodeBody(CancelDeliveriesMessage message,
+         RemotingBuffer out) throws Exception
    {
       List<Cancel> cancels = message.getCancels();
 
@@ -58,13 +56,13 @@
       {
          out.putLong(cancel.getDeliveryId());
          out.putInt(cancel.getDeliveryCount());
-         putBoolean(out, cancel.isExpired());
-         putBoolean(out, cancel.isReachedMaxDeliveryAttempts());
+         out.putBoolean(cancel.isExpired());
+         out.putBoolean(cancel.isReachedMaxDeliveryAttempts());
       }
    }
 
    @Override
-   protected CancelDeliveriesMessage decodeBody(IoSession session, IoBuffer in)
+   protected CancelDeliveriesMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -79,8 +77,8 @@
       {
          long deliveryID = in.getLong();
          int deliveryCount = in.getInt();
-         boolean expired = getBoolean(in);
-         boolean reachedMaxDeliveryAttempts = getBoolean(in);
+         boolean expired = in.getBoolean();
+         boolean reachedMaxDeliveryAttempts = in.getBoolean();
 
          cancels.add(new DefaultCancel(deliveryID, deliveryCount, expired,
                reachedMaxDeliveryAttempts));

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CancelDeliveryMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CancelDeliveryMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CancelDeliveryMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CANCELDELIVERY;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.delegate.Cancel;
 import org.jboss.jms.delegate.DefaultCancel;
 import org.jboss.messaging.core.remoting.wireformat.CancelDeliveryMessage;
@@ -38,8 +36,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, CancelDeliveryMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(CancelDeliveryMessage message, RemotingBuffer out) throws Exception
    {
       long deliveryID = message.getCancel().getDeliveryId();
       int deliveryCount = message.getCancel().getDeliveryCount();
@@ -52,12 +49,12 @@
       out.putInt(bodyLength);
       out.putLong(deliveryID);
       out.putInt(deliveryCount);
-      putBoolean(out, expired);
-      putBoolean(out, reachedMaxDeliveryAttempts);
+      out.putBoolean(expired);
+      out.putBoolean(reachedMaxDeliveryAttempts);
    }
 
    @Override
-   protected CancelDeliveryMessage decodeBody(IoSession session, IoBuffer in)
+   protected CancelDeliveryMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -68,8 +65,8 @@
 
       long deliveryID = in.getLong();
       int deliveryCount = in.getInt();
-      boolean expired = getBoolean(in);
-      boolean reachedMaxDeliveryAttempts = getBoolean(in);
+      boolean expired = in.getBoolean();
+      boolean reachedMaxDeliveryAttempts = in.getBoolean();
 
       Cancel cancel = new DefaultCancel(deliveryID, deliveryCount, expired,
             reachedMaxDeliveryAttempts);

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ChangeRateMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ChangeRateMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ChangeRateMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CHANGERATE;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.ChangeRateMessage;
 
 /**
@@ -36,15 +34,14 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, ChangeRateMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(ChangeRateMessage message, RemotingBuffer out) throws Exception
    {
       out.putInt(FLOAT_LENGTH);
       out.putFloat(message.getRate());
    }
 
    @Override
-   protected ChangeRateMessage decodeBody(IoSession session, IoBuffer in)
+   protected ChangeRateMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CLOSING;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.ClosingRequest;
 
 /**
@@ -35,15 +33,14 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, ClosingRequest request,
-         IoBuffer out) throws Exception
+   protected void encodeBody(ClosingRequest request, RemotingBuffer out) throws Exception
    {
       out.putInt(LONG_LENGTH);
       out.putLong(request.getSequence());
    }
 
    @Override
-   protected ClosingRequest decodeBody(IoSession session, IoBuffer in)
+   protected ClosingRequest decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ClosingResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CLOSING;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.ClosingResponse;
 
 /**
@@ -35,15 +33,14 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, ClosingResponse response,
-         IoBuffer out) throws Exception
+   protected void encodeBody(ClosingResponse response, RemotingBuffer out) throws Exception
    {
       out.putInt(LONG_LENGTH);
       out.putLong(response.getID());
    }
 
    @Override
-   protected ClosingResponse decodeBody(IoSession session, IoBuffer in)
+   protected ClosingResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONNECTION;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.CreateConnectionRequest;
 
 /**
@@ -36,8 +35,8 @@
    // AbstractPackedCodec overrides----------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         CreateConnectionRequest request, IoBuffer out)
+   protected void encodeBody(CreateConnectionRequest request,
+         RemotingBuffer out)
          throws Exception
    {
       byte version = request.getVersion();
@@ -56,16 +55,16 @@
 
       out.putInt(bodyLength);
       out.put(version);
-      putString(out, remotingSessionID);
-      putString(out, clientVMID);
+      out.putNullableString(remotingSessionID);
+      out.putNullableString(clientVMID);
       out.putInt(failedNodeID);
-      putString(out, username);
-      putString(out, password);
+      out.putNullableString(username);
+      out.putNullableString(password);
    }
 
    @Override
    protected CreateConnectionRequest decodeBody(
-         IoSession session, IoBuffer in) throws Exception
+         RemotingBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
       if (in.remaining() < bodyLength)
@@ -73,11 +72,11 @@
          return null;
       }
       byte version = in.get();
-      String remotingSessionID = getString(in);
-      String clientVMID = getString(in);
+      String remotingSessionID = MinaPacketCodec.getString(in);
+      String clientVMID = MinaPacketCodec.getString(in);
       int failedNodeID = in.getInt();
-      String username = getString(in);
-      String password = getString(in);
+      String username = MinaPacketCodec.getString(in);
+      String password = MinaPacketCodec.getString(in);
 
       return new CreateConnectionRequest(version, remotingSessionID, 
             clientVMID, failedNodeID, username, password);

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/ConnectionFactoryCreateConnectionResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONNECTION;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.CreateConnectionResponse;
 
 /**
@@ -36,8 +35,8 @@
    // AbstractPackedCodec overrides----------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         CreateConnectionResponse response, IoBuffer out)
+   protected void encodeBody(CreateConnectionResponse response,
+         RemotingBuffer out)
          throws Exception
    {
       String id = response.getConnectionID();
@@ -46,20 +45,20 @@
       int bodyLength = sizeof(id) + INT_LENGTH;
 
       out.putInt(bodyLength);
-      putString(out, id);
+      out.putNullableString(id);
       out.putInt(serverID);
    }
 
    @Override
    protected CreateConnectionResponse decodeBody(
-         IoSession session, IoBuffer in) throws Exception
+         RemotingBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
       if (bodyLength > in.remaining())
       {
          return null;
       }
-      String id = getString(in);
+      String id = MinaPacketCodec.getString(in);
       int serverID = in.getInt();
       
       return new CreateConnectionResponse(id, serverID);

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateBrowserRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateBrowserRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateBrowserRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,9 +8,8 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATEBROWSER;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.destination.JBossDestination;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.CreateBrowserRequest;
 
 /**
@@ -37,8 +36,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, CreateBrowserRequest request,
-         IoBuffer out) throws Exception
+   protected void encodeBody(CreateBrowserRequest request, RemotingBuffer out) throws Exception
    {
       byte[] destination = encode(request.getDestination());
       String selector = request.getSelector();
@@ -48,11 +46,11 @@
       out.putInt(bodyLength);
       out.putInt(destination.length);
       out.put(destination);
-      putString(out, selector);
+      out.putNullableString(selector);
    }
 
    @Override
-   protected CreateBrowserRequest decodeBody(IoSession session, IoBuffer in)
+   protected CreateBrowserRequest decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -65,7 +63,7 @@
       byte[] b = new byte[destinationLength];
       in.get(b);
       JBossDestination destination = decode(b);
-      String selector = getString(in);
+      String selector = MinaPacketCodec.getString(in);
 
       return new CreateBrowserRequest(destination, selector);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateBrowserResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateBrowserResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateBrowserResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATEBROWSER;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.CreateBrowserResponse;
 
 /**
@@ -36,19 +35,19 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         CreateBrowserResponse response, IoBuffer out) throws Exception
+   protected void encodeBody(CreateBrowserResponse response,
+         RemotingBuffer out) throws Exception
    {
       String browserID = response.getBrowserID();
 
       int bodyLength = sizeof(browserID);
       
       out.putInt(bodyLength);
-      putString(out, browserID);
+      out.putNullableString(browserID);
    }
 
    @Override
-   protected CreateBrowserResponse decodeBody(IoSession session, IoBuffer in)
+   protected CreateBrowserResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -57,7 +56,7 @@
          return null;
       }
 
-      String browserID = getString(in);
+      String browserID = MinaPacketCodec.getString(in);
 
       return new CreateBrowserResponse(browserID);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,9 +8,8 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONSUMER;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.destination.JBossDestination;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.CreateConsumerRequest;
 
 /**
@@ -37,8 +36,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, CreateConsumerRequest request,
-         IoBuffer out) throws Exception
+   protected void encodeBody(CreateConsumerRequest request, RemotingBuffer out) throws Exception
    {
       byte[] destination = encode(request.getDestination());
       String selector = request.getSelector();
@@ -53,15 +51,15 @@
       out.putInt(bodyLength);
       out.putInt(destination.length);
       out.put(destination);
-      putString(out, selector);
-      putBoolean(out, noLocal);
-      putString(out, subName);
-      putBoolean(out, connectionConsumer);
-      putBoolean(out, autoFlowControl);
+      out.putNullableString(selector);
+      out.putBoolean(noLocal);
+      out.putNullableString(subName);
+      out.putBoolean(connectionConsumer);
+      out.putBoolean(autoFlowControl);
    }
 
    @Override
-   protected CreateConsumerRequest decodeBody(IoSession session, IoBuffer in)
+   protected CreateConsumerRequest decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -74,11 +72,11 @@
       byte[] b = new byte[destinationLength];
       in.get(b);
       JBossDestination destination = decode(b);
-      String selector = getString(in);
-      boolean noLocal = getBoolean(in);
-      String subName = getString(in);
-      boolean connectionConsumer = getBoolean(in);
-      boolean autoflowControl = getBoolean(in);
+      String selector = MinaPacketCodec.getString(in);
+      boolean noLocal = in.getBoolean();
+      String subName = MinaPacketCodec.getString(in);
+      boolean connectionConsumer = in.getBoolean();
+      boolean autoflowControl = in.getBoolean();
 
       return new CreateConsumerRequest(destination, selector, noLocal, subName,
             connectionConsumer, autoflowControl);

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateConsumerResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONSUMER;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.CreateConsumerResponse;
 
 /**
@@ -36,8 +35,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         CreateConsumerResponse response, IoBuffer out) throws Exception
+   protected void encodeBody(CreateConsumerResponse response,
+         RemotingBuffer out) throws Exception
    {
       String consumerID = response.getConsumerID();
       int bufferSize = response.getBufferSize();
@@ -48,14 +47,14 @@
             + LONG_LENGTH;
 
       out.putInt(bodyLength);
-      putString(out, consumerID);
+      out.putNullableString(consumerID);
       out.putInt(bufferSize);
       out.putInt(maxDeliveries);
       out.putLong(redeliveryDelay);
    }
 
    @Override
-   protected CreateConsumerResponse decodeBody(IoSession session, IoBuffer in)
+   protected CreateConsumerResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -64,7 +63,7 @@
          return null;
       }
 
-      String consumerID = getString(in);
+      String consumerID = MinaPacketCodec.getString(in);
       int bufferSize = in.getInt();
       int maxDeliveries = in.getInt();
       long redeliveryDelay = in.getLong();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateDestinationRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateDestinationRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateDestinationRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATEDESTINATION;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.CreateDestinationRequest;
 
 /**
@@ -36,8 +35,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         CreateDestinationRequest request, IoBuffer out) throws Exception
+   protected void encodeBody(CreateDestinationRequest request,
+         RemotingBuffer out) throws Exception
    {
       String name = request.getName();
       boolean isQueue = request.isQueue();
@@ -45,12 +44,12 @@
       int bodyLength = sizeof(name) + 1;
 
       out.putInt(bodyLength);
-      putString(out, name);
-      putBoolean(out, isQueue);
+      out.putNullableString(name);
+      out.putBoolean(isQueue);
    }
 
    @Override
-   protected CreateDestinationRequest decodeBody(IoSession session, IoBuffer in)
+   protected CreateDestinationRequest decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -59,8 +58,8 @@
          return null;
       }
 
-      String name = getString(in);
-      boolean isQueue = getBoolean(in);
+      String name = MinaPacketCodec.getString(in);
+      boolean isQueue = in.getBoolean();
 
       return new CreateDestinationRequest(name, isQueue);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateDestinationResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateDestinationResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateDestinationResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATEDESTINATION;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.destination.JBossDestination;
 import org.jboss.messaging.core.remoting.wireformat.CreateDestinationResponse;
 
@@ -37,8 +35,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, CreateDestinationResponse response,
-         IoBuffer out) throws Exception
+   protected void encodeBody(CreateDestinationResponse response, RemotingBuffer out) throws Exception
    {
       byte[] destination = encode(response.getDestination());
 
@@ -50,7 +47,7 @@
    }
 
    @Override
-   protected CreateDestinationResponse decodeBody(IoSession session, IoBuffer in)
+   protected CreateDestinationResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATESESSION;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.CreateSessionRequest;
 
 /**
@@ -36,8 +34,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, CreateSessionRequest request,
-         IoBuffer out) throws Exception
+   protected void encodeBody(CreateSessionRequest request, RemotingBuffer out) throws Exception
    {
       boolean transacted = request.isTransacted();
       int acknowledgementMode = request.getAcknowledgementMode();
@@ -46,13 +43,13 @@
       int bodyLength = 1 + INT_LENGTH + 1;
 
       out.putInt(bodyLength);
-      putBoolean(out, transacted);
+      out.putBoolean(transacted);
       out.putInt(acknowledgementMode);
-      putBoolean(out, xa);
+      out.putBoolean(xa);
    }
 
    @Override
-   protected CreateSessionRequest decodeBody(IoSession session, IoBuffer in)
+   protected CreateSessionRequest decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -61,9 +58,9 @@
          return null;
       }
 
-      boolean transacted = getBoolean(in);
+      boolean transacted = in.getBoolean();
       int acknowledgementMode = in.getInt();
-      boolean xa = getBoolean(in);
+      boolean xa = in.getBoolean();
 
       return new CreateSessionRequest(transacted, acknowledgementMode, xa);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/CreateSessionResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -6,8 +6,7 @@
  */
 package org.jboss.messaging.core.remoting.codec;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.CreateSessionResponse;
 import org.jboss.messaging.core.remoting.wireformat.PacketType;
 
@@ -35,8 +34,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, CreateSessionResponse response,
-         IoBuffer out) throws Exception
+   protected void encodeBody(CreateSessionResponse response, RemotingBuffer out) throws Exception
    {
       String sessionID = response.getSessionID();
       int dupsOKBatchSize = response.getDupsOKBatchSize();
@@ -45,13 +43,13 @@
       int bodyLength = sizeof(sessionID) + INT_LENGTH + 1;
 
       out.putInt(bodyLength);
-      putString(out, sessionID);
+      out.putNullableString(sessionID);
       out.putInt(dupsOKBatchSize);
-      putBoolean(out, strictTCK);
+      out.putBoolean(strictTCK);
    }
 
    @Override
-   protected CreateSessionResponse decodeBody(IoSession session, IoBuffer in)
+   protected CreateSessionResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -60,9 +58,9 @@
          return null;
       }
 
-      String sessionID = getString(in);
+      String sessionID = MinaPacketCodec.getString(in);
       int dupsOKBatchSize = in.getInt();
-      boolean strictTCK = getBoolean(in);
+      boolean strictTCK = in.getBoolean();
 
       return new CreateSessionResponse(sessionID, dupsOKBatchSize, strictTCK);
    }

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DecoderStatus.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DecoderStatus.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DecoderStatus.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -0,0 +1,20 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.codec;
+
+import org.apache.mina.filter.codec.demux.MessageDecoder;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ * 
+ */
+public enum DecoderStatus
+{
+   OK, NOT_OK, NEED_DATA
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeleteTemporaryDestinationMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeleteTemporaryDestinationMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeleteTemporaryDestinationMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_DELETETEMPORARYDESTINATION;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.destination.JBossDestination;
 import org.jboss.messaging.core.remoting.wireformat.DeleteTemporaryDestinationMessage;
 
@@ -37,8 +35,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, DeleteTemporaryDestinationMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(DeleteTemporaryDestinationMessage message,
+         RemotingBuffer out) throws Exception
    {
       byte[] destination = encode(message.getDestination());
 
@@ -50,7 +48,7 @@
    }
 
    @Override
-   protected DeleteTemporaryDestinationMessage decodeBody(IoSession session, IoBuffer in)
+   protected DeleteTemporaryDestinationMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,9 +8,8 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_DELIVERMESSAGE;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.contract.Message;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
 
 /**
@@ -36,8 +35,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, DeliverMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(DeliverMessage message, RemotingBuffer out) throws Exception
    {
       Message msg = message.getMessage();
       byte[] encodedMsg = encode(message.getMessage());
@@ -52,13 +50,13 @@
       out.put(msg.getType());
       out.putInt(encodedMsg.length);
       out.put(encodedMsg);
-      putString(out, consumerID);
+      out.putNullableString(consumerID);
       out.putLong(deliveryID);
       out.putInt(deliveryCount);
    }
 
    @Override
-   protected DeliverMessage decodeBody(IoSession session, IoBuffer in)
+   protected DeliverMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -72,7 +70,7 @@
       byte[] encodedMsg = new byte[msgLength];
       in.get(encodedMsg);
       Message msg = decode(type, encodedMsg);
-      String consumerID = getString(in);
+      String consumerID = MinaPacketCodec.getString(in);
       long deliveryID = in.getLong();
       int deliveryCount = in.getInt();
 

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetClientAOPStackResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetClientAOPStackResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetClientAOPStackResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_GETCLIENTAOPSTACK;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.GetClientAOPStackResponse;
 
 /**
@@ -36,8 +34,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         GetClientAOPStackResponse response, IoBuffer out) throws Exception
+   protected void encodeBody(GetClientAOPStackResponse response,
+         RemotingBuffer out) throws Exception
    {
 
       byte[] stack = response.getStack();
@@ -50,8 +48,7 @@
    }
 
    @Override
-   protected GetClientAOPStackResponse decodeBody(IoSession session,
-         IoBuffer in) throws Exception
+   protected GetClientAOPStackResponse decodeBody(RemotingBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
       if (in.remaining() < bodyLength)

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetClientIDResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetClientIDResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetClientIDResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_GETCLIENTID;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.GetClientIDResponse;
 
 /**
@@ -38,17 +37,16 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, GetClientIDResponse response,
-         IoBuffer out) throws Exception
+   protected void encodeBody(GetClientIDResponse response, RemotingBuffer out) throws Exception
    {
       String clientID = response.getClientID();
 
       out.putInt(sizeof(clientID));
-      putString(out, clientID);
+      out.putNullableString(clientID);
    }
 
    @Override
-   protected GetClientIDResponse decodeBody(IoSession session, IoBuffer in)
+   protected GetClientIDResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -57,7 +55,7 @@
          return null;
       }
 
-      String clientID = getString(in);
+      String clientID = MinaPacketCodec.getString(in);
 
       return new GetClientIDResponse(clientID);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetPreparedTransactionsResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetPreparedTransactionsResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetPreparedTransactionsResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -13,8 +13,6 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.tx.MessagingXid;
 import org.jboss.messaging.core.remoting.wireformat.GetPreparedTransactionsResponse;
 
@@ -42,8 +40,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         GetPreparedTransactionsResponse response, IoBuffer out) throws Exception
+   protected void encodeBody(GetPreparedTransactionsResponse response,
+         RemotingBuffer out) throws Exception
    {
 
       MessagingXid[] xids = response.getXids();
@@ -59,8 +57,7 @@
    }
 
    @Override
-   protected GetPreparedTransactionsResponse decodeBody(IoSession session,
-         IoBuffer in) throws Exception
+   protected GetPreparedTransactionsResponse decodeBody(RemotingBuffer in) throws Exception
    {
       int bodyLength = in.getInt();
       if (in.remaining() < bodyLength)

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetTopologyResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetTopologyResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/GetTopologyResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -13,8 +13,6 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.delegate.TopologyResult;
 import org.jboss.messaging.core.remoting.wireformat.GetTopologyResponse;
 
@@ -42,8 +40,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, GetTopologyResponse response,
-         IoBuffer out) throws Exception
+   protected void encodeBody(GetTopologyResponse response, RemotingBuffer out) throws Exception
    {
       byte[] encodedTopology = encode(response.getTopology());
 
@@ -55,7 +52,7 @@
    }
 
    @Override
-   protected GetTopologyResponse decodeBody(IoSession session, IoBuffer in)
+   protected GetTopologyResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockRequestCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockRequestCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_IDBLOCK;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.IDBlockRequest;
 
 /**
@@ -35,15 +33,14 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, IDBlockRequest request,
-         IoBuffer out) throws Exception
+   protected void encodeBody(IDBlockRequest request, RemotingBuffer out) throws Exception
    {
       out.putInt(INT_LENGTH);
       out.putInt(request.getSize());
    }
 
    @Override
-   protected IDBlockRequest decodeBody(IoSession session, IoBuffer in)
+   protected IDBlockRequest decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockResponseCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockResponseCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/IDBlockResponseCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_IDBLOCK;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.IDBlockResponse;
 
 /**
@@ -35,8 +33,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, IDBlockResponse response,
-         IoBuffer out) throws Exception
+   protected void encodeBody(IDBlockResponse response, RemotingBuffer out) throws Exception
    {
       out.putInt(LONG_LENGTH * 2);
       out.putLong(response.getLow());
@@ -44,7 +41,7 @@
    }
 
    @Override
-   protected IDBlockResponse decodeBody(IoSession session, IoBuffer in)
+   protected IDBlockResponse decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/JMSExceptionMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/JMSExceptionMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/JMSExceptionMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -13,8 +13,6 @@
 
 import javax.jms.JMSException;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.remoting.wireformat.JMSExceptionMessage;
 import org.jboss.messaging.core.remoting.wireformat.PacketType;
 
@@ -46,8 +44,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, JMSExceptionMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(JMSExceptionMessage message, RemotingBuffer out) throws Exception
    {
       JMSException exception = message.getException();
      
@@ -65,7 +62,7 @@
    }
 
    @Override
-   protected JMSExceptionMessage decodeBody(IoSession session, IoBuffer in)
+   protected JMSExceptionMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -6,26 +6,14 @@
  */
 package org.jboss.messaging.core.remoting.codec;
 
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_BROWSER_RESET;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CLOSE;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_STARTCONNECTION;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_STOPCONNECTION;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.NULL;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_BROWSER_HASNEXTMESSAGE;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_BROWSER_NEXTMESSAGE;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_GETCLIENTAOPSTACK;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_GETCLIENTID;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_GETPREPAREDTRANSACTIONS;
-import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_GETTOPOLOGY;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.apache.mina.filter.codec.demux.DemuxingProtocolCodecFactory;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
 import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveriesMessage;
 import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryRequest;
 import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryResponse;
-import org.jboss.messaging.core.remoting.wireformat.UpdateCallbackMessage;
 import org.jboss.messaging.core.remoting.wireformat.AddTemporaryDestinationMessage;
 import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageRequest;
 import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageResponse;
@@ -73,6 +61,7 @@
 import org.jboss.messaging.core.remoting.wireformat.StopConnectionMessage;
 import org.jboss.messaging.core.remoting.wireformat.TextPacket;
 import org.jboss.messaging.core.remoting.wireformat.UnsubscribeMessage;
+import org.jboss.messaging.core.remoting.wireformat.UpdateCallbackMessage;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
@@ -88,7 +77,7 @@
    // Constructors --------------------------------------------------
 
    // FIXME: split encoder/decoder required only on client and/or server sides
-   public PacketCodecFactory()
+   public PacketCodecFactory() throws Exception
    {
       addCodecForEmptyPacket(NULL, NullPacket.class);
 
@@ -103,13 +92,15 @@
       addCodec(CreateConnectionResponse.class,
             ConnectionFactoryCreateConnectionResponseCodec.class);
 
-      addCodecForEmptyPacket(REQ_GETCLIENTAOPSTACK, GetClientAOPStackRequest.class);
-      
+      addCodecForEmptyPacket(PacketType.REQ_GETCLIENTAOPSTACK,
+            GetClientAOPStackRequest.class);
+
       addCodec(GetClientAOPStackResponse.class,
             GetClientAOPStackResponseCodec.class);
-      
-      addCodecForEmptyPacket(REQ_GETTOPOLOGY, GetTopologyRequest.class);
 
+      addCodecForEmptyPacket(PacketType.REQ_GETTOPOLOGY,
+            GetTopologyRequest.class);
+
       addCodec(GetTopologyResponse.class, GetTopologyResponseCodec.class);
 
       addCodec(UpdateCallbackMessage.class, AddCallbackMessageCodec.class);
@@ -122,7 +113,8 @@
 
       addCodec(IDBlockResponse.class, IDBlockResponseCodec.class);
 
-      addCodecForEmptyPacket(REQ_GETCLIENTID, GetClientIDRequest.class);
+      addCodecForEmptyPacket(PacketType.REQ_GETCLIENTID,
+            GetClientIDRequest.class);
 
       addCodec(GetClientIDResponse.class, GetClientIDResponseCodec.class);
 
@@ -144,9 +136,11 @@
 
       addCodec(CreateBrowserResponse.class, CreateBrowserResponseCodec.class);
 
-      addCodecForEmptyPacket(MSG_STARTCONNECTION, StartConnectionMessage.class);
+      addCodecForEmptyPacket(PacketType.MSG_STARTCONNECTION,
+            StartConnectionMessage.class);
 
-      addCodecForEmptyPacket(MSG_STOPCONNECTION, StopConnectionMessage.class);
+      addCodecForEmptyPacket(PacketType.MSG_STOPCONNECTION,
+            StopConnectionMessage.class);
 
       addCodec(ChangeRateMessage.class, ChangeRateMessageCodec.class);
 
@@ -173,25 +167,26 @@
 
       addCodec(ClosingResponse.class, ClosingResponseCodec.class);
 
-      addCodecForEmptyPacket(MSG_CLOSE, CloseMessage.class);
+      addCodecForEmptyPacket(PacketType.MSG_CLOSE, CloseMessage.class);
 
       addCodec(SendTransactionMessage.class, SendTransactionMessageCodec.class);
 
-      addCodecForEmptyPacket(REQ_GETPREPAREDTRANSACTIONS,
+      addCodecForEmptyPacket(PacketType.REQ_GETPREPAREDTRANSACTIONS,
             GetPreparedTransactionsRequest.class);
 
       addCodec(GetPreparedTransactionsResponse.class,
             GetPreparedTransactionsResponseCodec.class);
 
-      addCodecForEmptyPacket(MSG_BROWSER_RESET, BrowserResetMessage.class);
+      addCodecForEmptyPacket(PacketType.MSG_BROWSER_RESET,
+            BrowserResetMessage.class);
 
-      addCodecForEmptyPacket(REQ_BROWSER_HASNEXTMESSAGE,
+      addCodecForEmptyPacket(PacketType.REQ_BROWSER_HASNEXTMESSAGE,
             BrowserHasNextMessageRequest.class);
 
       addCodec(BrowserHasNextMessageResponse.class,
             BrowserHasNextMessageResponseCodec.class);
 
-      addCodecForEmptyPacket(REQ_BROWSER_NEXTMESSAGE,
+      addCodecForEmptyPacket(PacketType.REQ_BROWSER_NEXTMESSAGE,
             BrowserNextMessageRequest.class);
 
       addCodec(BrowserNextMessageResponse.class,
@@ -220,24 +215,30 @@
 
    // Private -------------------------------------------------------
 
+   // FIXME generics definition should be in term of <P>...
    private void addCodec(
          Class<? extends AbstractPacket> packetClass,
-         Class<? extends AbstractPacketCodec<? extends AbstractPacket>> codecClass)
+         Class<? extends AbstractPacketCodec<? extends AbstractPacket>> codecClass) throws Exception
    {
-      super.addMessageDecoder(codecClass);
-      super.addMessageEncoder(packetClass, codecClass);
+      AbstractPacketCodec<? extends AbstractPacket> codec = codecClass
+            .newInstance();
+      MinaPacketCodec<AbstractPacket> minaCodec = new MinaPacketCodec(codec);
+      super.addMessageDecoder(minaCodec);
+      super.addMessageEncoder(packetClass, minaCodec);
    }
 
    private void addCodecForEmptyPacket(PacketType type,
-         Class<? extends AbstractPacket> clazz)
+         Class<? extends AbstractPacket> packetClass)
    {
       AbstractPacketCodec<AbstractPacket> codec = createCodecForEmptyPacket(
-            type, clazz);
-      super.addMessageDecoder(codec);
-      super.addMessageEncoder(clazz, codec);
+            type, packetClass);
+      MinaPacketCodec<AbstractPacket> minaCodec = new MinaPacketCodec<AbstractPacket>(
+            codec);
+      super.addMessageDecoder(minaCodec);
+      super.addMessageEncoder(packetClass, minaCodec);
    }
 
-   private AbstractPacketCodec<AbstractPacket> createCodecForEmptyPacket(
+   public static AbstractPacketCodec<AbstractPacket> createCodecForEmptyPacket(
          PacketType type, final Class<? extends AbstractPacket> clazz)
    {
       return new CodecForEmptyPacket<AbstractPacket>(type)
@@ -258,7 +259,7 @@
 
    // Inner classes -------------------------------------------------
 
-   abstract class CodecForEmptyPacket<P extends AbstractPacket> extends
+   abstract static class CodecForEmptyPacket<P extends AbstractPacket> extends
          AbstractPacketCodec<P>
    {
 
@@ -268,21 +269,19 @@
       }
 
       @Override
-      protected void encodeBody(IoSession session, P packet, IoBuffer out)
-            throws Exception
+      protected void encodeBody(P packet, RemotingBuffer out) throws Exception
       {
          // no body
          out.putInt(0);
       }
 
       @Override
-      protected P decodeBody(IoSession session, IoBuffer in) throws Exception
+      protected P decodeBody(RemotingBuffer in) throws Exception
       {
          in.getInt(); // skip body length
          return newPacket();
       }
 
       protected abstract P newPacket();
-
    }
 }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/RecoverDeliveriesMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/RecoverDeliveriesMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/RecoverDeliveriesMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -13,9 +13,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.delegate.DeliveryRecovery;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.PacketType;
 import org.jboss.messaging.core.remoting.wireformat.RecoverDeliveriesMessage;
 
@@ -46,8 +45,8 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session,
-         RecoverDeliveriesMessage message, IoBuffer out) throws Exception
+   protected void encodeBody(RecoverDeliveriesMessage message,
+         RemotingBuffer out) throws Exception
    {
       List<DeliveryRecovery> deliveries = message.getDeliveries();
       String sessionID = message.getSessionID();
@@ -60,11 +59,11 @@
       out.putInt(deliveries.size());
       out.putInt(encodedDeliveries.length);
       out.put(encodedDeliveries);
-      putString(out, sessionID);
+      out.putNullableString(sessionID);
    }
 
    @Override
-   protected RecoverDeliveriesMessage decodeBody(IoSession session, IoBuffer in)
+   protected RecoverDeliveriesMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -79,7 +78,7 @@
       in.get(encodedDeliveries);
       List<DeliveryRecovery> deliveries = decode(deliveriesSize,
             encodedDeliveries);
-      String sessionID = getString(in);
+      String sessionID = MinaPacketCodec.getString(in);
 
       return new RecoverDeliveriesMessage(deliveries, sessionID);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,6 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDMESSAGE;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.messaging.core.remoting.wireformat.SendMessage;
 
@@ -36,8 +34,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, SendMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(SendMessage message, RemotingBuffer out) throws Exception
    {
       byte[] encodedMsg = encode(message.getMessage());
       boolean checkForDuplicates = message.checkForDuplicates();
@@ -49,12 +46,12 @@
       out.put(message.getMessage().getType());
       out.putInt(encodedMsg.length);
       out.put(encodedMsg);
-      putBoolean(out, checkForDuplicates);
+      out.putBoolean(checkForDuplicates);
       out.putLong(sequence);
    }
 
    @Override
-   protected SendMessage decodeBody(IoSession session, IoBuffer in)
+   protected SendMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -68,7 +65,7 @@
       byte[] encodedMsg = new byte[msgLength];
       in.get(encodedMsg);
       JBossMessage msg = (JBossMessage) decode(msgType, encodedMsg);
-      boolean checkForDuplicates = getBoolean(in);
+      boolean checkForDuplicates = in.getBoolean();
       long sequence = in.getLong();
 
       return new SendMessage(msg, checkForDuplicates, sequence);

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendTransactionMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendTransactionMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendTransactionMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -13,8 +13,6 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
 import org.jboss.jms.tx.TransactionRequest;
 import org.jboss.messaging.core.remoting.wireformat.SendTransactionMessage;
 
@@ -41,8 +39,7 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, SendTransactionMessage request,
-         IoBuffer out) throws Exception
+   protected void encodeBody(SendTransactionMessage request, RemotingBuffer out) throws Exception
    {
       byte[] encodedTxReq = encodeTransactionRequest(request.getTransactionRequest());
       boolean checkForDuplicates = request.checkForDuplicates();
@@ -52,11 +49,11 @@
       out.putInt(bodyLength);
       out.putInt(encodedTxReq.length);
       out.put(encodedTxReq);
-      putBoolean(out, checkForDuplicates);
+      out.putBoolean(checkForDuplicates);
    }
 
    @Override
-   protected SendTransactionMessage decodeBody(IoSession session, IoBuffer in)
+   protected SendTransactionMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -69,7 +66,7 @@
       byte[] encodedTxReq = new byte[txReqLength];
       in.get(encodedTxReq);
       TransactionRequest tr = decodeTransactionRequest(encodedTxReq);
-      boolean checkForDuplicates = getBoolean(in);
+      boolean checkForDuplicates = in.getBoolean();
 
       return new SendTransactionMessage(tr, checkForDuplicates);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SetClientIDMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SetClientIDMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SetClientIDMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SETCLIENTID;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.SetClientIDMessage;
 
 /**
@@ -38,17 +37,16 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, SetClientIDMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(SetClientIDMessage message, RemotingBuffer out) throws Exception
    {
       String clientID = message.getClientID();
 
       out.putInt(sizeof(clientID));
-      putString(out, clientID);
+      out.putNullableString(clientID);
    }
 
    @Override
-   protected SetClientIDMessage decodeBody(IoSession session, IoBuffer in)
+   protected SetClientIDMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -57,7 +55,7 @@
          return null;
       }
 
-      String clientID = getString(in);
+      String clientID = MinaPacketCodec.getString(in);
 
       return new SetClientIDMessage(clientID);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/TextPacketCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/TextPacketCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/TextPacketCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.TEXT;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.TextPacket;
 
 /**
@@ -36,17 +35,17 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, TextPacket packet, IoBuffer out)
+   protected void encodeBody(TextPacket packet, RemotingBuffer out)
          throws Exception
    {
       String text = packet.getText();
 
       out.putInt(sizeof(text));
-      putString(out, text);
+      out.putNullableString(text);
    }
 
    @Override
-   protected TextPacket decodeBody(IoSession session, IoBuffer in)
+   protected TextPacket decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -54,7 +53,7 @@
       {
          return null;
       }
-      String text = getString(in);
+      String text = MinaPacketCodec.getString(in);
 
       return new TextPacket(text);
    }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/UnsubscribeMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/UnsubscribeMessageCodec.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/UnsubscribeMessageCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -8,8 +8,7 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_UNSUBSCRIBE;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.common.IoSession;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
 import org.jboss.messaging.core.remoting.wireformat.UnsubscribeMessage;
 
 /**
@@ -36,17 +35,16 @@
    // AbstractPacketCodec overrides ---------------------------------
 
    @Override
-   protected void encodeBody(IoSession session, UnsubscribeMessage message,
-         IoBuffer out) throws Exception
+   protected void encodeBody(UnsubscribeMessage message, RemotingBuffer out) throws Exception
    {
       String subscriptionName = message.getSubscriptionName();
 
       out.putInt(sizeof(subscriptionName));
-      putString(out, subscriptionName);
+      out.putNullableString(subscriptionName);
    }
 
    @Override
-   protected UnsubscribeMessage decodeBody(IoSession session, IoBuffer in)
+   protected UnsubscribeMessage decodeBody(RemotingBuffer in)
          throws Exception
    {
       int bodyLength = in.getInt();
@@ -55,7 +53,7 @@
          return null;
       }
 
-      String subscriptionName = getString(in);
+      String subscriptionName = MinaPacketCodec.getString(in);
 
       return new UnsubscribeMessage(subscriptionName);
    }

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/MinaPacketCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/MinaPacketCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/internal/MinaPacketCodec.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -0,0 +1,270 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.internal;
+
+import static org.jboss.messaging.core.remoting.codec.AbstractPacketCodec.UTF_8_DECODER;
+import static org.jboss.messaging.core.remoting.codec.AbstractPacketCodec.UTF_8_ENCODER;
+
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
+
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+import org.apache.mina.filter.codec.demux.MessageDecoder;
+import org.apache.mina.filter.codec.demux.MessageDecoderResult;
+import org.apache.mina.filter.codec.demux.MessageEncoder;
+import org.jboss.messaging.core.remoting.codec.AbstractPacketCodec;
+import org.jboss.messaging.core.remoting.codec.DecoderStatus;
+import org.jboss.messaging.core.remoting.codec.RemotingBuffer;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ * 
+ */
+public class MinaPacketCodec<P extends AbstractPacket> implements
+      MessageEncoder<P>, MessageDecoder
+{
+   // Constants -----------------------------------------------------
+
+   private static final byte TRUE = (byte) 0;
+
+   private static final byte FALSE = (byte) 1;
+
+   // used to terminate encoded Strings
+   public static final byte NULL_BYTE = (byte) 0;
+
+   public static final byte NULL_STRING = (byte) 0;
+
+   public static final byte NOT_NULL_STRING = (byte) 1;
+
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   private final AbstractPacketCodec<P> codec;
+
+   public MinaPacketCodec(Class<? extends AbstractPacketCodec<P>> codecClass)
+         throws Throwable
+   {
+      this.codec = (AbstractPacketCodec<P>) codecClass.newInstance();
+   }
+
+   public MinaPacketCodec(AbstractPacketCodec<P> codec)
+   {
+      this.codec = codec;
+   }
+
+   // Public --------------------------------------------------------
+
+   // MessageEncoder implementation ---------------------------------
+
+   public void encode(IoSession session, P packet, ProtocolEncoderOutput out)
+         throws Exception
+   {
+      final IoBuffer buffer = IoBuffer.allocate(256);
+      // Enable auto-expand for easier encoding
+      buffer.setAutoExpand(true);
+
+      RemotingBuffer wrapper = new BufferWrapper(buffer);
+
+      codec.encode(packet, wrapper);
+
+      buffer.flip();
+      out.write(buffer);
+   }
+
+   // MessageDecoder implementation ---------------------------------
+
+   public MessageDecoderResult decodable(IoSession session, IoBuffer in)
+   {
+      RemotingBuffer wrapper = new BufferWrapper(in);
+
+      DecoderStatus status = codec.decodable(wrapper);
+      return convertToMina(status);
+   }
+
+   public MessageDecoderResult decode(IoSession session, IoBuffer in,
+         ProtocolDecoderOutput out) throws Exception
+   {
+      RemotingBuffer wrapper = new BufferWrapper(in);
+
+      P packet = codec.decode(wrapper);
+
+      if (packet == null)
+      {
+         return MessageDecoder.NEED_DATA;
+      }
+
+      out.write(packet);
+
+      return MessageDecoder.OK;
+   }
+
+   private MessageDecoderResult convertToMina(DecoderStatus status)
+   {
+      if (status == DecoderStatus.OK)
+      {
+         return MessageDecoderResult.OK;
+      }
+      if (status == DecoderStatus.NEED_DATA)
+      {
+         return MessageDecoderResult.NEED_DATA;
+      }
+      return MessageDecoderResult.NOT_OK;
+   }
+
+   public void finishDecode(IoSession session, ProtocolDecoderOutput out)
+         throws Exception
+   {
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+   public static String getString(RemotingBuffer in) throws CharacterCodingException
+   {
+      return in.getNullableString();
+   }
+
+   public static final class BufferWrapper implements RemotingBuffer
+   {
+      private final IoBuffer buffer;
+
+      public BufferWrapper(IoBuffer buffer)
+      {
+         assert buffer != null;
+
+         this.buffer = buffer;
+      }
+
+      public int remaining()
+      {
+         return buffer.remaining();
+      }
+
+      public void put(byte byteValue)
+      {
+         buffer.put(byteValue);
+      }
+
+      public void put(byte[] byteArray)
+      {
+         buffer.put(byteArray);
+      }
+
+      public void putInt(int intValue)
+      {
+         buffer.putInt(intValue);
+      }
+
+      public void putLong(long longValue)
+      {
+         buffer.putLong(longValue);
+      }
+
+      public void putFloat(float floatValue)
+      {
+         buffer.putFloat(floatValue);
+      }
+
+      public void putString(String string, CharsetEncoder encoder)
+            throws CharacterCodingException
+      {
+         buffer.putString(string, encoder);
+      }
+      
+      public byte get()
+      {
+         return buffer.get();
+      }
+
+      public void get(byte[] b)
+      {
+         buffer.get(b);
+      }
+
+      public int getInt()
+      {
+         return buffer.getInt();
+      }
+
+      public long getLong()
+      {
+         return buffer.getLong();
+      }
+
+      public float getFloat()
+      {
+         return buffer.getFloat();
+      }
+
+      public String getString(CharsetDecoder decoder)
+            throws CharacterCodingException
+      {
+         return buffer.getString(decoder);
+      }
+
+      public void putBoolean(boolean b)
+      {
+         if (b)
+         {
+            buffer.put(TRUE);
+         } else
+         {
+            buffer.put(FALSE);
+         }
+      }
+
+      public boolean getBoolean()
+      {
+         byte b = buffer.get();
+         return (b == TRUE);
+      }
+      
+      public void putNullableString(String nullableString) throws CharacterCodingException
+      {
+         
+         if (nullableString == null)
+         {
+            buffer.put(NULL_STRING);
+         } else
+         {
+            buffer.put(NOT_NULL_STRING);
+            buffer.putString(nullableString, UTF_8_ENCODER);
+            buffer.put(NULL_BYTE);
+         }
+      }
+
+      public String getNullableString() throws CharacterCodingException
+      {
+         byte check = buffer.get();
+         if (check == NULL_STRING)
+         {
+            return null;
+         } else
+         {
+            assert check == NOT_NULL_STRING;
+      
+            return buffer.getString(UTF_8_DECODER);
+         }
+      }
+   }
+}

Added: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/internal/MinaRemotingBuffer.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/internal/MinaRemotingBuffer.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/internal/MinaRemotingBuffer.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -0,0 +1,121 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.test.messaging.core.remoting.internal;
+
+import static java.util.UUID.randomUUID;
+import junit.framework.TestCase;
+
+import org.apache.mina.common.IoBuffer;
+import org.jboss.messaging.core.remoting.codec.AbstractPacketCodec;
+import org.jboss.messaging.core.remoting.codec.RemotingBuffer;
+import org.jboss.messaging.core.remoting.internal.MinaPacketCodec;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class MinaRemotingBuffer extends TestCase
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   private RemotingBuffer wrapper;
+   private IoBuffer buffer;
+
+   @Override
+   protected void setUp() throws Exception
+   {
+      buffer = IoBuffer.allocate(256);
+      buffer.setAutoExpand(true);
+      wrapper = new MinaPacketCodec.BufferWrapper(buffer);
+   }
+
+   @Override
+   protected void tearDown() throws Exception
+   {
+      wrapper = null;
+      buffer = null;
+
+   }
+
+   public void testNullStringNotAllowedByPutString() throws Exception
+   {
+      try
+      {
+         wrapper.putString(null, AbstractPacketCodec.UTF_8_ENCODER);
+         fail("putString(String, CharsetEncoder) does not allow null String");
+      } catch (Exception e)
+      {
+
+      }
+   }
+
+   public void testNullString() throws Exception
+   {
+      assertNull(putAndGetNullableString(null));
+   }
+
+   public void testEmptyString() throws Exception
+   {
+      String result = putAndGetNullableString("");
+
+      assertNotNull(result);
+      assertEquals("", result);
+   }
+
+   public void testNonEmptyString() throws Exception
+   {
+      String junk = randomUUID().toString();
+
+      String result = putAndGetNullableString(junk);
+
+      assertNotNull(result);
+      assertEquals(junk, result);
+   }
+
+   public void testPutTrueBoolean() throws Exception
+   {
+      wrapper.putBoolean(true);
+      
+      buffer.flip();
+      
+      assertTrue(wrapper.getBoolean());
+   }
+
+   public void testPutFalseBoolean() throws Exception
+   {
+      wrapper.putBoolean(false);
+      
+      buffer.flip();
+      
+      assertFalse(wrapper.getBoolean());
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   private String putAndGetNullableString(String nullableString) throws Exception
+   {
+      wrapper.putNullableString(nullableString);
+
+      buffer.flip();
+      
+      return wrapper.getNullableString();
+   }
+   // Inner classes -------------------------------------------------
+}

Deleted: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/AbstractPacketCodecTest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/AbstractPacketCodecTest.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/AbstractPacketCodecTest.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -1,93 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.test.messaging.core.remoting.wireformat;
-
-import static java.util.UUID.randomUUID;
-
-import java.nio.charset.CharacterCodingException;
-
-import junit.framework.TestCase;
-
-import org.apache.mina.common.IoBuffer;
-import org.jboss.messaging.core.remoting.codec.AbstractPacketCodec;
-
-/**
- * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
- * 
- * @version <tt>$Revision$</tt>
- */
-public class AbstractPacketCodecTest extends TestCase
-{
-   // Constants -----------------------------------------------------
-
-   // Attributes ----------------------------------------------------
-
-   // Static --------------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   // Public --------------------------------------------------------
-
-   public void testNullString() throws Exception
-   {
-      String result = putAndGet(null);
-
-      assertNull(result);
-   }
-
-   public void testEmptyString() throws Exception
-   {
-      String result = putAndGet("");
-
-      assertNotNull(result);
-      assertEquals("", result);
-   }
-
-   public void testNonEmptyString() throws Exception
-   {
-      String junk = randomUUID().toString();
-
-      String result = putAndGet(junk);
-
-      assertNotNull(result);
-      assertEquals(junk, result);
-   }
-
-   public void testTrueBoolean() throws Exception
-   {
-      assertTrue(putAndGet(true));
-   }
-
-   public void testFalseBoolean() throws Exception
-   {
-      assertFalse(putAndGet(false));
-   }
-
-   // Package protected ---------------------------------------------
-
-   // Protected -----------------------------------------------------
-
-   // Private -------------------------------------------------------
-
-   private static String putAndGet(String s) throws CharacterCodingException
-   {
-      IoBuffer buffer = IoBuffer.allocate(256);
-      AbstractPacketCodec.putString(buffer, s);
-      buffer.flip();
-      return AbstractPacketCodec.getString(buffer);
-   }
-
-   private static boolean putAndGet(boolean b) throws CharacterCodingException
-   {
-      IoBuffer buffer = IoBuffer.allocate(256);
-      AbstractPacketCodec.putBoolean(buffer, b);
-      buffer.flip();
-      return AbstractPacketCodec.getBoolean(buffer);
-   }
-
-   // Inner classes -------------------------------------------------
-}

Modified: branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java	2007-11-29 13:27:33 UTC (rev 3385)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java	2007-11-30 17:20:15 UTC (rev 3386)
@@ -57,6 +57,14 @@
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_IDBLOCK;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.TEXT;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -68,10 +76,6 @@
 
 import junit.framework.TestCase;
 
-import org.apache.mina.common.IoBuffer;
-import org.apache.mina.filter.codec.ProtocolCodecSession;
-import org.apache.mina.filter.codec.ProtocolDecoder;
-import org.apache.mina.filter.codec.ProtocolEncoder;
 import org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate;
 import org.jboss.jms.delegate.Ack;
 import org.jboss.jms.delegate.Cancel;
@@ -87,7 +91,48 @@
 import org.jboss.jms.tx.MessagingXid;
 import org.jboss.jms.tx.TransactionRequest;
 import org.jboss.messaging.core.contract.Message;
+import org.jboss.messaging.core.remoting.codec.AbstractPacketCodec;
+import org.jboss.messaging.core.remoting.codec.AcknowledgeDeliveriesRequestCodec;
+import org.jboss.messaging.core.remoting.codec.AcknowledgeDeliveryRequestCodec;
+import org.jboss.messaging.core.remoting.codec.AcknowledgeDeliveryResponseCodec;
+import org.jboss.messaging.core.remoting.codec.AddCallbackMessageCodec;
+import org.jboss.messaging.core.remoting.codec.AddTemporaryDestinationMessageCodec;
+import org.jboss.messaging.core.remoting.codec.BrowserHasNextMessageResponseCodec;
+import org.jboss.messaging.core.remoting.codec.BrowserNextMessageBlockRequestCodec;
+import org.jboss.messaging.core.remoting.codec.BrowserNextMessageBlockResponseCodec;
+import org.jboss.messaging.core.remoting.codec.BrowserNextMessageResponseCodec;
+import org.jboss.messaging.core.remoting.codec.CancelDeliveriesMessageCodec;
+import org.jboss.messaging.core.remoting.codec.CancelDeliveryMessageCodec;
+import org.jboss.messaging.core.remoting.codec.ChangeRateMessageCodec;
+import org.jboss.messaging.core.remoting.codec.ClosingRequestCodec;
+import org.jboss.messaging.core.remoting.codec.ClosingResponseCodec;
+import org.jboss.messaging.core.remoting.codec.ConnectionFactoryCreateConnectionRequestCodec;
+import org.jboss.messaging.core.remoting.codec.ConnectionFactoryCreateConnectionResponseCodec;
+import org.jboss.messaging.core.remoting.codec.CreateBrowserRequestCodec;
+import org.jboss.messaging.core.remoting.codec.CreateBrowserResponseCodec;
+import org.jboss.messaging.core.remoting.codec.CreateConsumerRequestCodec;
+import org.jboss.messaging.core.remoting.codec.CreateConsumerResponseCodec;
+import org.jboss.messaging.core.remoting.codec.CreateDestinationRequestCodec;
+import org.jboss.messaging.core.remoting.codec.CreateDestinationResponseCodec;
+import org.jboss.messaging.core.remoting.codec.CreateSessionRequestCodec;
+import org.jboss.messaging.core.remoting.codec.CreateSessionResponseCodec;
+import org.jboss.messaging.core.remoting.codec.DeleteTemporaryDestinationMessageCodec;
+import org.jboss.messaging.core.remoting.codec.DeliverMessageCodec;
+import org.jboss.messaging.core.remoting.codec.GetClientAOPStackResponseCodec;
+import org.jboss.messaging.core.remoting.codec.GetClientIDResponseCodec;
+import org.jboss.messaging.core.remoting.codec.GetPreparedTransactionsResponseCodec;
+import org.jboss.messaging.core.remoting.codec.GetTopologyResponseCodec;
+import org.jboss.messaging.core.remoting.codec.IDBlockRequestCodec;
+import org.jboss.messaging.core.remoting.codec.IDBlockResponseCodec;
+import org.jboss.messaging.core.remoting.codec.JMSExceptionMessageCodec;
 import org.jboss.messaging.core.remoting.codec.PacketCodecFactory;
+import org.jboss.messaging.core.remoting.codec.RecoverDeliveriesMessageCodec;
+import org.jboss.messaging.core.remoting.codec.RemotingBuffer;
+import org.jboss.messaging.core.remoting.codec.SendMessageCodec;
+import org.jboss.messaging.core.remoting.codec.SendTransactionMessageCodec;
+import org.jboss.messaging.core.remoting.codec.SetClientIDMessageCodec;
+import org.jboss.messaging.core.remoting.codec.TextPacketCodec;
+import org.jboss.messaging.core.remoting.codec.UnsubscribeMessageCodec;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
 import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveriesMessage;
 import org.jboss.messaging.core.remoting.wireformat.AcknowledgeDeliveryRequest;
@@ -286,7 +331,9 @@
       packet.setCorrelationID(randomLong());
       packet.setTargetID(randomString());
 
-      AbstractPacket decodedPacket = encodeAndDecode(packet);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            NULL, NullPacket.class);
+      AbstractPacket decodedPacket = encodeAndDecode(packet, codec);
 
       assertTrue(decodedPacket instanceof NullPacket);
       NullPacket p = (NullPacket) decodedPacket;
@@ -305,7 +352,8 @@
       JMSExceptionMessage message = new JMSExceptionMessage(e);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new JMSExceptionMessageCodec());
 
       assertTrue(decodedPacket instanceof JMSExceptionMessage);
       JMSExceptionMessage decodedMessage = (JMSExceptionMessage) decodedPacket;
@@ -320,7 +368,8 @@
       TextPacket packet = new TextPacket("testTextPacket");
       addVersion(packet);
 
-      AbstractPacket decodedPacket = encodeAndDecode(packet);
+      AbstractPacket decodedPacket = encodeAndDecode(packet,
+            new TextPacketCodec());
 
       assertTrue(decodedPacket instanceof TextPacket);
       TextPacket p = (TextPacket) decodedPacket;
@@ -342,7 +391,8 @@
             remotingSessionID, clientVMID, failedNodeID, username, password);
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new ConnectionFactoryCreateConnectionRequestCodec());
 
       assertTrue(decodedPacket instanceof CreateConnectionRequest);
       CreateConnectionRequest decodedRequest = (CreateConnectionRequest) decodedPacket;
@@ -363,7 +413,8 @@
             randomString(), 1234);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new ConnectionFactoryCreateConnectionResponseCodec());
 
       assertTrue(decodedPacket instanceof CreateConnectionResponse);
 
@@ -379,7 +430,9 @@
       GetClientAOPStackRequest request = new GetClientAOPStackRequest();
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            REQ_GETCLIENTAOPSTACK, GetClientAOPStackRequest.class);
+      AbstractPacket decodedPacket = encodeAndDecode(request, codec);
 
       assertTrue(decodedPacket instanceof GetClientAOPStackRequest);
       assertEquals(REQ_GETCLIENTAOPSTACK, decodedPacket.getType());
@@ -392,7 +445,8 @@
       GetClientAOPStackResponse response = new GetClientAOPStackResponse(stack);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new GetClientAOPStackResponseCodec());
 
       assertTrue(decodedPacket instanceof GetClientAOPStackResponse);
       GetClientAOPStackResponse decodedResponse = (GetClientAOPStackResponse) decodedPacket;
@@ -405,8 +459,11 @@
       GetTopologyRequest request = new GetTopologyRequest();
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            REQ_GETTOPOLOGY, GetTopologyRequest.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(request, codec);
+
       assertTrue(decodedPacket instanceof GetTopologyRequest);
       assertEquals(REQ_GETTOPOLOGY, decodedPacket.getType());
    }
@@ -425,7 +482,8 @@
       GetTopologyResponse response = new GetTopologyResponse(topology);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new GetTopologyResponseCodec());
 
       assertTrue(decodedPacket instanceof GetTopologyResponse);
       GetTopologyResponse decodedResponse = (GetTopologyResponse) decodedPacket;
@@ -435,26 +493,30 @@
 
    public void testUpdateCallbackMessage() throws Exception
    {
-      UpdateCallbackMessage message = new UpdateCallbackMessage(randomString(), randomString(), true);
+      UpdateCallbackMessage message = new UpdateCallbackMessage(randomString(),
+            randomString(), true);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new AddCallbackMessageCodec());
 
       assertTrue(decodedPacket instanceof UpdateCallbackMessage);
 
       UpdateCallbackMessage decodedMessage = (UpdateCallbackMessage) decodedPacket;
       assertEquals(MSG_UPDATECALLBACK, decodedMessage.getType());
-      assertEquals(message.getRemotingSessionID(), decodedMessage.getRemotingSessionID());
+      assertEquals(message.getRemotingSessionID(), decodedMessage
+            .getRemotingSessionID());
       assertEquals(message.getClientVMID(), decodedMessage.getClientVMID());
       assertEquals(message.isAdd(), decodedMessage.isAdd());
    }
-   
+
    public void testCreateSessionRequest() throws Exception
    {
       CreateSessionRequest request = new CreateSessionRequest(true, 0, false);
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new CreateSessionRequestCodec());
 
       assertTrue(decodedPacket instanceof CreateSessionRequest);
 
@@ -472,7 +534,8 @@
             randomString(), 23, false);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new CreateSessionResponseCodec());
 
       assertTrue(decodedPacket instanceof CreateSessionResponse);
 
@@ -489,7 +552,8 @@
       IDBlockRequest request = new IDBlockRequest(23);
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new IDBlockRequestCodec());
 
       assertTrue(decodedPacket instanceof IDBlockRequest);
 
@@ -504,7 +568,8 @@
             randomLong() * 2);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new IDBlockResponseCodec());
 
       assertTrue(decodedPacket instanceof IDBlockResponse);
 
@@ -520,7 +585,7 @@
             .currentTimeMillis()), true, randomLong());
       addVersion(packet);
 
-      AbstractPacket p = encodeAndDecode(packet);
+      AbstractPacket p = encodeAndDecode(packet, new SendMessageCodec());
 
       assertTrue(p instanceof SendMessage);
 
@@ -538,10 +603,11 @@
       JBossDestination destination = new JBossQueue(
             "testCreateConsumerRequest", true);
       CreateConsumerRequest request = new CreateConsumerRequest(destination,
-            "color = 'red'", false, null, false, false);
+            "color = 'red'", false, "subscription", false, false);
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new CreateConsumerRequestCodec());
 
       assertTrue(decodedPacket instanceof CreateConsumerRequest);
 
@@ -564,7 +630,8 @@
             "testCreateDestinationRequest", false);
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new CreateDestinationRequestCodec());
 
       assertTrue(decodedPacket instanceof CreateDestinationRequest);
 
@@ -582,7 +649,8 @@
             destination);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new CreateDestinationResponseCodec());
 
       assertTrue(decodedPacket instanceof CreateDestinationResponse);
 
@@ -600,7 +668,8 @@
             destination);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new CreateDestinationResponseCodec());
 
       assertTrue(decodedPacket instanceof CreateDestinationResponse);
 
@@ -617,7 +686,8 @@
             randomString(), 23, 42, randomLong());
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new CreateConsumerResponseCodec());
 
       assertTrue(decodedPacket instanceof CreateConsumerResponse);
 
@@ -635,8 +705,11 @@
       StartConnectionMessage packet = new StartConnectionMessage();
       addVersion(packet);
 
-      AbstractPacket decodedPacket = encodeAndDecode(packet);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            MSG_STARTCONNECTION, StartConnectionMessage.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(packet, codec);
+
       assertTrue(decodedPacket instanceof StartConnectionMessage);
       assertEquals(MSG_STARTCONNECTION, decodedPacket.getType());
    }
@@ -646,8 +719,11 @@
       StopConnectionMessage packet = new StopConnectionMessage();
       addVersion(packet);
 
-      AbstractPacket decodedPacket = encodeAndDecode(packet);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            MSG_STOPCONNECTION, StopConnectionMessage.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(packet, codec);
+
       assertTrue(decodedPacket instanceof StopConnectionMessage);
       assertEquals(MSG_STOPCONNECTION, decodedPacket.getType());
    }
@@ -657,7 +733,8 @@
       ChangeRateMessage message = new ChangeRateMessage(0.63f);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new ChangeRateMessageCodec());
 
       assertTrue(decodedPacket instanceof ChangeRateMessage);
       ChangeRateMessage decodedMessage = (ChangeRateMessage) decodedPacket;
@@ -672,7 +749,8 @@
             randomLong(), 23);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new DeliverMessageCodec());
 
       assertTrue(decodedPacket instanceof DeliverMessage);
       DeliverMessage decodedMessage = (DeliverMessage) decodedPacket;
@@ -691,7 +769,8 @@
             randomLong());
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new AcknowledgeDeliveryRequestCodec());
 
       assertTrue(decodedPacket instanceof AcknowledgeDeliveryRequest);
       AcknowledgeDeliveryRequest decodedRequest = (AcknowledgeDeliveryRequest) decodedPacket;
@@ -710,7 +789,8 @@
             acks);
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new AcknowledgeDeliveriesRequestCodec());
 
       assertTrue(decodedPacket instanceof AcknowledgeDeliveriesMessage);
       AcknowledgeDeliveriesMessage decodedRequest = (AcknowledgeDeliveriesMessage) decodedPacket;
@@ -724,7 +804,8 @@
             true);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new AcknowledgeDeliveryResponseCodec());
 
       assertTrue(decodedPacket instanceof AcknowledgeDeliveryResponse);
       AcknowledgeDeliveryResponse decodedResponse = (AcknowledgeDeliveryResponse) decodedPacket;
@@ -738,7 +819,8 @@
       ClosingRequest request = new ClosingRequest(randomLong());
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new ClosingRequestCodec());
 
       assertTrue(decodedPacket instanceof ClosingRequest);
       ClosingRequest decodedRequest = (ClosingRequest) decodedPacket;
@@ -751,7 +833,8 @@
       ClosingResponse response = new ClosingResponse(System.currentTimeMillis());
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new ClosingResponseCodec());
 
       assertTrue(decodedPacket instanceof ClosingResponse);
       ClosingResponse decodedRequest = (ClosingResponse) decodedPacket;
@@ -764,8 +847,11 @@
       CloseMessage message = new CloseMessage();
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            MSG_CLOSE, CloseMessage.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(message, codec);
+
       assertTrue(decodedPacket instanceof CloseMessage);
       CloseMessage decodedMessage = (CloseMessage) decodedPacket;
       assertEquals(MSG_CLOSE, decodedMessage.getType());
@@ -781,7 +867,8 @@
       SendTransactionMessage message = new SendTransactionMessage(tr, true);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new SendTransactionMessageCodec());
 
       assertTrue(decodedPacket instanceof SendTransactionMessage);
       SendTransactionMessage decodedMessage = (SendTransactionMessage) decodedPacket;
@@ -801,8 +888,11 @@
       GetPreparedTransactionsRequest request = new GetPreparedTransactionsRequest();
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            REQ_GETPREPAREDTRANSACTIONS, GetPreparedTransactionsRequest.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(request, codec);
+
       assertTrue(decodedPacket instanceof GetPreparedTransactionsRequest);
       assertEquals(REQ_GETPREPAREDTRANSACTIONS, decodedPacket.getType());
    }
@@ -817,7 +907,8 @@
             xids);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new GetPreparedTransactionsResponseCodec());
 
       assertTrue(decodedPacket instanceof GetPreparedTransactionsResponse);
       GetPreparedTransactionsResponse decodedResponse = (GetPreparedTransactionsResponse) decodedPacket;
@@ -830,8 +921,11 @@
       GetClientIDRequest request = new GetClientIDRequest();
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            REQ_GETCLIENTID, GetClientIDRequest.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(request, codec);
+
       assertTrue(decodedPacket instanceof GetClientIDRequest);
       assertEquals(REQ_GETCLIENTID, decodedPacket.getType());
    }
@@ -841,7 +935,8 @@
       GetClientIDResponse response = new GetClientIDResponse(randomString());
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new GetClientIDResponseCodec());
 
       assertTrue(decodedPacket instanceof GetClientIDResponse);
       GetClientIDResponse decodedResponse = (GetClientIDResponse) decodedPacket;
@@ -854,7 +949,8 @@
       SetClientIDMessage message = new SetClientIDMessage(randomString());
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new SetClientIDMessageCodec());
 
       assertTrue(decodedPacket instanceof SetClientIDMessage);
       SetClientIDMessage decodedMessage = (SetClientIDMessage) decodedPacket;
@@ -876,7 +972,8 @@
             deliveries, randomString());
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new RecoverDeliveriesMessageCodec());
 
       assertTrue(decodedPacket instanceof RecoverDeliveriesMessage);
       RecoverDeliveriesMessage decodedMessage = (RecoverDeliveriesMessage) decodedPacket;
@@ -892,7 +989,8 @@
       CancelDeliveryMessage message = new CancelDeliveryMessage(cancel);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new CancelDeliveryMessageCodec());
 
       assertTrue(decodedPacket instanceof CancelDeliveryMessage);
       CancelDeliveryMessage decodedMessage = (CancelDeliveryMessage) decodedPacket;
@@ -915,7 +1013,8 @@
       CancelDeliveriesMessage message = new CancelDeliveriesMessage(cancels);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new CancelDeliveriesMessageCodec());
 
       assertTrue(decodedPacket instanceof CancelDeliveriesMessage);
       CancelDeliveriesMessage decodedMessage = (CancelDeliveriesMessage) decodedPacket;
@@ -931,7 +1030,8 @@
             "color = 'red'");
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacket decodedPacket = encodeAndDecode(request,
+            new CreateBrowserRequestCodec());
 
       assertTrue(decodedPacket instanceof CreateBrowserRequest);
 
@@ -946,7 +1046,8 @@
       CreateBrowserResponse response = new CreateBrowserResponse(randomString());
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new CreateBrowserResponseCodec());
 
       assertTrue(decodedPacket instanceof CreateBrowserResponse);
 
@@ -960,8 +1061,11 @@
       BrowserResetMessage message = new BrowserResetMessage();
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            MSG_BROWSER_RESET, BrowserResetMessage.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(message, codec);
+
       assertTrue(decodedPacket instanceof BrowserResetMessage);
       assertEquals(MSG_BROWSER_RESET, decodedPacket.getType());
    }
@@ -971,8 +1075,11 @@
       BrowserHasNextMessageRequest request = new BrowserHasNextMessageRequest();
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            REQ_BROWSER_HASNEXTMESSAGE, BrowserHasNextMessageRequest.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(request, codec);
+
       assertTrue(decodedPacket instanceof BrowserHasNextMessageRequest);
       assertEquals(REQ_BROWSER_HASNEXTMESSAGE, decodedPacket.getType());
    }
@@ -983,7 +1090,8 @@
             false);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new BrowserHasNextMessageResponseCodec());
 
       assertTrue(decodedPacket instanceof BrowserHasNextMessageResponse);
 
@@ -997,8 +1105,11 @@
       BrowserNextMessageRequest request = new BrowserNextMessageRequest();
       addVersion(request);
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
+      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
+            REQ_BROWSER_NEXTMESSAGE, BrowserNextMessageRequest.class);
 
+      AbstractPacket decodedPacket = encodeAndDecode(request, codec);
+
       assertTrue(decodedPacket instanceof BrowserNextMessageRequest);
       assertEquals(REQ_BROWSER_NEXTMESSAGE, decodedPacket.getType());
    }
@@ -1009,7 +1120,8 @@
       BrowserNextMessageResponse response = new BrowserNextMessageResponse(msg);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new BrowserNextMessageResponseCodec());
 
       assertTrue(decodedPacket instanceof BrowserNextMessageResponse);
       BrowserNextMessageResponse decodedResponse = (BrowserNextMessageResponse) decodedPacket;
@@ -1023,9 +1135,9 @@
       BrowserNextMessageBlockRequest request = new BrowserNextMessageBlockRequest(
             randomLong());
       addVersion(request);
+      
+      AbstractPacket decodedPacket = encodeAndDecode(request, new BrowserNextMessageBlockRequestCodec());
 
-      AbstractPacket decodedPacket = encodeAndDecode(request);
-
       assertTrue(decodedPacket instanceof BrowserNextMessageBlockRequest);
       BrowserNextMessageBlockRequest decodedRequest = (BrowserNextMessageBlockRequest) decodedPacket;
       assertEquals(REQ_BROWSER_NEXTMESSAGEBLOCK, decodedPacket.getType());
@@ -1041,7 +1153,8 @@
             messages);
       addVersion(response);
 
-      AbstractPacket decodedPacket = encodeAndDecode(response);
+      AbstractPacket decodedPacket = encodeAndDecode(response,
+            new BrowserNextMessageBlockResponseCodec());
 
       assertTrue(decodedPacket instanceof BrowserNextMessageBlockResponse);
       BrowserNextMessageBlockResponse decodedResponse = (BrowserNextMessageBlockResponse) decodedPacket;
@@ -1058,7 +1171,8 @@
             "testUnsubscribeMessage");
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new UnsubscribeMessageCodec());
 
       assertTrue(decodedPacket instanceof UnsubscribeMessage);
       UnsubscribeMessage decodedMessage = (UnsubscribeMessage) decodedPacket;
@@ -1075,7 +1189,8 @@
             destination);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new AddTemporaryDestinationMessageCodec());
 
       assertTrue(decodedPacket instanceof AddTemporaryDestinationMessage);
 
@@ -1092,7 +1207,8 @@
             destination);
       addVersion(message);
 
-      AbstractPacket decodedPacket = encodeAndDecode(message);
+      AbstractPacket decodedPacket = encodeAndDecode(message,
+            new DeleteTemporaryDestinationMessageCodec());
 
       assertTrue(decodedPacket instanceof DeleteTemporaryDestinationMessage);
 
@@ -1107,42 +1223,251 @@
 
    // Private -------------------------------------------------------
 
-   private AbstractPacket encodeAndDecode(AbstractPacket packet)
-         throws Exception
+   private AbstractPacket encodeAndDecode(AbstractPacket packet,
+         AbstractPacketCodec codec) throws Exception
    {
-      IoBuffer buffer = encode(packet);
-      return decode(buffer);
+      SimpleRemotingBuffer buf = new SimpleRemotingBuffer();
+      codec.encode(packet, buf);
+      buf.flip();
+
+      return decode(buf, codec);
    }
 
-   private IoBuffer encode(AbstractPacket packet) throws Exception
+   private AbstractPacket decode(SimpleRemotingBuffer buffer,
+         AbstractPacketCodec codec) throws Exception
    {
-      ProtocolCodecSession session = new ProtocolCodecSession();
-      ProtocolEncoder encoder = new PacketCodecFactory().getEncoder(session);
-      encoder.encode(session, packet, session.getEncoderOutput());
-      IoBuffer buffer = session.getEncoderOutputQueue().poll();
+      return codec.decode(buffer);
+   }
 
-      session.close();
+   // Inner classes -------------------------------------------------
 
-      return buffer;
-   }
-
-   private AbstractPacket decode(IoBuffer buffer) throws Exception
+   private final class SimpleRemotingBuffer implements RemotingBuffer
    {
-      ProtocolCodecSession session = new ProtocolCodecSession();
-      ProtocolDecoder decoder = new PacketCodecFactory().getDecoder(session);
-      decoder.decode(session, buffer, session.getDecoderOutput());
+      private static final byte NON_NULL_STRING = (byte) 0;
+      private static final byte NULL_STRING = (byte) 1;
 
-      session.getDecoderOutput().flush();
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      DataOutputStream dos = new DataOutputStream(baos);
 
-      Object o = session.getDecoderOutputQueue().poll();
+      DataInputStream dais;
 
-      assertNotNull(o);
-      assertTrue(o instanceof AbstractPacket);
+      public void flip()
+      {
+         dais = new DataInputStream(
+               new ByteArrayInputStream(baos.toByteArray()));
+      }
 
-      session.close();
+      public byte get()
+      {
+         try
+         {
+            return dais.readByte();
+         } catch (IOException e)
+         {
+            fail();
+            return -1;
+         }
+      }
 
-      return (AbstractPacket) o;
+      public void get(byte[] b)
+      {
+         try
+         {
+            dais.readFully(b);
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public boolean getBoolean()
+      {
+         try
+         {
+            return dais.readBoolean();
+         } catch (IOException e)
+         {
+            fail();
+            return false;
+         }
+      }
+
+      public float getFloat()
+      {
+         try
+         {
+            return dais.readFloat();
+         } catch (IOException e)
+         {
+            fail();
+            return -1;
+         }
+      }
+
+      public int getInt()
+      {
+         try
+         {
+            return dais.readInt();
+         } catch (IOException e)
+         {
+            fail();
+            return -1;
+         }
+      }
+
+      public long getLong()
+      {
+         try
+         {
+            return dais.readLong();
+         } catch (IOException e)
+         {
+            fail();
+            return -1;
+         }
+      }
+
+      public String getNullableString() throws CharacterCodingException
+      {
+         try
+         {
+            byte check = dais.readByte();
+            if (check == NULL_STRING)
+            {
+               return null;
+            } else
+            {
+               return dais.readUTF();
+            }
+         } catch (IOException e)
+         {
+            fail();
+            return null;
+         }
+      }
+
+      public String getString(CharsetDecoder decoder)
+            throws CharacterCodingException
+      {
+         try
+         {
+            return dais.readUTF();
+         } catch (IOException e)
+         {
+            fail();
+            return null;
+         }
+      }
+
+      public void put(byte byteValue)
+      {
+         try
+         {
+            dos.writeByte(byteValue);
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public void put(byte[] bytes)
+      {
+         try
+         {
+            dos.write(bytes);
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public void putBoolean(boolean b)
+      {
+         try
+         {
+            dos.writeBoolean(b);
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public void putFloat(float floatValue)
+      {
+         try
+         {
+            dos.writeFloat(floatValue);
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public void putInt(int intValue)
+      {
+         try
+         {
+            dos.writeInt(intValue);
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public void putLong(long longValue)
+      {
+         try
+         {
+            dos.writeLong(longValue);
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public void putNullableString(String nullableString)
+            throws CharacterCodingException
+      {
+         try
+         {
+            if (nullableString == null)
+            {
+               dos.writeByte(NULL_STRING);
+            } else
+            {
+               dos.writeByte(NON_NULL_STRING);
+               dos.writeUTF(nullableString);
+            }
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public void putString(String string, CharsetEncoder encoder)
+            throws CharacterCodingException
+      {
+         try
+         {
+            dos.writeUTF(string);
+         } catch (IOException e)
+         {
+            fail();
+         }
+      }
+
+      public int remaining()
+      {
+         try
+         {
+            return dais.available();
+         } catch (IOException e)
+         {
+            fail();
+            return -1;
+         }
+      }
    }
 
-   // Inner classes -------------------------------------------------
 }




More information about the jboss-cvs-commits mailing list