public abstract class SelectorManager extends ContainerLifeCycle implements Dumpable
SelectorManager
manages a number of ManagedSelector
s that
simplify the non-blocking primitives provided by the JVM via the java.nio
package.
SelectorManager
subclasses implement methods to return protocol-specific
EndPoint
s and Connection
s.
AbstractLifeCycle.AbstractLifeCycleListener
Container.InheritedListener, Container.Listener
LifeCycle.Listener
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_CONNECT_TIMEOUT |
protected static Logger |
LOG |
FAILED, RUNNING, STARTED, STARTING, STOP_ON_FAILURE, STOPPED, STOPPING
Modifier | Constructor and Description |
---|---|
protected |
SelectorManager(Executor executor,
Scheduler scheduler) |
protected |
SelectorManager(Executor executor,
Scheduler scheduler,
int selectors) |
Modifier and Type | Method and Description |
---|---|
void |
accept(SelectableChannel channel) |
void |
accept(SelectableChannel channel,
Object attachment)
Registers a channel to perform non-blocking read/write operations.
|
protected void |
accepted(SelectableChannel channel)
Callback method when a channel is accepted from the
ServerSocketChannel
passed to acceptor(SelectableChannel) . |
void |
acceptor(SelectableChannel server)
Registers a server channel for accept operations.
|
void |
connect(SelectableChannel channel,
Object attachment)
Registers a channel to perform a non-blocking connect.
|
void |
connectionClosed(Connection connection)
Callback method invoked when a connection is closed.
|
protected void |
connectionFailed(SelectableChannel channel,
Throwable ex,
Object attachment)
Callback method invoked when a non-blocking connect cannot be completed.
|
void |
connectionOpened(Connection connection)
Callback method invoked when a connection is opened.
|
protected SelectableChannel |
doAccept(SelectableChannel server) |
protected boolean |
doFinishConnect(SelectableChannel channel) |
protected void |
doStart()
Starts the managed lifecycle beans in the order they were added.
|
protected void |
doStop()
Stops the managed lifecycle beans in the reverse order they were added.
|
protected void |
endPointClosed(EndPoint endpoint)
Callback method invoked when an endpoint is closed.
|
protected void |
endPointOpened(EndPoint endpoint)
Callback method invoked when an endpoint is opened.
|
protected void |
execute(Runnable task)
Executes the given task in a different thread.
|
long |
getConnectTimeout()
Get the connect timeout
|
Executor |
getExecutor() |
Scheduler |
getScheduler() |
int |
getSelectorCount() |
protected boolean |
isConnectionPending(SelectableChannel channel) |
abstract Connection |
newConnection(SelectableChannel channel,
EndPoint endpoint,
Object attachment)
Factory method to create
Connection . |
protected abstract EndPoint |
newEndPoint(SelectableChannel channel,
ManagedSelector selector,
SelectionKey selectionKey)
Factory method to create
EndPoint . |
protected Selector |
newSelector() |
protected ManagedSelector |
newSelector(int id)
Factory method for
ManagedSelector . |
void |
setConnectTimeout(long milliseconds)
Set the connect timeout (in milliseconds)
|
addBean, addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpStdErr, dumpThis, getBean, getBeans, getBeans, isManaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
public static final int DEFAULT_CONNECT_TIMEOUT
protected static final Logger LOG
public Executor getExecutor()
public Scheduler getScheduler()
public long getConnectTimeout()
public void setConnectTimeout(long milliseconds)
milliseconds
- the number of milliseconds for the timeoutprotected void execute(Runnable task)
task
- the task to executepublic int getSelectorCount()
public void connect(SelectableChannel channel, Object attachment)
Registers a channel to perform a non-blocking connect.
The channel must be set in non-blocking mode, SocketChannel.connect(SocketAddress)
must be called prior to calling this method, and the connect operation must not be completed
(the return value of SocketChannel.connect(SocketAddress)
must be false).
channel
- the channel to registerattachment
- the attachment objectaccept(SelectableChannel, Object)
public void accept(SelectableChannel channel)
channel
- the channel to acceptaccept(SelectableChannel, Object)
public void accept(SelectableChannel channel, Object attachment)
Registers a channel to perform non-blocking read/write operations.
This method is called just after a channel has been accepted by ServerSocketChannel.accept()
,
or just after having performed a blocking connect via Socket.connect(SocketAddress, int)
, or
just after a non-blocking connect via SocketChannel.connect(SocketAddress)
that completed
successfully.
channel
- the channel to registerattachment
- the attachment objectpublic void acceptor(SelectableChannel server)
Registers a server channel for accept operations.
When a SocketChannel
is accepted from the given ServerSocketChannel
then the accepted(SelectableChannel)
method is called, which must be
overridden by a derivation of this class to handle the accepted channel
server
- the server channel to registerprotected void accepted(SelectableChannel channel) throws IOException
ServerSocketChannel
passed to acceptor(SelectableChannel)
.
The default impl throws an UnsupportedOperationException
, so it must
be overridden by subclasses if a server channel is provided.channel
- theIOException
- if unable to accept channelprotected void doStart() throws Exception
ContainerLifeCycle
doStart
in class ContainerLifeCycle
Exception
protected ManagedSelector newSelector(int id)
Factory method for ManagedSelector
.
id
- an identifier for the to create
ManagedSelector
protected void doStop() throws Exception
ContainerLifeCycle
doStop
in class ContainerLifeCycle
Exception
protected void endPointOpened(EndPoint endpoint)
Callback method invoked when an endpoint is opened.
endpoint
- the endpoint being openedprotected void endPointClosed(EndPoint endpoint)
Callback method invoked when an endpoint is closed.
endpoint
- the endpoint being closedpublic void connectionOpened(Connection connection)
Callback method invoked when a connection is opened.
connection
- the connection just openedpublic void connectionClosed(Connection connection)
Callback method invoked when a connection is closed.
connection
- the connection just closedprotected boolean doFinishConnect(SelectableChannel channel) throws IOException
IOException
protected boolean isConnectionPending(SelectableChannel channel)
protected SelectableChannel doAccept(SelectableChannel server) throws IOException
IOException
protected void connectionFailed(SelectableChannel channel, Throwable ex, Object attachment)
Callback method invoked when a non-blocking connect cannot be completed.
By default it just logs with level warning.
channel
- the channel that attempted the connectex
- the exception that caused the connect to failattachment
- the attachment object associated at registrationprotected Selector newSelector() throws IOException
IOException
protected abstract EndPoint newEndPoint(SelectableChannel channel, ManagedSelector selector, SelectionKey selectionKey) throws IOException
Factory method to create EndPoint
.
This method is invoked as a result of the registration of a channel via connect(SelectableChannel, Object)
or accept(SelectableChannel)
.
channel
- the channel associated to the endpointselector
- the selector the channel is registered toselectionKey
- the selection keyIOException
- if the endPoint cannot be creatednewConnection(SelectableChannel, EndPoint, Object)
public abstract Connection newConnection(SelectableChannel channel, EndPoint endpoint, Object attachment) throws IOException
Factory method to create Connection
.
channel
- the channel associated to the connectionendpoint
- the endpointattachment
- the attachmentIOException
- if unable to create new connectionCopyright © 1995–2017 Webtide. All rights reserved.