[jboss-remoting-commits] JBoss Remoting SVN: r5062 - remoting2/branches/2.2/src/main/org/jboss/remoting.

jboss-remoting-commits at lists.jboss.org jboss-remoting-commits at lists.jboss.org
Sat Apr 18 02:34:54 EDT 2009


Author: ron.sigal at jboss.com
Date: 2009-04-18 02:34:54 -0400 (Sat, 18 Apr 2009)
New Revision: 5062

Modified:
   remoting2/branches/2.2/src/main/org/jboss/remoting/ServerInvoker.java
Log:
JBREM-1119: (1) Made removeCallbackHandler() public; (2) added shutdownCallbackHandler().

Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/ServerInvoker.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/ServerInvoker.java	2009-04-18 06:34:10 UTC (rev 5061)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/ServerInvoker.java	2009-04-18 06:34:54 UTC (rev 5062)
@@ -825,28 +825,7 @@
             //then it will just use that without having to do a lookup or HashMap iteration over
             //values
             
-            ServerInvocationHandler handler = null;
-                         
-            if (singleHandler != null)
-            {
-               handler = singleHandler;
-            }
-            else
-            {               
-               if (subsystem != null)
-               {
-                  handler = (ServerInvocationHandler)handlers.get(subsystem.toUpperCase());
-               }
-               else
-               {
-                  // subsystem not specified, so will hope for a default one being set
-                  if (!handlers.isEmpty())
-                  {
-                     if (trace) { log.trace(this + " handling invocation with no subsystem explicitely specified, using the default handler"); }
-                     handler = (ServerInvocationHandler)handlers.values().iterator().next();
-                  }
-               }
-            }
+            ServerInvocationHandler handler = findInvocationHandler(subsystem);
 
             if (param instanceof InternalInvocation)
             {
@@ -1506,6 +1485,14 @@
          ServerInvokerCallbackHandler callbackHandler = removeCallbackHandler(invocation);
          if(callbackHandler != null)
          {
+            if (registerCallbackListeners)
+            {
+//               connectionNotifier.removeListener(callbackHandler);
+               removeConnectionListener(callbackHandler);
+            }
+            
+            callbackHandler.destroy();
+            
             if(handler == null)
             {
                throw new InvalidConfigurationException(
@@ -1513,15 +1500,10 @@
                   "registered.  Please add via xml configuration or via the Connector's " +
                   "addInvocationHandler() method.");
             }
-            if (registerCallbackListeners)
-            {
-               connectionNotifier.removeListener(callbackHandler);
-            }
+            
             handler.removeListener(callbackHandler);
 
             if(trace) { log.trace("ServerInvoker (" + this + ") removing server callback handler " + callbackHandler + "."); }
-
-            callbackHandler.destroy();
          }
          else
          {
@@ -1550,7 +1532,7 @@
          // the only elements should be the callback handler and possibly the callback handle object
          if(params == null || params.length < 0 || params.length > 3)
          {
-            log.error("Recieved addClientListener InternalInvocation, but getParameters() " +
+            log.debug("Received addClientListener InternalInvocation, but getParameters() " +
                       "returned: " + params);
             throw new RuntimeException(
                "InvokerCallbackHandler and callback handle object (optional) must be supplied as " +
@@ -1636,7 +1618,34 @@
       }
       return result;
    }
+  
+   protected ServerInvocationHandler findInvocationHandler(String subsystem)
+   {
+      ServerInvocationHandler handler = null;
 
+      if (singleHandler != null)
+      {
+         handler = singleHandler;
+      }
+      else
+      {               
+         if (subsystem != null)
+         {
+            handler = (ServerInvocationHandler)handlers.get(subsystem.toUpperCase());
+         }
+         else
+         {
+            // subsystem not specified, so will hope for a default one being set
+            if (!handlers.isEmpty())
+            {
+               if (trace) { log.trace(this + " handling invocation with no subsystem explicitely specified, using the default handler"); }
+               handler = (ServerInvocationHandler)handlers.values().iterator().next();
+            }
+         }
+      }
+      return handler;
+   }
+   
    /**
     * Called prior to an invocation.
     * TODO is sending in the arg appropriate?
@@ -1865,7 +1874,7 @@
       return callbackHandler;
    }
 
-   private ServerInvokerCallbackHandler removeCallbackHandler(InvocationRequest invocation)
+   public ServerInvokerCallbackHandler removeCallbackHandler(InvocationRequest invocation)
    {
       String id = ServerInvokerCallbackHandler.getId(invocation);
       ServerInvokerCallbackHandler callbackHandler = null;
@@ -1876,6 +1885,25 @@
       }
       return callbackHandler;
    }
+   
+   public void shutdownCallbackHandler(ServerInvokerCallbackHandler callbackHandler, InvocationRequest invocation)
+   {
+      removeCallbackHandler(invocation);
+      if (registerCallbackListeners)
+      {
+         removeConnectionListener(callbackHandler);
+      }
+      ServerInvocationHandler handler = findInvocationHandler(invocation.getSessionId());
+      if (handler != null)
+      {
+         handler.removeListener(callbackHandler);
+         if(trace) { log.trace(this + " removing server callback handler " + callbackHandler + "."); }
+      }
+      else
+      {
+         log.debug(this + " cannot remove " + callbackHandler + ": associated ServerInvocationHandler not longer exists");
+      }
+   }
 
    // Inner classes --------------------------------------------------------------------------------
 




More information about the jboss-remoting-commits mailing list