Class InboundConnectionCacheImpl<C extends Connection>
- java.lang.Object
-
- com.sun.corba.ee.impl.transport.connection.ConnectionCacheBase<C>
-
- com.sun.corba.ee.impl.transport.connection.ConnectionCacheNonBlockingBase<C>
-
- com.sun.corba.ee.impl.transport.connection.InboundConnectionCacheImpl<C>
-
- All Implemented Interfaces:
ConnectionCache<C>
,InboundConnectionCache<C>
public final class InboundConnectionCacheImpl<C extends Connection> extends ConnectionCacheNonBlockingBase<C> implements InboundConnectionCache<C>
Manage connections that are initiated from another VM. Connections are reclaimed when they are no longer in use and there are too many connections open.A connection basically represents some sort of communication channel, but few requirements are placed on the connection. Basically the ability to close a connection is required in order for reclamation to work.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
InboundConnectionCacheImpl.ConnectionState<C extends Connection>
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.ConcurrentMap<C,InboundConnectionCacheImpl.ConnectionState<C>>
connectionMap
-
Fields inherited from class com.sun.corba.ee.impl.transport.connection.ConnectionCacheNonBlockingBase
totalBusy, totalIdle
-
Fields inherited from class com.sun.corba.ee.impl.transport.connection.ConnectionCacheBase
reclaimableConnections
-
-
Constructor Summary
Constructors Constructor Description InboundConnectionCacheImpl(java.lang.String cacheType, int highWaterMark, int numberToReclaim, long ttl)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close(C conn)
Close a connection, regardless of whether the connection is busy or not.private void
display(java.lang.String m, java.lang.Object value)
private InboundConnectionCacheImpl.ConnectionState<C>
getConnectionState(C conn)
private void
msg(java.lang.String m)
void
requestProcessed(C conn, int numResponsesExpected)
Indicate that request processing has been completed for a request received on conn.void
requestReceived(C conn)
Mark a connection as busy because a request is being processed on the connection.void
responseSent(C conn)
Decrement the number of expected responses.protected java.lang.String
thisClassName()
-
Methods inherited from class com.sun.corba.ee.impl.transport.connection.ConnectionCacheNonBlockingBase
numberOfBusyConnections, numberOfConnections, numberOfIdleConnections, numberOfReclaimableConnections
-
Methods inherited from class com.sun.corba.ee.impl.transport.connection.ConnectionCacheBase
getCacheType, highWaterMark, numberToReclaim, reclaim, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.sun.corba.ee.spi.transport.connection.ConnectionCache
getCacheType, highWaterMark, numberOfBusyConnections, numberOfConnections, numberOfIdleConnections, numberOfReclaimableConnections, numberToReclaim
-
-
-
-
Field Detail
-
connectionMap
private final java.util.concurrent.ConcurrentMap<C extends Connection,InboundConnectionCacheImpl.ConnectionState<C extends Connection>> connectionMap
-
-
Method Detail
-
thisClassName
protected java.lang.String thisClassName()
- Specified by:
thisClassName
in classConnectionCacheBase<C extends Connection>
-
requestReceived
public void requestReceived(C conn)
Description copied from interface:InboundConnectionCache
Mark a connection as busy because a request is being processed on the connection. The connection may or may not be previously known to the cache when this method is called. Busy connections cannot be reclaimed. This provides an early indication that a Connection is in use, before we know how many responses still need to be sent on the Connection for this request. This reduces the likelyhood of reclaiming a connection on which we are processing a request.Note that this problem is inherent in a distributed system. We could in any case reclaim a connection AFTER a client has sent a request but BEFORE the request is received. Note that AFTER and BEFORE refer to global time which does not really exist in a distributed system (or at least we want to pretend it is not available). XXX Should we age out connections? This would require actual time stamps, rather than just an LRU queue.
- Specified by:
requestReceived
in interfaceInboundConnectionCache<C extends Connection>
- Parameters:
conn
- connection to mark as busy
-
msg
@InfoMethod private void msg(java.lang.String m)
-
display
@InfoMethod private void display(java.lang.String m, java.lang.Object value)
-
requestProcessed
public void requestProcessed(C conn, int numResponsesExpected)
Description copied from interface:InboundConnectionCache
Indicate that request processing has been completed for a request received on conn. This indicates that a Connection that received a request as indicated in a previous call to requestReceived has completed request processing for that request. Responses may still need to be sent. Some number of responses (usually 0 or 1) may be expected ON THE SAME CONNECTION even for an idle connection. We maintain a count of the number of outstanding responses we expect for protocols that return the response on the same connection on which the request was received. This is necessary to prevent reclamation of a Connection that is idle, but still needed to send responses to old requests.- Specified by:
requestProcessed
in interfaceInboundConnectionCache<C extends Connection>
- Parameters:
conn
- connection to mark as completednumResponsesExpected
- responses expected
-
responseSent
public void responseSent(C conn)
Decrement the number of expected responses. When a connection is idle and has no expected responses, it can be reclaimed.- Specified by:
responseSent
in interfaceInboundConnectionCache<C extends Connection>
- Parameters:
conn
- connection that response has been sent on
-
close
public void close(C conn)
Close a connection, regardless of whether the connection is busy or not.- Specified by:
close
in interfaceConnectionCache<C extends Connection>
- Parameters:
conn
- connection to close
-
getConnectionState
private InboundConnectionCacheImpl.ConnectionState<C> getConnectionState(C conn)
-
-