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

Ron Sigal ron_sigal at yahoo.com
Wed Nov 15 23:03:49 EST 2006


  User: rsigal  
  Date: 06/11/15 23:03:49

  Modified:    src/main/org/jboss/remoting  Client.java
  Log:
  JBREM-605: Callback acknowledgements can now return a response.
  
  Revision  Changes    Path
  1.55      +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.54
  retrieving revision 1.55
  diff -u -b -r1.54 -r1.55
  --- Client.java	9 Nov 2006 21:35:23 -0000	1.54
  +++ Client.java	16 Nov 2006 04:03:49 -0000	1.55
  @@ -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.54 $
  + * @version $Revision: 1.55 $
    */
   public class Client implements Externalizable
   {
  @@ -1203,14 +1203,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;
  @@ -1218,10 +1249,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)
               {
  @@ -1229,6 +1275,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
                  {
  @@ -1245,20 +1305,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