[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