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

Ron Sigal ron_sigal at yahoo.com
Sun Feb 25 00:28:06 EST 2007


  User: rsigal  
  Date: 07/02/25 00:28:06

  Modified:    src/main/org/jboss/remoting  Tag: remoting_2_x Client.java
  Log:
  JBREM-598, JBREM-657: Replaced use of threads in disconnect() and removeListener() with testing disconnectTimeout == 0.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.53.2.26 +92 -117   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.25
  retrieving revision 1.53.2.26
  diff -u -b -r1.53.2.25 -r1.53.2.26
  --- Client.java	24 Feb 2007 23:14:27 -0000	1.53.2.25
  +++ Client.java	25 Feb 2007 05:28:06 -0000	1.53.2.26
  @@ -64,7 +64,7 @@
    * @author <a href="mailto:telrod at e2technologies.net">Tom Elrod</a>
    * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
    *
  - * @version $Revision: 1.53.2.25 $
  + * @version $Revision: 1.53.2.26 $
    */
   public class Client implements Externalizable
   {
  @@ -451,10 +451,6 @@
       */
      public void disconnect()
      {  
  -      Thread t = new Thread()
  -      {
  -         public void run()
  -         {
               if (invoker != null)
               {
                  // this is a noop if no lease is active
  @@ -475,11 +471,6 @@
               
               connected = false;
            }
  -      };
  -      
  -      t.setName("terminateLease");
  -      t.start();
  -   }
   
      /**
       * Get the client invoker (transport implementation).
  @@ -969,30 +960,88 @@
       * Removes callback handler as a callback listener from the server (and client in the case that
       * it was setup to receive async callbacks). See addListener().
       */
  -   public void removeListener(final InvokerCallbackHandler callbackHandler) throws Throwable
  +   public void removeListener(InvokerCallbackHandler callbackHandler) throws Throwable
      {
         if (isConnected())
         {
            if (callbackHandler != null)
            {
  -            Thread thread = new Thread()
  +            // first need to see if is push or pull callback (i.e. does have locator associated
  +            // with it)
  +            String listenerId = (String)listeners.get(callbackHandler);
  +            if(listenerId != null)
               {
  -               public void run()
  +               // have a pull callback handler
  +               Map metadata = new HashMap();
  +               metadata.put(LISTENER_ID_KEY, listenerId);
  +               invoke(new InternalInvocation(InternalInvocation.REMOVELISTENER, null), metadata);
  +
  +               // clean up callback poller if one exists
  +               CallbackPoller callbackPoller = (CallbackPoller) callbackPollers.remove(callbackHandler);
  +               if (callbackPoller != null)
  +               {
  +                  callbackPoller.stop();
  +               }
  +
  +               listeners.remove(callbackHandler);
  +            }
  +            else
  +            {
  +               // have a push callback handler
  +               List holderList = invoker.getClientLocators(sessionId, callbackHandler);
  +               if(holderList != null && holderList.size() > 0)
  +               {
  +                  for(int x = 0; x < holderList.size(); x++)
  +                  {
  +                     AbstractInvoker.CallbackLocatorHolder holder =
  +                        (AbstractInvoker.CallbackLocatorHolder)holderList.get(x);
  +                     listenerId = holder.getListenerId();
  +                     InvokerLocator locator = holder.getLocator();
  +                     Map metadata = new HashMap();
  +                     metadata.put(LISTENER_ID_KEY, listenerId);
  +                     
  +                     // If disconnectTimeout == 0, skip network i/o.
  +                     if (disconnectTimeout != 0)
                  {
  +                        if (disconnectTimeout > 0)
  +                           metadata.put(ServerInvoker.TIMEOUT, Integer.toString(disconnectTimeout));
  +                        
                     try
                     {
  -                     removeListenerInternal(callbackHandler);
  +                           // now call target server to remove listener
  +                           InternalInvocation ii =
  +                              new InternalInvocation(InternalInvocation.REMOVELISTENER, null);
  +                           
  +                           invoke(ii, metadata);
                     }
  -                  catch (Throwable throwable)
  +                        catch (Exception e)
                     {
  +                           log.warn("unable to remove remote callback handler: " + e.getMessage());
  +                        }
  +                     }
  +
  +                     // call to callback server to remove listener
  +                     Client client = new Client(locator, subsystem);
  +                     client.setSessionId(getSessionId());
  +                     client.connect();
  +                     InternalInvocation ii =
  +                        new InternalInvocation(InternalInvocation.REMOVECLIENTLISTENER,
  +                              new Object[]{callbackHandler});
                        
  -                     log.error("Unable to remove callback handler", throwable);  
  +                     client.invoke(ii, metadata);
  +                     client.disconnect();
  +                  }
                     }
                  }
  -            };
               
  -            thread.setName("removeListener");
  -            thread.start();
  +            // clean up callback server connector if one exists
  +            Connector callbackConnector = (Connector) callbackConnectors.remove(callbackHandler);
  +
  +            if (callbackConnector != null)
  +            {
  +               callbackConnector.stop();
  +               callbackConnector.destroy();
  +            }
            }
            else
            {
  @@ -1543,80 +1592,6 @@
         return listenerId;
      }
   
  -   private void removeListenerInternal(final InvokerCallbackHandler callbackHandler) throws Throwable
  -   {
  -      // first need to see if is push or pull callback (i.e. does have locator associated
  -      // with it)
  -      String listenerId = (String)listeners.get(callbackHandler);
  -      if(listenerId != null)
  -      {
  -         // have a pull callback handler
  -         Map metadata = new HashMap();
  -         metadata.put(LISTENER_ID_KEY, listenerId);
  -         invoke(new InternalInvocation(InternalInvocation.REMOVELISTENER, null), metadata);
  -         
  -         // clean up callback poller if one exists
  -         CallbackPoller callbackPoller = (CallbackPoller) callbackPollers.remove(callbackHandler);
  -         if (callbackPoller != null)
  -         {
  -            callbackPoller.stop();
  -         }
  -         
  -         listeners.remove(callbackHandler);
  -      }
  -      else
  -      {
  -         // have a push callback handler
  -         List holderList = invoker.getClientLocators(sessionId, callbackHandler);
  -         if(holderList != null && holderList.size() > 0)
  -         {
  -            for(int x = 0; x < holderList.size(); x++)
  -            {
  -               AbstractInvoker.CallbackLocatorHolder holder =
  -                  (AbstractInvoker.CallbackLocatorHolder)holderList.get(x);
  -               listenerId = holder.getListenerId();
  -               InvokerLocator locator = holder.getLocator();
  -               Map metadata = new HashMap();
  -               metadata.put(LISTENER_ID_KEY, listenerId);
  -               
  -               if (disconnectTimeout >= 0)
  -                  metadata.put(ServerInvoker.TIMEOUT, Integer.toString(disconnectTimeout));
                  
  -               try
  -               {
  -                  // now call target server to remove listener
  -                  InternalInvocation ii =
  -                     new InternalInvocation(InternalInvocation.REMOVELISTENER, null);
  -                  
  -                  invoke(ii, metadata);
  -               }
  -               catch (Exception e)
  -               {
  -                  log.warn("unable to remove remote callback handler: " + e.getMessage());
  -               }
  -               
  -               // call to callback server to remove listener
  -               Client client = new Client(locator, subsystem);
  -               client.setSessionId(getSessionId());
  -               client.connect();
  -               InternalInvocation ii =
  -                  new InternalInvocation(InternalInvocation.REMOVECLIENTLISTENER,
  -                        new Object[]{callbackHandler});
  -               
  -               client.invoke(ii, metadata);
  -               client.disconnect();
  -            }
  -         }
  -      }
  -      
  -      // clean up callback server connector if one exists
  -      Connector callbackConnector = (Connector) callbackConnectors.remove(callbackHandler);
  -      
  -      if (callbackConnector != null)
  -      {
  -         callbackConnector.stop();
  -         callbackConnector.destroy();
  -      }
  -   }
      // Inner classes --------------------------------------------------------------------------------
   }
  
  
  



More information about the jboss-cvs-commits mailing list