[jboss-cvs] JBoss Messaging SVN: r3354 - in branches/Branch_JBMESSAGING-544: src/main/org/jboss/jms/server/endpoint and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 21 10:43:36 EST 2007


Author: jmesnil
Date: 2007-11-21 10:43:36 -0500 (Wed, 21 Nov 2007)
New Revision: 3354

Added:
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageRequestCodec.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/BrowserNextMessageRequestCodec.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/BrowserResetMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/EmptyBodyPacketCodec.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/wireformat/BrowserHasNextMessageRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserHasNextMessageResponse.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserNextMessageRequest.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserNextMessageResponse.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserResetMessage.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/JMSExceptionMessage.java
Modified:
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientBrowserDelegate.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/DelegateSupport.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
   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/DeliverMessageCodec.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/SendMessageCodec.java
   branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/PacketType.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
* added packets & codecs for browser enumeration
* added support for JMSException created on the server and propagated to the client (wrapped in a JMSExceptionMessage and rethrown in DelegateSupport.sendBlocking(AbstractPacket))

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientBrowserDelegate.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientBrowserDelegate.java	2007-11-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/ClientBrowserDelegate.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -30,13 +30,14 @@
 import org.jboss.jms.client.state.HierarchicalState;
 import org.jboss.jms.delegate.BrowserDelegate;
 import org.jboss.jms.message.JBossMessage;
-import org.jboss.jms.wireformat.BrowserHasNextMessageRequest;
 import org.jboss.jms.wireformat.BrowserNextMessageBlockRequest;
-import org.jboss.jms.wireformat.BrowserNextMessageRequest;
-import org.jboss.jms.wireformat.BrowserResetRequest;
 import org.jboss.jms.wireformat.CloseRequest;
 import org.jboss.jms.wireformat.ClosingRequest;
 import org.jboss.jms.wireformat.RequestSupport;
+import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageRequest;
+import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageResponse;
+import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageResponse;
+import org.jboss.messaging.core.remoting.wireformat.BrowserResetMessage;
 
 /**
  * The client-side Browser delegate class.
@@ -85,6 +86,9 @@
 
       client = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
          getRemotingClient();
+      
+      newClient = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
+         getNewRemotingClient();
    }
 
    public void setState(HierarchicalState state)
@@ -93,6 +97,9 @@
 
       client = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
          getRemotingClient();
+
+      newClient = ((ConnectionState)state.getParent().getParent()).getRemotingConnection().
+         getNewRemotingClient();
    }
 
 
@@ -116,22 +123,23 @@
 
    public void reset() throws JMSException
    {
-      RequestSupport req = new BrowserResetRequest(id, version);
-      doInvoke(client, req);
+      sendBlocking(new BrowserResetMessage());
    }
 
    public boolean hasNextMessage() throws JMSException
    {
-      RequestSupport req = new BrowserHasNextMessageRequest(id, version);
-
-      return ((Boolean)doInvoke(client, req)).booleanValue();
+      BrowserHasNextMessageResponse response = (BrowserHasNextMessageResponse) sendBlocking(new BrowserHasNextMessageRequest());
+      return response.hasNext();
+      
+//      RequestSupport req = new BrowserHasNextMessageRequest(id, version);
+//
+//      return ((Boolean)doInvoke(client, req)).booleanValue();
    }
 
    public JBossMessage nextMessage() throws JMSException
    {
-      RequestSupport req = new BrowserNextMessageRequest(id, version);
-
-      return (JBossMessage)doInvoke(client, req);
+      BrowserNextMessageResponse response = (BrowserNextMessageResponse) sendBlocking(new org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageRequest());
+      return response.getMessage();
    }
 
    public JBossMessage[] nextMessageBlock(int maxMessages) throws JMSException

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/DelegateSupport.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/DelegateSupport.java	2007-11-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/client/delegate/DelegateSupport.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -36,6 +36,7 @@
 import org.jboss.jms.wireformat.ResponseSupport;
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.JMSExceptionMessage;
 import org.jboss.messaging.util.Streamable;
 import org.jboss.remoting.CannotConnectException;
 import org.jboss.remoting.Client;
@@ -171,18 +172,24 @@
    {
       assert newClient != null;
       assert request != null;
-      
+
       request.setTargetID(id);
       try
       {
          AbstractPacket response = (AbstractPacket) newClient.sendBlocking(request);
-         return response;
+         if (response instanceof JMSExceptionMessage)
+         {
+            JMSExceptionMessage message = (JMSExceptionMessage) response;
+            throw message.getException();
+         } else {
+            return response;
+         }
       } catch (Throwable t)
       {
          throw handleThrowable(t);
       }
    }
-   
+
    // Private --------------------------------------------------------------------------------------
 
    private Object doInvoke(Client client, RequestSupport req, boolean oneWay) throws JMSException

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java	2007-11-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -21,6 +21,9 @@
   */
 package org.jboss.jms.server.endpoint;
 
+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 java.util.ArrayList;
 import java.util.Iterator;
 
@@ -28,6 +31,7 @@
 import javax.jms.JMSException;
 import javax.jms.Message;
 
+import org.apache.mina.common.IoSession;
 import org.jboss.jms.delegate.BrowserEndpoint;
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.jms.server.selector.Selector;
@@ -35,6 +39,14 @@
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.contract.Channel;
 import org.jboss.messaging.core.contract.Filter;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
+import org.jboss.messaging.core.remoting.PacketHandler;
+import org.jboss.messaging.core.remoting.wireformat.AbstractPacket;
+import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageResponse;
+import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageResponse;
+import org.jboss.messaging.core.remoting.wireformat.JMSExceptionMessage;
+import org.jboss.messaging.core.remoting.wireformat.NullPacket;
+import org.jboss.messaging.core.remoting.wireformat.PacketType;
 import org.jboss.messaging.util.ExceptionUtil;
 
 /**
@@ -233,6 +245,8 @@
       
       Dispatcher.instance.unregisterTarget(id, this);
       
+      PacketDispatcher.server.unregister(id);
+      
       closed = true;
    }
 
@@ -246,5 +260,46 @@
    }
 
    // Inner classes --------------------------------------------------------------------------------
+   
+   class ServerBrowserEndpointHandler implements PacketHandler {
 
+      public String getID()
+      {
+         return id;
+      }
+      
+      public void handle(AbstractPacket packet, IoSession session)
+      {
+         try
+         {
+            PacketType type = packet.getType();
+            if (type == REQ_BROWSER_HASNEXTMESSAGE)
+            {
+               BrowserHasNextMessageResponse response = new BrowserHasNextMessageResponse(hasNextMessage());
+               response.normalize(packet);
+               session.write(response);
+            } else if (type == REQ_BROWSER_NEXTMESSAGE)
+            {
+               JBossMessage message = nextMessage();
+               BrowserNextMessageResponse response = new BrowserNextMessageResponse(message);
+               response.normalize(packet);
+               session.write(response);
+            } else if (type == PacketType.MSG_BROWSER_RESET)
+            {
+               reset();
+               
+               NullPacket response = new NullPacket();
+               response.normalize(packet);
+               session.write(response);
+            } else {
+               log.error("Unsupported packet for session: " + packet);
+            }
+         } catch (JMSException e)
+         {
+            JMSExceptionMessage message = new JMSExceptionMessage(e);
+            message.normalize(packet);
+            session.write(message);
+         }
+      } 
+   }
 }

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-11-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -112,6 +112,7 @@
 import org.jboss.messaging.core.remoting.wireformat.CreateDestinationRequest;
 import org.jboss.messaging.core.remoting.wireformat.CreateDestinationResponse;
 import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
+import org.jboss.messaging.core.remoting.wireformat.JMSExceptionMessage;
 import org.jboss.messaging.core.remoting.wireformat.NullPacket;
 import org.jboss.messaging.core.remoting.wireformat.PacketType;
 import org.jboss.messaging.core.remoting.wireformat.RecoverDeliveriesMessage;
@@ -2256,6 +2257,8 @@
       
       Dispatcher.instance.registerTarget(browserID, advised);
 
+      PacketDispatcher.server.register(ep.new ServerBrowserEndpointHandler());
+      
       ClientBrowserDelegate stub = new ClientBrowserDelegate(browserID);
 
       log.trace(this + " created and registered " + ep);
@@ -2544,8 +2547,9 @@
             }
          } catch (JMSException e)
          {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            JMSExceptionMessage message = new JMSExceptionMessage(e);
+            message.normalize(packet);
+            session.write(message);
          }
       }      
    }

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-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/AbstractPacketCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -26,6 +26,8 @@
 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.wireformat.AbstractPacket;
 import org.jboss.messaging.core.remoting.wireformat.PacketType;
 
@@ -277,6 +279,22 @@
       ByteArrayInputStream bais = new ByteArrayInputStream(b);
       return readDestination(new DataInputStream(bais));
    }
+   
+   protected static byte[] encode(Message message) throws Exception
+   {
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      message.write(new DataOutputStream(baos));
+      baos.flush();
+      return baos.toByteArray();
+   }
+
+   protected static Message decode(byte type, byte[] b) throws Exception
+   {
+      Message msg = MessageFactory.createMessage(type);
+      ByteArrayInputStream bais = new ByteArrayInputStream(b);
+      msg.read(new DataInputStream(bais));
+      return msg;
+   }
    // Private -------------------------------------------------------
 
    // Inner classes -------------------------------------------------

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageRequestCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,52 @@
+/*
+ * 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 static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_BROWSER_HASNEXTMESSAGE;
+
+import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageRequest;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ * @version <tt>$Revision$</tt>
+ *
+ */
+public class BrowserHasNextMessageRequestCodec extends EmptyBodyPacketCodec<BrowserHasNextMessageRequest>
+{
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserHasNextMessageRequestCodec()
+   {
+    super(REQ_BROWSER_HASNEXTMESSAGE);
+   }
+   
+   // Public --------------------------------------------------------
+
+   // EmptyBodyPacketCodec overrides --------------------------------
+   
+   @Override
+   protected BrowserHasNextMessageRequest newPacket()
+   {
+      return new BrowserHasNextMessageRequest();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: 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	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserHasNextMessageResponseCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,68 @@
+/*
+ * 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 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;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class BrowserHasNextMessageResponseCodec extends
+      AbstractPacketCodec<BrowserHasNextMessageResponse>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserHasNextMessageResponseCodec()
+   {
+      super(RESP_BROWSER_HASNEXTMESSAGE);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session,
+         BrowserHasNextMessageResponse response, IoBuffer out) throws Exception
+   {
+      out.putInt(1); //body length
+      putBoolean(out, response.hasNext());
+   }
+
+   @Override
+   protected BrowserHasNextMessageResponse decodeBody(IoSession session,
+         IoBuffer in) throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      boolean hasNext = getBoolean(in);
+
+      return new BrowserHasNextMessageResponse(hasNext);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageRequestCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageRequestCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageRequestCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,52 @@
+/*
+ * 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 static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_BROWSER_NEXTMESSAGE;
+
+import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageRequest;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ * @version <tt>$Revision$</tt>
+ *
+ */
+public class BrowserNextMessageRequestCodec extends EmptyBodyPacketCodec<BrowserNextMessageRequest>
+{
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserNextMessageRequestCodec()
+   {
+    super(REQ_BROWSER_NEXTMESSAGE);
+   }
+   
+   // Public --------------------------------------------------------
+
+   // EmptyBodyPacketCodec overrides --------------------------------
+   
+   @Override
+   protected BrowserNextMessageRequest newPacket()
+   {
+      return new BrowserNextMessageRequest();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: 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	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserNextMessageResponseCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,79 @@
+/*
+ * 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 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;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>.
+ */
+public class BrowserNextMessageResponseCodec extends AbstractPacketCodec<BrowserNextMessageResponse>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserNextMessageResponseCodec()
+   {
+      super(RESP_BROWSER_NEXTMESSAGE);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, BrowserNextMessageResponse response,
+         IoBuffer out) throws Exception
+   {
+      JBossMessage message = response.getMessage();
+      byte[] encodedMsg = encode(response.getMessage());
+
+      int bodyLength = 1 + INT_LENGTH + encodedMsg.length;
+
+      out.putInt(bodyLength);
+      out.put(message.getType());
+      out.putInt(encodedMsg.length);
+      out.put(encodedMsg);
+   }
+
+   @Override
+   protected BrowserNextMessageResponse decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+
+      byte type = in.get();
+      int msgLength = in.getInt();
+      byte[] encodedMsg = new byte[msgLength];
+      in.get(encodedMsg);
+      JBossMessage message = (JBossMessage) decode(type, encodedMsg);
+
+      return new BrowserNextMessageResponse(message);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private ----------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserResetMessageCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserResetMessageCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/BrowserResetMessageCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,52 @@
+/*
+ * 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 static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_BROWSER_RESET;
+
+import org.jboss.messaging.core.remoting.wireformat.BrowserResetMessage;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ * @version <tt>$Revision$</tt>
+ *
+ */
+public class BrowserResetMessageCodec extends EmptyBodyPacketCodec<BrowserResetMessage>
+{
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserResetMessageCodec()
+   {
+    super(MSG_BROWSER_RESET);
+   }
+   
+   // Public --------------------------------------------------------
+
+   // EmptyBodyPacketCodec overrides --------------------------------
+   
+   @Override
+   protected BrowserResetMessage newPacket()
+   {
+      return new BrowserResetMessage();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

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-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/DeliverMessageCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -8,15 +8,9 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_DELIVERMESSAGE;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-
 import org.apache.mina.common.IoBuffer;
 import org.apache.mina.common.IoSession;
 import org.jboss.messaging.core.contract.Message;
-import org.jboss.messaging.core.impl.message.MessageFactory;
 import org.jboss.messaging.core.remoting.wireformat.DeliverMessage;
 
 /**
@@ -91,21 +85,5 @@
 
    // Private ----------------------------------------------------
 
-   private static byte[] encode(Message message) throws Exception
-   {
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      message.write(new DataOutputStream(baos));
-      baos.flush();
-      return baos.toByteArray();
-   }
-
-   private static Message decode(byte type, byte[] b) throws Exception
-   {
-      Message msg = MessageFactory.createMessage(type);
-      ByteArrayInputStream bais = new ByteArrayInputStream(b);
-      msg.read(new DataInputStream(bais));
-      return msg;
-   }
-
    // Inner classes -------------------------------------------------
 }

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/EmptyBodyPacketCodec.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/EmptyBodyPacketCodec.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/EmptyBodyPacketCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,65 @@
+/*
+ * 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.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+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>
+ * 
+ * @version <tt>$Revision$</tt>
+ * 
+ */
+public abstract class EmptyBodyPacketCodec<P extends AbstractPacket> extends
+      AbstractPacketCodec<P>
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public EmptyBodyPacketCodec(PacketType type)
+   {
+      super(type);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, P packet,
+         IoBuffer out) throws Exception
+   {
+      // no body
+      out.putInt(0);
+   }
+
+   @Override
+   protected P decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      in.getInt(); // skip body length
+      return newPacket();
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   protected abstract P newPacket();
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: 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	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/JMSExceptionMessageCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,96 @@
+/*
+ * 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 java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+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;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ * 
+ */
+public class JMSExceptionMessageCodec extends
+      AbstractPacketCodec<JMSExceptionMessage>
+{
+
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public JMSExceptionMessageCodec()
+   {
+      super(PacketType.MSG_JMSEXCEPTION);
+   }
+
+   // Public --------------------------------------------------------
+
+   // AbstractPacketCodec overrides ---------------------------------
+
+   @Override
+   protected void encodeBody(IoSession session, JMSExceptionMessage message,
+         IoBuffer out) throws Exception
+   {
+      JMSException exception = message.getException();
+     
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      ObjectOutputStream oos = new ObjectOutputStream(baos);
+      oos.writeObject(exception);
+
+      byte[] encodedException = baos.toByteArray();
+      
+      int bodyLength = INT_LENGTH + encodedException.length;
+
+      out.putInt(bodyLength);
+      out.putInt(encodedException.length);
+      out.put(encodedException);
+   }
+
+   @Override
+   protected JMSExceptionMessage decodeBody(IoSession session, IoBuffer in)
+         throws Exception
+   {
+      int bodyLength = in.getInt();
+      if (in.remaining() < bodyLength)
+      {
+         return null;
+      }
+      
+      int encodedExceptionLength = in.getInt();
+      byte[] b = new byte[encodedExceptionLength];
+      in.get(b);
+      
+      ByteArrayInputStream bais = new ByteArrayInputStream(b);
+      ObjectInputStream ois = new ObjectInputStream(bais);
+      JMSException exception = (JMSException) ois.readObject();
+      
+      return new JMSExceptionMessage(exception);
+   }
+
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

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-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/PacketCodecFactory.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -10,6 +10,11 @@
 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.BrowserHasNextMessageRequest;
+import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageResponse;
+import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageRequest;
+import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageResponse;
+import org.jboss.messaging.core.remoting.wireformat.BrowserResetMessage;
 import org.jboss.messaging.core.remoting.wireformat.CancelDeliveriesMessage;
 import org.jboss.messaging.core.remoting.wireformat.CancelDeliveryMessage;
 import org.jboss.messaging.core.remoting.wireformat.ChangeRateMessage;
@@ -31,6 +36,7 @@
 import org.jboss.messaging.core.remoting.wireformat.GetClientIDResponse;
 import org.jboss.messaging.core.remoting.wireformat.IDBlockRequest;
 import org.jboss.messaging.core.remoting.wireformat.IDBlockResponse;
+import org.jboss.messaging.core.remoting.wireformat.JMSExceptionMessage;
 import org.jboss.messaging.core.remoting.wireformat.NullPacket;
 import org.jboss.messaging.core.remoting.wireformat.RecoverDeliveriesMessage;
 import org.jboss.messaging.core.remoting.wireformat.SendMessage;
@@ -59,6 +65,9 @@
       super.addMessageDecoder(NullPacketCodec.class);
       super.addMessageEncoder(NullPacket.class, NullPacketCodec.class);
 
+      super.addMessageDecoder(JMSExceptionMessageCodec.class);
+      super.addMessageEncoder(JMSExceptionMessage.class, JMSExceptionMessageCodec.class);
+
       // TextPacket are for testing purpose only!
       super.addMessageDecoder(TextPacketCodec.class);
       super.addMessageEncoder(TextPacket.class, TextPacketCodec.class);
@@ -181,8 +190,29 @@
       super.addMessageDecoder(SendTransactionRequestCodec.class);
       super.addMessageEncoder(SendTransactionMessage.class,
             SendTransactionRequestCodec.class);
-   }
 
+      super.addMessageDecoder(BrowserResetMessageCodec.class);
+      super.addMessageEncoder(BrowserResetMessage.class,
+            BrowserResetMessageCodec.class);
+      
+      super.addMessageDecoder(BrowserHasNextMessageRequestCodec.class);
+      super.addMessageEncoder(BrowserHasNextMessageRequest.class,
+            BrowserHasNextMessageRequestCodec.class);
+
+      super.addMessageDecoder(BrowserHasNextMessageResponseCodec.class);
+      super.addMessageEncoder(BrowserHasNextMessageResponse.class,
+            BrowserHasNextMessageResponseCodec.class);
+      
+      super.addMessageDecoder(BrowserNextMessageRequestCodec.class);
+      super.addMessageEncoder(BrowserNextMessageRequest.class,
+            BrowserNextMessageRequestCodec.class);
+
+      super.addMessageDecoder(BrowserNextMessageResponseCodec.class);
+      super.addMessageEncoder(BrowserNextMessageResponse.class,
+            BrowserNextMessageResponseCodec.class);
+
+}
+
    // Public --------------------------------------------------------
 
    // Package protected ---------------------------------------------

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-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/codec/SendMessageCodec.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -8,16 +8,9 @@
 
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDMESSAGE;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-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.contract.Message;
-import org.jboss.messaging.core.impl.message.MessageFactory;
 import org.jboss.messaging.core.remoting.wireformat.SendMessage;
 
 /**
@@ -87,21 +80,5 @@
 
    // Private ----------------------------------------------------
 
-   private static byte[] encode(Message message) throws Exception
-   {
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      message.write(new DataOutputStream(baos));
-      baos.flush();
-      return baos.toByteArray();
-   }
-
-   private static Message decode(byte type, byte[] b) throws Exception
-   {
-      Message msg = MessageFactory.createMessage(type);
-      ByteArrayInputStream bais = new ByteArrayInputStream(b);
-      msg.read(new DataInputStream(bais));
-      return msg;
-   }
-
    // Inner classes -------------------------------------------------
 }

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserHasNextMessageRequest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserHasNextMessageRequest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserHasNextMessageRequest.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_BROWSER_HASNEXTMESSAGE;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ * @version <tt>$Revision$</tt>
+ *
+ */
+public class BrowserHasNextMessageRequest extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserHasNextMessageRequest()
+   {
+    super(REQ_BROWSER_HASNEXTMESSAGE);
+   }
+
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserHasNextMessageResponse.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserHasNextMessageResponse.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserHasNextMessageResponse.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,57 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_BROWSER_HASNEXTMESSAGE;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ * 
+ */
+public class BrowserHasNextMessageResponse extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final boolean hasNext;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserHasNextMessageResponse(boolean hasNext)
+   {
+      super(RESP_BROWSER_HASNEXTMESSAGE);
+
+      this.hasNext = hasNext;
+   }
+
+   // Public --------------------------------------------------------
+
+   public boolean hasNext()
+   {
+      return hasNext;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", hasNext=" + hasNext + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserNextMessageRequest.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserNextMessageRequest.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserNextMessageRequest.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_BROWSER_NEXTMESSAGE;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ * @version <tt>$Revision$</tt>
+ *
+ */
+public class BrowserNextMessageRequest extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserNextMessageRequest()
+   {
+    super(REQ_BROWSER_NEXTMESSAGE);
+   }
+
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserNextMessageResponse.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserNextMessageResponse.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserNextMessageResponse.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,58 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import org.jboss.jms.message.JBossMessage;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ */
+public class BrowserNextMessageResponse extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final JBossMessage message;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserNextMessageResponse(JBossMessage message)
+   {
+      super(PacketType.RESP_BROWSER_NEXTMESSAGE);
+
+      assert message != null;
+
+      this.message = message;
+   }
+
+   // Public --------------------------------------------------------
+
+   public JBossMessage getMessage()
+   {
+      return message;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", message=" + message + "]";
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserResetMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserResetMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/BrowserResetMessage.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_BROWSER_RESET;
+
+/**
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ * @version <tt>$Revision$</tt>
+ *
+ */
+public class BrowserResetMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public BrowserResetMessage()
+   {
+    super(MSG_BROWSER_RESET);
+   }
+
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Added: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/JMSExceptionMessage.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/JMSExceptionMessage.java	                        (rev 0)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/JMSExceptionMessage.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -0,0 +1,59 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.wireformat;
+
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_JMSEXCEPTION;
+
+import javax.jms.JMSException;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ * 
+ */
+public class JMSExceptionMessage extends AbstractPacket
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   private final JMSException exception;
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public JMSExceptionMessage(JMSException exception)
+   {
+      super(MSG_JMSEXCEPTION);
+
+      assert exception != null;
+
+      this.exception = exception;
+   }
+
+   // Public --------------------------------------------------------
+
+   public JMSException getException()
+   {
+      return exception;
+   }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", exception= " + exception + "]";
+   }
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Modified: branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/PacketType.java
===================================================================
--- branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/PacketType.java	2007-11-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/src/main/org/jboss/messaging/core/remoting/wireformat/PacketType.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -15,47 +15,56 @@
 {
    // FIXME better choice of byte value...
    
-   NULL                      ((byte) 1),
-   TEXT                      ((byte) 3),
+   NULL                          ((byte) 1),
+   MSG_JMSEXCEPTION              ((byte) 2),
+   TEXT                          ((byte) 3),
    // Connection factory
-   REQ_CREATECONNECTION      ((byte) 4),
-   RESP_CREATECONNECTION     ((byte) 5),
+   REQ_CREATECONNECTION          ((byte) 4),
+   RESP_CREATECONNECTION         ((byte) 5),
    // Connection
-   REQ_IDBLOCK               ((byte) 6),
-   RESP_IDBLOCK              ((byte) 7),
-   REQ_CREATESESSION         ((byte) 8),
-   RESP_CREATESESSION        ((byte) 9),
-   MSG_STARTCONNECTION       ((byte)10),
-   MSG_STOPCONNECTION        ((byte)11),
-   MSG_SENDTRANSACTION       ((byte)12),
-   RESP_SENDTRANSACTION      ((byte)13),
-   REQ_GETCLIENTID           ((byte)14),
-   RESP_GETCLIENTID          ((byte)15),
-   MSG_SETCLIENTID           ((byte)16),
+   REQ_IDBLOCK                   ((byte) 6),
+   RESP_IDBLOCK                  ((byte) 7),
+   REQ_CREATESESSION             ((byte) 8),
+   RESP_CREATESESSION            ((byte) 9),
+   MSG_STARTCONNECTION           ((byte)10),
+   MSG_STOPCONNECTION            ((byte)11),
+   MSG_SENDTRANSACTION           ((byte)12),
+   RESP_SENDTRANSACTION          ((byte)13),
+   REQ_GETCLIENTID               ((byte)14),
+   RESP_GETCLIENTID              ((byte)15),
+   MSG_SETCLIENTID               ((byte)16),
    // Session
-   REQ_CREATECONSUMER        ((byte)17),
-   RESP_CREATECONSUMER       ((byte)18),  
-   REQ_CREATEDESTINATION     ((byte)21),
-   RESP_CREATEDESTINATION    ((byte)22),  
-   REQ_CREATEBROWSER         ((byte)23),
-   RESP_CREATEBROWSER        ((byte)24),
-   MSG_SENDMESSAGE           ((byte)25),
-   MSG_DELIVERMESSAGE        ((byte)26),
-   REQ_ACKDELIVERY           ((byte)27),
-   RESP_ACKDELIVERY          ((byte)28),
-   MSG_ACKDELIVERIES         ((byte)29),
-   RESP_ACKDELIVERIES        ((byte)30),
-   MSG_RECOVERDELIVERIES     ((byte)31),
-   MSG_CANCELDELIVERY        ((byte)32),
-   MSG_CANCELDELIVERIES      ((byte)33),
+   REQ_CREATECONSUMER            ((byte)17),
+   RESP_CREATECONSUMER           ((byte)18),  
+   REQ_CREATEDESTINATION         ((byte)21),
+   RESP_CREATEDESTINATION        ((byte)22),  
+   REQ_CREATEBROWSER             ((byte)23),
+   RESP_CREATEBROWSER            ((byte)24),
+   MSG_SENDMESSAGE               ((byte)25),
+   MSG_DELIVERMESSAGE            ((byte)26),
+   REQ_ACKDELIVERY               ((byte)27),
+   RESP_ACKDELIVERY              ((byte)28),
+   MSG_ACKDELIVERIES             ((byte)29),
+   RESP_ACKDELIVERIES            ((byte)30),
+   MSG_RECOVERDELIVERIES         ((byte)31),
+   MSG_CANCELDELIVERY            ((byte)32),
+   MSG_CANCELDELIVERIES          ((byte)33),
    // Consumer
-   MSG_CHANGERATE            ((byte)34),
+   MSG_CHANGERATE                ((byte)34),
+   // Browser
+   MSG_BROWSER_RESET             ((byte)35),
+   REQ_BROWSER_HASNEXTMESSAGE    ((byte)36),
+   RESP_BROWSER_HASNEXTMESSAGE   ((byte)37),
+   REQ_BROWSER_NEXTMESSAGEBLOCK  ((byte)38),
+   RESP_BROWSER_NEXTMESSAGEBLOCK ((byte)39),
+   REQ_BROWSER_NEXTMESSAGE       ((byte)40),
+   RESP_BROWSER_NEXTMESSAGE      ((byte)41),
    // Misc
-   REQ_CLOSING               ((byte)35),
-   RESP_CLOSING              ((byte)36),
-   MSG_CLOSE                 ((byte)37);
+   REQ_CLOSING                   ((byte)42),
+   RESP_CLOSING                  ((byte)43),
+   MSG_CLOSE                     ((byte)44);
    
-   private byte type;
+   public final byte type;
 
    PacketType(byte type)
    {

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-21 10:42:02 UTC (rev 3353)
+++ branches/Branch_JBMESSAGING-544/tests/src/org/jboss/test/messaging/core/remoting/wireformat/PacketTypeTest.java	2007-11-21 15:43:36 UTC (rev 3354)
@@ -8,11 +8,13 @@
 
 import static java.lang.System.currentTimeMillis;
 import static java.util.UUID.randomUUID;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_BROWSER_RESET;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CANCELDELIVERIES;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CANCELDELIVERY;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CHANGERATE;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_CLOSE;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_DELIVERMESSAGE;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_JMSEXCEPTION;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_RECOVERDELIVERIES;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDMESSAGE;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.MSG_SENDTRANSACTION;
@@ -21,6 +23,8 @@
 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_ACKDELIVERY;
+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_CLOSING;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATEBROWSER;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_CREATECONNECTION;
@@ -30,6 +34,8 @@
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_GETCLIENTID;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.REQ_IDBLOCK;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_ACKDELIVERY;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_BROWSER_HASNEXTMESSAGE;
+import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_BROWSER_NEXTMESSAGE;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CLOSING;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATEBROWSER;
 import static org.jboss.messaging.core.remoting.wireformat.PacketType.RESP_CREATECONNECTION;
@@ -42,6 +48,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.jms.InvalidDestinationException;
+import javax.jms.JMSException;
+
 import junit.framework.TestCase;
 
 import org.apache.mina.common.IoBuffer;
@@ -65,6 +74,11 @@
 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.BrowserHasNextMessageRequest;
+import org.jboss.messaging.core.remoting.wireformat.BrowserHasNextMessageResponse;
+import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageRequest;
+import org.jboss.messaging.core.remoting.wireformat.BrowserNextMessageResponse;
+import org.jboss.messaging.core.remoting.wireformat.BrowserResetMessage;
 import org.jboss.messaging.core.remoting.wireformat.CancelDeliveriesMessage;
 import org.jboss.messaging.core.remoting.wireformat.CancelDeliveryMessage;
 import org.jboss.messaging.core.remoting.wireformat.ChangeRateMessage;
@@ -86,6 +100,7 @@
 import org.jboss.messaging.core.remoting.wireformat.GetClientIDResponse;
 import org.jboss.messaging.core.remoting.wireformat.IDBlockRequest;
 import org.jboss.messaging.core.remoting.wireformat.IDBlockResponse;
+import org.jboss.messaging.core.remoting.wireformat.JMSExceptionMessage;
 import org.jboss.messaging.core.remoting.wireformat.NullPacket;
 import org.jboss.messaging.core.remoting.wireformat.PacketType;
 import org.jboss.messaging.core.remoting.wireformat.RecoverDeliveriesMessage;
@@ -177,6 +192,22 @@
       assertEquals(packet.getTargetID(), p.getTargetID());
    }
 
+   public void testJMSExceptionMessage() throws Exception
+   {
+      JMSException e = new InvalidDestinationException(
+            "testJMSExceptionMessage");
+      JMSExceptionMessage message = new JMSExceptionMessage(e);
+
+      AbstractPacket decodedPacket = encodeAndDecode(message);
+
+      assertTrue(decodedPacket instanceof JMSExceptionMessage);
+      JMSExceptionMessage decodedMessage = (JMSExceptionMessage) decodedPacket;
+
+      assertEquals(MSG_JMSEXCEPTION, decodedMessage.getType());
+      assertEquals(message.getException().getMessage(), decodedMessage
+            .getException().getMessage());
+   }
+
    public void testTextPacket() throws Exception
    {
       TextPacket packet = new TextPacket("testTextPacket");
@@ -347,11 +378,13 @@
       assertEquals(request.getName(), decodedRequest.getName());
       assertEquals(request.isQueue(), decodedRequest.isQueue());
    }
-   
+
    public void testCreateDestinationResponseForQueue() throws Exception
    {
-      JBossDestination destination = new JBossQueue("testCreateQueueResponse", true);
-      CreateDestinationResponse response = new CreateDestinationResponse(destination);
+      JBossDestination destination = new JBossQueue("testCreateQueueResponse",
+            true);
+      CreateDestinationResponse response = new CreateDestinationResponse(
+            destination);
 
       AbstractPacket decodedPacket = encodeAndDecode(response);
 
@@ -362,11 +395,13 @@
       assertTrue(decodedResponse.getDestination() instanceof JBossQueue);
       assertEquals(response.getDestination(), decodedResponse.getDestination());
    }
-   
+
    public void testCreateDestinationResponseForTopic() throws Exception
    {
-      JBossDestination destination = new JBossTopic("testCreateDestinationResponseForTopic");
-      CreateDestinationResponse response = new CreateDestinationResponse(destination);
+      JBossDestination destination = new JBossTopic(
+            "testCreateDestinationResponseForTopic");
+      CreateDestinationResponse response = new CreateDestinationResponse(
+            destination);
 
       AbstractPacket decodedPacket = encodeAndDecode(response);
 
@@ -672,6 +707,63 @@
       assertEquals(response.getBrowserID(), decodedResponse.getBrowserID());
    }
 
+   public void testBrowserResetMessage() throws Exception
+   {
+      BrowserResetMessage message = new BrowserResetMessage();
+
+      AbstractPacket decodedPacket = encodeAndDecode(message);
+
+      assertTrue(decodedPacket instanceof BrowserResetMessage);
+      assertEquals(MSG_BROWSER_RESET, decodedPacket.getType());
+   }
+   
+   public void testBrowserHasNextMessageRequest() throws Exception
+   {
+      BrowserHasNextMessageRequest request = new BrowserHasNextMessageRequest();
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof BrowserHasNextMessageRequest);
+      assertEquals(REQ_BROWSER_HASNEXTMESSAGE, decodedPacket.getType());
+   }
+
+   public void testBrowserHasNextMessageResponse() throws Exception
+   {
+      BrowserHasNextMessageResponse response = new BrowserHasNextMessageResponse(false);
+
+      AbstractPacket decodedPacket = encodeAndDecode(response);
+
+      assertTrue(decodedPacket instanceof BrowserHasNextMessageResponse);
+
+      BrowserHasNextMessageResponse decodedResponse = (BrowserHasNextMessageResponse) decodedPacket;
+      assertEquals(RESP_BROWSER_HASNEXTMESSAGE, decodedResponse.getType());
+      assertEquals(response.hasNext(), decodedResponse.hasNext());
+   }
+
+   public void testBrowserNextMessageRequest() throws Exception
+   {
+      BrowserNextMessageRequest request = new BrowserNextMessageRequest();
+
+      AbstractPacket decodedPacket = encodeAndDecode(request);
+
+      assertTrue(decodedPacket instanceof BrowserNextMessageRequest);
+      assertEquals(REQ_BROWSER_NEXTMESSAGE, decodedPacket.getType());
+   }
+
+   public void testBrowserNextMessageResponse() throws Exception
+   {
+      JBossMessage msg = new JBossMessage(currentTimeMillis());
+      BrowserNextMessageResponse response = new BrowserNextMessageResponse(msg);
+
+      AbstractPacket decodedPacket = encodeAndDecode(response);
+
+      assertTrue(decodedPacket instanceof BrowserNextMessageResponse);
+      BrowserNextMessageResponse decodedResponse = (BrowserNextMessageResponse) decodedPacket;
+      assertEquals(RESP_BROWSER_NEXTMESSAGE, decodedResponse.getType());
+      assertEquals(response.getMessage().getMessageID(), decodedResponse
+            .getMessage().getMessageID());
+   }
+
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------




More information about the jboss-cvs-commits mailing list