public abstract class PipelineConnectionBase extends ConnectionBase
PipelineConnectionBase#queueRequest(Command, byte[]) method
in their implementation of the synchronous Connection#serviceRequest(Command, byte[])
method and block on Future.get() to realize the blocking semantics
and results required.| Modifier and Type | Class and Description |
|---|---|
class |
PipelineConnectionBase.ResponseHandler
Provides the response processing logic as a
Runnable. |
Connection.Event, Connection.Factory, Connection.Flag, Connection.Listener, Connection.Modality, Connection.Property, Connection.Socket, Connection.State| Modifier and Type | Field and Description |
|---|---|
private java.util.concurrent.CountDownLatch |
connectionEstablished
counted down on notifyConnect
|
private java.util.concurrent.atomic.AtomicBoolean |
isActive
used by the Pipeline to indicate its state.
|
private boolean |
pendingQuit
flag (default false) indicates if a pending QUIT command is being processed.
|
(package private) java.util.concurrent.BlockingQueue<PendingRequest> |
pendingResponseQueue |
private PipelineConnectionBase.ResponseHandler |
respHandler |
private java.lang.Thread |
respHandlerThread |
private java.lang.Object |
serviceLock
synchronization object used to serialize request queuing
|
spec, thrdProtocol| Modifier | Constructor and Description |
|---|---|
protected |
PipelineConnectionBase(ConnectionSpec spec) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
initializeComponents()
Extension point: child classes may override for additional components:
|
protected java.io.InputStream |
newInputStream(java.io.InputStream socketInputStream)
Just make sure its a
FastBufferedInputStream. |
protected Protocol |
newProtocolHandler()
Pipeline must use a concurrent protocol handler.
|
protected void |
notifyConnected()
Extension point -- callback on this method when
ConnectionBase has connected to server. |
protected void |
notifyDisconnected()
Extension point -- callback on this method when
ConnectionBase has disconnected from server. |
(package private) void |
onResponseHandlerError(ClientRuntimeException cre,
PendingRequest request) |
java.util.concurrent.Future<Response> |
queueRequest(Command cmd,
byte[]... args)
This is a pseudo asynchronous method.
|
addListener, connect, disconnect, getInputStream, getOutputStream, getProtocolHandler, getSpec, initializeAsyncConnection, initializeOnConnect, initializeSocketStreams, initializeSyncConnection, isConnected, newOutputStream, notifyFaulted, notifyListeners, notifyShuttingDown, onConnectionFault, reconnect, removeListener, serviceRequest, shutdown, toStringprivate PipelineConnectionBase.ResponseHandler respHandler
private java.lang.Thread respHandlerThread
java.util.concurrent.BlockingQueue<PendingRequest> pendingResponseQueue
private java.lang.Object serviceLock
private boolean pendingQuit
private java.util.concurrent.atomic.AtomicBoolean isActive
private java.util.concurrent.CountDownLatch connectionEstablished
protected PipelineConnectionBase(ConnectionSpec spec) throws ClientRuntimeException
spec - ClientRuntimeExceptionprotected void initializeComponents()
ConnectionBase
In the extended class:
protected void initializeComponents() {
super.initializeComponents();
// my components here ...
//
}
initializeComponents in class ConnectionBaseprotected void notifyConnected()
ConnectionBaseConnectionBase has connected to server.
It is important to note that the extension must call super.notifyConnected if reliable service (using
heartbeats) is required!.notifyConnected in class ConnectionBaseprotected void notifyDisconnected()
ConnectionBaseConnectionBase has disconnected from server.
It is important to note that the extension must call super.notifyDisconnected if reliable service (using
heartbeats) is required!.notifyDisconnected in class ConnectionBaseprotected Protocol newProtocolHandler()
newProtocolHandler in class ConnectionBaseConnectionBase.newProtocolHandler()protected final java.io.InputStream newInputStream(java.io.InputStream socketInputStream)
throws java.lang.IllegalArgumentException
FastBufferedInputStream.newInputStream in class ConnectionBasejava.lang.IllegalArgumentExceptionpublic final java.util.concurrent.Future<Response> queueRequest(Command cmd, byte[]... args) throws ClientRuntimeException, ProviderException
Other item of note is that once a QUIT request has been queued, no further requests are accepted and a ClientRuntimeException is thrown.
queueRequest in interface ConnectionqueueRequest in class ConnectionBaseFuture Response.ClientRuntimeExceptionProviderExceptionConnectionBase.queueRequest(org.jredis.protocol.Command, byte[][])void onResponseHandlerError(ClientRuntimeException cre, PendingRequest request)