[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting ...

Ron Sigal ron_sigal at yahoo.com
Thu Nov 16 02:18:43 EST 2006


  User: rsigal  
  Date: 06/11/16 02:18:43

  Modified:    src/main/org/jboss/remoting  Tag: remoting_2_x Client.java
  Log:
  JBREM-605: Callback acknowledgements can now return a response.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.53.2.3  +69 -9     JBossRemoting/src/main/org/jboss/remoting/Client.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Client.java
  ===================================================================
  RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/Client.java,v
  retrieving revision 1.53.2.2
  retrieving revision 1.53.2.3
  diff -u -b -r1.53.2.2 -r1.53.2.3
  --- Client.java	9 Nov 2006 20:46:29 -0000	1.53.2.2
  +++ Client.java	16 Nov 2006 07:18:43 -0000	1.53.2.3
  @@ -63,7 +63,7 @@
    *
    * @author <a href="mailto:jhaynie at vocalocity.net">Jeff Haynie</a>
    * @author <a href="mailto:telrod at e2technologies.net">Tom Elrod</a>
  - * @version $Revision: 1.53.2.2 $
  + * @version $Revision: 1.53.2.3 $
    */
   public class Client implements Externalizable
   {
  @@ -1195,14 +1195,45 @@
         }
      }
   
  +   public int acknowledgeCallback(InvokerCallbackHandler callbackHandler, Callback callback)
  +   throws Throwable
  +   {
  +      return acknowledgeCallback(callbackHandler, callback, null);
  +   }
  +   
  +   public int acknowledgeCallback(InvokerCallbackHandler callbackHandler, Callback callback, Object response)
  +   throws Throwable
  +   {
  +      ArrayList callbacks = new ArrayList(1);
  +      callbacks.add(callback);
  +      
  +      ArrayList responses = null;
  +      if (response != null)
  +      {
  +         responses = new ArrayList(1);
  +         responses.add(response);
  +      }
  +      
  +      return acknowledgeCallbacks(callbackHandler, callbacks, responses);
  +   }
  +   
      public int acknowledgeCallbacks(InvokerCallbackHandler callbackHandler, List callbacks)
      throws Throwable
      {
  +      return acknowledgeCallbacks(callbackHandler, callbacks, null);
  +   }
  +   
  +   public int acknowledgeCallbacks(InvokerCallbackHandler callbackHandler, List callbacks, List responses)
  +   throws Throwable
  +   {
         if (callbackHandler == null)
            throw new Exception("InvokerCallbackHandler parameter must not be null");
   
         if (callbacks == null)
  -         throw new Exception("Callback ArrayList parameter must not be null");
  +         throw new Exception("Callback List parameter must not be null");
  +
  +      if (responses != null && responses.size() != callbacks.size())
  +         throw new Exception("Callback response list must be (1) null or (2) the same size as callback list");
   
         if (callbacks.size() == 0)
            return 0;
  @@ -1210,10 +1241,25 @@
         if (isConnected())
         {
            ArrayList callbackIds = new ArrayList(callbacks.size());
  -         Iterator it = callbacks.iterator();
  +         Iterator idsIterator = callbacks.iterator();
  +         ArrayList responseList = null;
  +         Iterator responseIterator = null;
  +         if (responses != null)
  +         {
  +            responseList = new ArrayList(responses.size());
  +            responseIterator = responses.iterator();
  +         }
  +         
  +         Callback callback = null;
  +         Object response = null;
  +         String listenerId = null;
  +         
            for (int i = 0; i < callbacks.size(); i++)
            {
  -            Callback callback = (Callback) it.next();
  +            callback = (Callback) idsIterator.next();
  +            if (responseIterator != null)
  +               response = responseIterator.next();
  +            
               Map returnPayload = callback.getReturnPayload();
               if (returnPayload != null)
               {
  @@ -1221,6 +1267,20 @@
                  if (callbackId != null)
                  {
                     callbackIds.add(callbackId);
  +                  if (responseIterator != null)
  +                     responseList.add(response);
  +                  
  +                  String nextListenerId = (String) returnPayload.get(LISTENER_ID_KEY);
  +                  if (i == 0)
  +                  {
  +                     listenerId = nextListenerId;
  +                  }
  +                  else
  +                  {
  +                     if (!listenerId.equals(nextListenerId))
  +                        throw new Exception("Cannot acknowledge callbacks: " +
  +                                            "all must be from same server side callback handler");
  +                  }
                  }
                  else
                  {
  @@ -1237,20 +1297,20 @@
               return 0;
   
            Map metadata = new HashMap();
  -         String listenerId = (String)listeners.get(callbackHandler);
            if(listenerId != null)
            {
               metadata.put(LISTENER_ID_KEY, listenerId);
            }
            else
            {
  -            log.error("Could not find listener id for InvokerCallbackHandler (" + callbackHandler + "), please verify handler has been registered as listener.");
  +            throw new Exception("Could not find listener id for InvokerCallbackHandler (" + callbackHandler
  +                              + "), please verify handler has been registered as listener.");
            }
   
  -         Object[] callbackIdArray = callbackIds.toArray();
  -         InternalInvocation invocation = new InternalInvocation(InternalInvocation.ACKNOWLEDGECALLBACK, callbackIdArray);
  +         Object[] params = new Object[] {callbackIds, responseList};
  +         InternalInvocation invocation = new InternalInvocation(InternalInvocation.ACKNOWLEDGECALLBACK, params);
            invoke(invocation, metadata);
  -         return callbackIdArray.length;
  +         return callbackIds.size();
         }
         else
         {
  
  
  



More information about the jboss-cvs-commits mailing list