[jboss-cvs] JBoss Messaging SVN: r1503 - branches/Branch_HTTP_Experiment/src/main/org/jboss/jms/server/remoting

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Oct 20 03:08:14 EDT 2006


Author: ron_sigal
Date: 2006-10-20 03:08:13 -0400 (Fri, 20 Oct 2006)
New Revision: 1503

Modified:
   branches/Branch_HTTP_Experiment/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java
Log:
JBMESSAGING-207: Added handling for ArrayLists of Callbacks.

Modified: branches/Branch_HTTP_Experiment/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java
===================================================================
--- branches/Branch_HTTP_Experiment/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java	2006-10-19 22:01:47 UTC (rev 1502)
+++ branches/Branch_HTTP_Experiment/src/main/org/jboss/jms/server/remoting/JMSWireFormat.java	2006-10-20 07:08:13 UTC (rev 1503)
@@ -29,6 +29,7 @@
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -51,6 +52,7 @@
 import org.jboss.remoting.InvocationRequest;
 import org.jboss.remoting.InvocationResponse;
 import org.jboss.remoting.callback.Callback;
+import org.jboss.remoting.callback.ServerInvokerCallbackHandler;
 import org.jboss.remoting.invocation.InternalInvocation;
 import org.jboss.remoting.marshal.Marshaller;
 import org.jboss.remoting.marshal.UnMarshaller;
@@ -105,6 +107,7 @@
    protected static final byte HANDLE_MESSAGE_RESPONSE = 103;
    protected static final byte BROWSE_MESSAGE_RESPONSE = 104;
    protected static final byte BROWSE_MESSAGES_RESPONSE = 105;
+   protected static final byte CALLBACK_LIST = 106;
 
 
    // Static --------------------------------------------------------
@@ -445,6 +448,36 @@
                
                if (trace) { log.trace("wrote browse message response"); }
             }
+            else if (res instanceof ArrayList
+                  && ((ArrayList) res).size() > 0
+                  && ((ArrayList) res).get(0) instanceof Callback)
+            {
+               if (true) log.info("Polled ArrayList of Callbacks: " + ((ArrayList)res).size());
+               log.info("payload: " + resp.getPayload());
+               if (resp.getPayload() != null)
+                  log.info("payload size: " + resp.getPayload().size());
+               ArrayList callbackList = (ArrayList) res;
+               dos.write(CALLBACK_LIST);
+               dos.writeUTF(resp.getSessionId());
+               log.info("sessionId: " + resp.getSessionId());
+               dos.writeInt(callbackList.size());
+               
+               Iterator it = callbackList.iterator();
+               while (it.hasNext())
+               {
+                  Callback callback = (Callback) it.next();
+                  Map payload = callback.getReturnPayload();
+                  String guid = (String)payload.get(ServerInvokerCallbackHandler.CALLBACK_ID);
+                  log.info("guid: " + guid);
+                  dos.writeUTF(guid);
+                  
+                  MessagingMarshallable mm = (MessagingMarshallable) callback.getParameter();
+                  ClientDelivery delivery = (ClientDelivery) mm.getLoad();
+                  delivery.write(dos);
+                  dos.flush();
+                  log.info("wrote ClientDelivery");
+               }
+            }
             else
             {
                dos.write(SERIALIZED);
@@ -761,6 +794,32 @@
    
                return request;
             }
+            case CALLBACK_LIST:
+            {
+               // Recreate ArrayList of Callbacks (for Callback polling).
+               log.info("CALLBACK_LIST");
+               String sessionId = dis.readUTF();
+               log.info("sessionId: " + sessionId);
+               int size = dis.readInt();
+               log.info("size: " + size);
+               ArrayList callbackList = new ArrayList(size);
+               for (int i = 0; i < size; i++)
+               {
+                  String guid = dis.readUTF();
+                  log.info("guid: " + guid);
+                  ClientDelivery delivery = new ClientDelivery();
+                  delivery.read(dis);
+                  MessagingMarshallable mm = new MessagingMarshallable(version, delivery);
+                  Callback callback = new Callback(mm);
+                  HashMap payload = new HashMap();
+                  payload.put(ServerInvokerCallbackHandler.CALLBACK_ID, guid);
+                  callback.setReturnPayload(payload);
+                  callbackList.add(callback);
+                  log.info("added callback");
+               }
+               InvocationResponse response = new InvocationResponse(sessionId, callbackList, false, null);
+               return response;
+            }
             default:
             {
                throw new IllegalStateException("Invalid format type " + formatType);




More information about the jboss-cvs-commits mailing list