org.apache.mina.core.polling
Class AbstractPollingIoAcceptor<T extends AbstractIoSession,H>

java.lang.Object
  extended by org.apache.mina.core.service.AbstractIoService
      extended by org.apache.mina.core.service.AbstractIoAcceptor
          extended by org.apache.mina.core.polling.AbstractPollingIoAcceptor<T,H>
All Implemented Interfaces:
IoAcceptor, IoService
Direct Known Subclasses:
AprSocketAcceptor, NioSocketAcceptor

public abstract class AbstractPollingIoAcceptor<T extends AbstractIoSession,H>
extends AbstractIoAcceptor

A base class for implementing transport using a polling strategy. The underlying sockets will be checked in an active loop and woke up when an socket needed to be processed. This class handle the logic behind binding, accepting and disposing the server sockets. An Executor will be used for running client accepting and an AbstractPollingIoProcessor will be used for processing client I/O operations like reading, writing and closing. All the low level methods for binding, accepting, closing need to be provided by the subclassing implementation.

Version:
$Rev: 678335 $, $Date: 2008-06-26 17:58:30 +0200 (jeu, 26 jun 2008) $
Author:
The Apache MINA Project (dev@mina.apache.org)
See Also:
for a example of implementation

Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.mina.core.service.AbstractIoAcceptor
AbstractIoAcceptor.AcceptorOperationFuture
 
Nested classes/interfaces inherited from class org.apache.mina.core.service.AbstractIoService
AbstractIoService.ServiceOperationFuture
 
Field Summary
 
Fields inherited from class org.apache.mina.core.service.AbstractIoAcceptor
bindLock
 
Fields inherited from class org.apache.mina.core.service.AbstractIoService
disposalLock
 
Constructor Summary
protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Class<? extends IoProcessor<T>> processorClass)
          Constructor for AbstractPollingIoAcceptor.
protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Class<? extends IoProcessor<T>> processorClass, int processorCount)
          Constructor for AbstractPollingIoAcceptor.
protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Executor executor, IoProcessor<T> processor)
          Constructor for AbstractPollingIoAcceptor.
protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, IoProcessor<T> processor)
          Constructor for AbstractPollingIoAcceptor.
 
Method Summary
protected abstract  T accept(IoProcessor<T> processor, H handle)
          Accept a client connection for a server socket and return a new IoSession associated with the given IoProcessor
protected  Set<SocketAddress> bind0(List<? extends SocketAddress> localAddresses)
          Implement this method to perform the actual bind operation.
protected abstract  void close(H handle)
          Close a server socket.
protected abstract  void destroy()
          Destroy the polling system, will be called when this IoAcceptor implementation will be disposed.
protected  IoFuture dispose0()
          Implement this method to release any acquired resources.
protected abstract  void init()
          Initialize the polling system, will be called at construction time.
protected abstract  SocketAddress localAddress(H handle)
          Get the local address associated with a given server socket
 IoSession newSession(SocketAddress remoteAddress, SocketAddress localAddress)
          (Optional) Returns an IoSession that is bound to the specified localAddress and the specified remoteAddress which reuses the local address that is already bound by this service.
protected abstract  H open(SocketAddress localAddress)
          Open a server socket for a given local address.
protected abstract  boolean select()
          Check for acceptable connections, interrupt when at least a server is ready for accepting.
protected abstract  Iterator<H> selectedHandles()
          Iterator for the set of server sockets found with acceptable incoming connections during the last select() call.
protected  void unbind0(List<? extends SocketAddress> localAddresses)
          Implement this method to perform the actual unbind operation.
protected abstract  void wakeup()
          Interrupt the select() method.
 
Methods inherited from class org.apache.mina.core.service.AbstractIoAcceptor
bind, bind, bind, bind, getDefaultLocalAddress, getDefaultLocalAddresses, getLocalAddress, getLocalAddresses, isCloseOnDeactivation, setCloseOnDeactivation, setDefaultLocalAddress, setDefaultLocalAddresses, setDefaultLocalAddresses, setDefaultLocalAddresses, toString, unbind, unbind, unbind, unbind
 
Methods inherited from class org.apache.mina.core.service.AbstractIoService
addListener, broadcast, dispose, executeWorker, executeWorker, finishSessionInitialization, finishSessionInitialization0, getActivationTime, getFilterChain, getFilterChainBuilder, getHandler, getIdleState, getIdleStatusChecker, getListeners, getManagedSessionCount, getManagedSessions, getScheduledWriteBytes, getScheduledWriteMessages, getSessionConfig, getSessionDataStructureFactory, getStatistics, isActive, isDisposed, isDisposing, notifyIdleness, removeListener, setFilterChainBuilder, setHandler, setSessionDataStructureFactory
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.apache.mina.core.service.IoService
addListener, broadcast, dispose, getActivationTime, getFilterChain, getFilterChainBuilder, getHandler, getIdleState, getManagedSessionCount, getManagedSessions, getScheduledWriteBytes, getScheduledWriteMessages, getSessionConfig, getSessionDataStructureFactory, getStatistics, getTransportMetadata, isActive, isDisposed, isDisposing, removeListener, setFilterChainBuilder, setHandler, setSessionDataStructureFactory
 

Constructor Detail

AbstractPollingIoAcceptor

protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig,
                                    Class<? extends IoProcessor<T>> processorClass)
Constructor for AbstractPollingIoAcceptor. You need to provide a default session configuration, a class of IoProcessor which will be instantiated in a SimpleIoProcessorPool for better scaling in multiprocessor systems. The default pool size will be used.

Parameters:
sessionConfig - the default configuration for the managed IoSession
processorClass - a Class of IoProcessor for the associated IoSession type.
See Also:
SimpleIoProcessorPool

AbstractPollingIoAcceptor

protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig,
                                    Class<? extends IoProcessor<T>> processorClass,
                                    int processorCount)
Constructor for AbstractPollingIoAcceptor. You need to provide a default session configuration, a class of IoProcessor which will be instantiated in a SimpleIoProcessorPool for using multiple thread for better scaling in multiprocessor systems.

Parameters:
sessionConfig - the default configuration for the managed IoSession
processorClass - a Class of IoProcessor for the associated IoSession type.
processorCount - the amount of processor to instantiate for the pool
See Also:
SimpleIoProcessorPool

AbstractPollingIoAcceptor

protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig,
                                    IoProcessor<T> processor)
Constructor for AbstractPollingIoAcceptor. You need to provide a default session configuration, a default Executor will be created using Executors.newCachedThreadPool(). AbstractIoService#AbstractIoService(IoSessionConfig, Executor)

Parameters:
sessionConfig - the default configuration for the managed IoSession
processor - the IoProcessor for processing the IoSession of this transport, triggering events to the bound IoHandler and processing the chains of IoFilter

AbstractPollingIoAcceptor

protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig,
                                    Executor executor,
                                    IoProcessor<T> processor)
Constructor for AbstractPollingIoAcceptor. You need to provide a default session configuration and an Executor for handling I/O events. If null Executor is provided, a default one will be created using Executors.newCachedThreadPool(). AbstractIoService#AbstractIoService(IoSessionConfig, Executor)

Parameters:
sessionConfig - the default configuration for the managed IoSession
executor - the Executor used for handling asynchronous execution of I/O events. Can be null.
processor - the IoProcessor for processing the IoSession of this transport, triggering events to the bound IoHandler and processing the chains of IoFilter
Method Detail

init

protected abstract void init()
                      throws Exception
Initialize the polling system, will be called at construction time.

Throws:
Exception - any exception thrown by the underlying system calls

destroy

protected abstract void destroy()
                         throws Exception
Destroy the polling system, will be called when this IoAcceptor implementation will be disposed.

Throws:
Exception - any exception thrown by the underlying systems calls

select

protected abstract boolean select()
                           throws Exception
Check for acceptable connections, interrupt when at least a server is ready for accepting. All the ready server socket descriptors need to be returned by selectedHandles()

Returns:
true if one server socket have got incoming client
Throws:
Exception - any exception thrown by the underlying systems calls

wakeup

protected abstract void wakeup()
Interrupt the select() method. Used when the poll set need to be modified.


selectedHandles

protected abstract Iterator<H> selectedHandles()
Iterator for the set of server sockets found with acceptable incoming connections during the last select() call.

Returns:
the list of server handles ready

open

protected abstract H open(SocketAddress localAddress)
                   throws Exception
Open a server socket for a given local address.

Parameters:
localAddress - the associated local address
Returns:
the opened server socket
Throws:
Exception - any exception thrown by the underlying systems calls

localAddress

protected abstract SocketAddress localAddress(H handle)
                                       throws Exception
Get the local address associated with a given server socket

Parameters:
handle - the server socket
Returns:
the local SocketAddress associated with this handle
Throws:
Exception - any exception thrown by the underlying systems calls

accept

protected abstract T accept(IoProcessor<T> processor,
                            H handle)
                                               throws Exception
Accept a client connection for a server socket and return a new IoSession associated with the given IoProcessor

Parameters:
processor - the IoProcessor to associate with the IoSession
handle - the server handle
Returns:
the created IoSession
Throws:
Exception - any exception thrown by the underlying systems calls

close

protected abstract void close(H handle)
                       throws Exception
Close a server socket.

Parameters:
handle - the server socket
Throws:
Exception - any exception thrown by the underlying systems calls

dispose0

protected IoFuture dispose0()
                     throws Exception
Implement this method to release any acquired resources. This method is invoked only once by AbstractIoService.dispose().

Specified by:
dispose0 in class AbstractIoService
Throws:
Exception

bind0

protected final Set<SocketAddress> bind0(List<? extends SocketAddress> localAddresses)
                                  throws Exception
Implement this method to perform the actual bind operation.

Specified by:
bind0 in class AbstractIoAcceptor
Returns:
the Set of the local addresses which is bound actually
Throws:
Exception

unbind0

protected final void unbind0(List<? extends SocketAddress> localAddresses)
                      throws Exception
Implement this method to perform the actual unbind operation.

Specified by:
unbind0 in class AbstractIoAcceptor
Throws:
Exception

newSession

public final IoSession newSession(SocketAddress remoteAddress,
                                  SocketAddress localAddress)
(Optional) Returns an IoSession that is bound to the specified localAddress and the specified remoteAddress which reuses the local address that is already bound by this service.

This operation is optional. Please throw UnsupportedOperationException if the transport type doesn't support this operation. This operation is usually implemented for connectionless transport types.



Copyright © 2004-2008 Apache MINA Project. All Rights Reserved.