[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting/transport/bisocket ...
Ron Sigal
ron_sigal at yahoo.com
Tue Feb 13 06:36:35 EST 2007
User: rsigal
Date: 07/02/13 06:36:35
Modified: src/main/org/jboss/remoting/transport/bisocket Tag:
remoting_2_x BisocketClientInvoker.java
Log:
JBREM-650: (1) Callback invokers don't share client pools. (2) Uses isCallbackInvoker instead of listenerId == null.
Revision Changes Path
No revision
No revision
1.1.2.5 +30 -9 JBossRemoting/src/main/org/jboss/remoting/transport/bisocket/BisocketClientInvoker.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: BisocketClientInvoker.java
===================================================================
RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/transport/bisocket/BisocketClientInvoker.java,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -u -b -r1.1.2.4 -r1.1.2.5
--- BisocketClientInvoker.java 18 Jan 2007 21:31:42 -0000 1.1.2.4
+++ BisocketClientInvoker.java 13 Feb 2007 11:36:35 -0000 1.1.2.5
@@ -29,6 +29,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import java.util.Timer;
@@ -44,6 +45,7 @@
import org.jboss.remoting.marshal.UnMarshaller;
import org.jboss.remoting.transport.BidirectionalClientInvoker;
import org.jboss.remoting.transport.socket.SocketClientInvoker;
+import org.jboss.remoting.transport.socket.SocketWrapper;
/**
* The bisocket transport, an extension of the socket transport, is designed to allow
@@ -79,7 +81,7 @@
private OutputStream controlOutputStream;
private Object controlLock = new Object();
private PingTimerTask pingTimerTask;
- private boolean isCallbackInvoker;
+ protected boolean isCallbackInvoker;
/**
@@ -184,15 +186,18 @@
protected void handleConnect() throws ConnectionFailedException
{
- super.handleConnect();
-
// Callback client on server side.
- if (listenerId != null)
+ if (isCallbackInvoker)
{
+ // Bisocket callback client invoker doesn't share socket pools because of the danger
+ // that two distinct callback servers could have the same "artifical" port.
+ pool = new LinkedList();
return;
}
// Client on client side.
+ super.handleConnect();
+
try
{
secondaryLocator = getSecondaryLocator();
@@ -207,13 +212,28 @@
protected void handleDisconnect()
{
- super.handleDisconnect();
if (listenerId != null)
{
if (isCallbackInvoker)
+ {
listenerIdToCallbackClientInvokerMap.remove(listenerId);
+ for (Iterator it = pool.iterator(); it.hasNext();)
+ {
+ SocketWrapper socketWrapper = (SocketWrapper) it.next();
+ try
+ {
+ socketWrapper.close();
+ }
+ catch (Exception ignored)
+ {
+ }
+ }
+ }
else
+ {
listenerIdToClientInvokerMap.remove(listenerId);
+ super.handleDisconnect();
+ }
listenerIdToSocketsMap.remove(listenerId);
if (pingTimerTask != null)
@@ -236,7 +256,7 @@
if (InternalInvocation.ADDLISTENER.equals(ii.getMethodName()))
{
Map requestPayload = ir.getRequestPayload();
- String listenerId = (String) requestPayload.get(Client.LISTENER_ID_KEY);
+ listenerId = (String) requestPayload.get(Client.LISTENER_ID_KEY);
listenerIdToClientInvokerMap.put(listenerId, this);
BisocketServerInvoker callbackServerInvoker;
callbackServerInvoker = BisocketServerInvoker.getBisocketServerInvoker(listenerId);
@@ -251,7 +271,7 @@
protected Socket createSocket(String address, int port) throws IOException
{
- if (listenerId == null)
+ if (!isCallbackInvoker)
return super.createSocket(address, port);
Set sockets = null;
@@ -293,7 +313,7 @@
controlSocket = (Socket) it.next();
it.remove();
controlOutputStream = controlSocket.getOutputStream();
- log.debug("got control socket");
+ log.debug("got control socket: " + controlSocket);
pingTimerTask = new PingTimerTask();
if (timer == null)
{
@@ -332,7 +352,7 @@
Iterator it = sockets.iterator();
Socket socket = (Socket) it.next();
it.remove();
- log.debug("socket found");
+ log.debug("found socket: " + socket);
return socket;
}
}
@@ -363,6 +383,7 @@
{
InternalInvocation ii = new InternalInvocation(Bisocket.GET_SECONDARY_INVOKER_LOCATOR, null);
InvocationRequest r = new InvocationRequest(null, null, ii, null, null, null);
+ log.debug("getting secondary locator");
Object o = invoke(r);
log.debug("secondary locator: " + o);
secondaryLocator = (InvokerLocator) o;
More information about the jboss-cvs-commits
mailing list