org.apache.tomcat.util.net
Class JIoEndpoint

java.lang.Object
  extended by org.apache.tomcat.util.net.JIoEndpoint

public class JIoEndpoint
extends java.lang.Object

Handle incoming TCP connections. This class implement a simple server model: one listener thread accepts on a socket and creates a new worker thread for each incoming connection. More advanced Endpoints will reuse the threads, use queues, etc.

Author:
James Duncan Davidson, Jason Hunter, James Todd, Costin Manolache, Gal Shachor, Yoav Shapira, Remy Maucherat

Nested Class Summary
protected  class JIoEndpoint.Acceptor
          Server socket acceptor thread.
static interface JIoEndpoint.Handler
          Bare bones interface used for socket processing.
 class JIoEndpoint.Poller
          Poller class.
protected  class JIoEndpoint.SocketEventProcessor
          This class is the equivalent of the Worker, but will simply use in an external Executor thread pool.
static class JIoEndpoint.SocketInfo
          Socket list class, used to avoid using a possibly large amount of objects with very little actual use.
 class JIoEndpoint.SocketList
          Socket list class, used to avoid using a possibly large amount of objects with very little actual use.
protected  class JIoEndpoint.SocketProcessor
          This class is the equivalent of the Worker, but will simply use in an external Executor thread pool.
 class JIoEndpoint.SocketTimeouts
          Socket list class, used to avoid using a possibly large amount of objects with very little actual use.
protected  class JIoEndpoint.Worker
           
 class JIoEndpoint.WorkerStack
           
 
Field Summary
protected  int acceptorThreadCount
          Acceptor thread count.
protected  java.net.InetAddress address
          Address for the server socket.
protected  int backlog
          Allows the server developer to specify the backlog that should be used for server sockets.
static java.lang.String CERTIFICATE_KEY
          The Request attribute key for the client certificate chain.
static java.lang.String CIPHER_SUITE_KEY
          The Request attribute key for the cipher suite.
protected  int curThreads
          Current worker threads count.
protected  int curThreadsBusy
          Current worker threads busy count.
protected  boolean daemon
          The default is true - the created threads will be in daemon mode.
protected  JIoEndpoint.Poller eventPoller
          The socket poller used for event support.
protected  java.util.concurrent.Executor executor
          External Executor based thread pool.
protected  JIoEndpoint.Handler handler
          Handling of accepted sockets.
protected  boolean initialized
          Track the initialization state of the endpoint.
protected  int keepAliveTimeout
          Keep-Alive timeout.
static java.lang.String KEY_SIZE_KEY
          The Request attribute key for the key size.
protected static org.jboss.logging.Logger log
           
protected  int maxThreads
          Maximum amount of worker threads.
protected  java.lang.String name
          Name of the thread pool, which will be used for naming child threads.
protected  boolean paused
          Will be set to true whenever the endpoint is paused.
protected  int pollerSize
          Size of the socket poller.
protected  int port
          Server socket port.
protected  boolean running
          Running state of the endpoint.
protected  int sequence
          Sequence number used to generate thread names.
protected  java.net.ServerSocket serverSocket
          Associated server socket.
protected  ServerSocketFactory serverSocketFactory
          Server socket factory.
static java.lang.String SESSION_ID_KEY
          The Request attribute key for the session id.
protected  StringManager sm
           
protected  int soLinger
          Socket linger.
protected  int soTimeout
          Socket timeout.
protected  boolean tcpNoDelay
          Socket TCP no delay.
protected  int threadPriority
          Priority of the acceptor and poller threads.
protected  JIoEndpoint.WorkerStack workers
          Available workers.
 
Constructor Summary
JIoEndpoint()
           
 
Method Summary
protected  JIoEndpoint.Worker createWorkerThread()
          Create (or allocate) and return an available processor for use in processing a specific HTTP request, if possible.
 void destroy()
          Deallocate APR memory pools, and close server socket.
 int getAcceptorThreadCount()
           
 java.net.InetAddress getAddress()
           
 int getBacklog()
           
 int getCurrentThreadCount()
           
 int getCurrentThreadsBusy()
           
 boolean getDaemon()
           
 JIoEndpoint.Poller getEventPoller()
           
 java.util.concurrent.Executor getExecutor()
           
 JIoEndpoint.Handler getHandler()
           
 int getKeepAliveTimeout()
           
 int getMaxThreads()
           
 java.lang.String getName()
           
 int getPollerSize()
           
 int getPort()
           
 ServerSocketFactory getServerSocketFactory()
           
 int getSoLinger()
           
 int getSoTimeout()
           
 boolean getTcpNoDelay()
           
 int getThreadPriority()
           
protected  JIoEndpoint.Worker getWorkerThread()
          Return a new worker thread, and block while to worker is available.
 void init()
           
 boolean isPaused()
           
 boolean isRunning()
           
protected  JIoEndpoint.Worker newWorkerThread()
          Create and return a new processor suitable for processing HTTP requests and returning the corresponding responses.
 void pause()
           
protected  boolean processSocket(java.net.Socket socket)
          Process given socket.
protected  boolean processSocket(java.net.Socket socket, SocketStatus status)
          Process given socket for an event.
protected  void recycleWorkerThread(JIoEndpoint.Worker workerThread)
          Recycle the specified Processor so that it can be used again.
 void resume()
           
 void setAcceptorThreadCount(int acceptorThreadCount)
           
 void setAddress(java.net.InetAddress address)
           
 void setBacklog(int backlog)
           
 void setDaemon(boolean b)
           
 void setExecutor(java.util.concurrent.Executor executor)
           
 void setHandler(JIoEndpoint.Handler handler)
           
 void setKeepAliveTimeout(int keepAliveTimeout)
           
 void setMaxThreads(int maxThreads)
           
 void setName(java.lang.String name)
           
 void setPollerSize(int pollerSize)
           
 void setPort(int port)
           
 void setServerSocketFactory(ServerSocketFactory factory)
           
protected  boolean setSocketOptions(java.net.Socket socket)
          Set the options for the current socket.
 void setSoLinger(int soLinger)
           
 void setSoTimeout(int soTimeout)
           
 void setTcpNoDelay(boolean tcpNoDelay)
           
 void setThreadPriority(int threadPriority)
           
 void start()
           
 void stop()
           
protected  void unlockAccept()
          Unlock the accept by using a local connection.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

protected static org.jboss.logging.Logger log

sm

protected StringManager sm

CIPHER_SUITE_KEY

public static final java.lang.String CIPHER_SUITE_KEY
The Request attribute key for the cipher suite.

See Also:
Constant Field Values

KEY_SIZE_KEY

public static final java.lang.String KEY_SIZE_KEY
The Request attribute key for the key size.

See Also:
Constant Field Values

CERTIFICATE_KEY

public static final java.lang.String CERTIFICATE_KEY
The Request attribute key for the client certificate chain.

See Also:
Constant Field Values

SESSION_ID_KEY

public static final java.lang.String SESSION_ID_KEY
The Request attribute key for the session id. This one is a Tomcat extension to the Servlet spec.

See Also:
Constant Field Values

workers

protected JIoEndpoint.WorkerStack workers
Available workers.


running

protected volatile boolean running
Running state of the endpoint.


paused

protected volatile boolean paused
Will be set to true whenever the endpoint is paused.


initialized

protected boolean initialized
Track the initialization state of the endpoint.


curThreadsBusy

protected int curThreadsBusy
Current worker threads busy count.


curThreads

protected int curThreads
Current worker threads count.


sequence

protected int sequence
Sequence number used to generate thread names.


serverSocket

protected java.net.ServerSocket serverSocket
Associated server socket.


acceptorThreadCount

protected int acceptorThreadCount
Acceptor thread count.


executor

protected java.util.concurrent.Executor executor
External Executor based thread pool.


maxThreads

protected int maxThreads
Maximum amount of worker threads.


threadPriority

protected int threadPriority
Priority of the acceptor and poller threads.


pollerSize

protected int pollerSize
Size of the socket poller.


keepAliveTimeout

protected int keepAliveTimeout
Keep-Alive timeout.


port

protected int port
Server socket port.


address

protected java.net.InetAddress address
Address for the server socket.


handler

protected JIoEndpoint.Handler handler
Handling of accepted sockets.


backlog

protected int backlog
Allows the server developer to specify the backlog that should be used for server sockets. By default, this value is 100.


tcpNoDelay

protected boolean tcpNoDelay
Socket TCP no delay.


soLinger

protected int soLinger
Socket linger.


soTimeout

protected int soTimeout
Socket timeout.


daemon

protected boolean daemon
The default is true - the created threads will be in daemon mode. If set to false, the control thread will not be daemon - and will keep the process alive.


name

protected java.lang.String name
Name of the thread pool, which will be used for naming child threads.


serverSocketFactory

protected ServerSocketFactory serverSocketFactory
Server socket factory.


eventPoller

protected JIoEndpoint.Poller eventPoller
The socket poller used for event support.

Constructor Detail

JIoEndpoint

public JIoEndpoint()
Method Detail

setAcceptorThreadCount

public void setAcceptorThreadCount(int acceptorThreadCount)

getAcceptorThreadCount

public int getAcceptorThreadCount()

setExecutor

public void setExecutor(java.util.concurrent.Executor executor)

getExecutor

public java.util.concurrent.Executor getExecutor()

setMaxThreads

public void setMaxThreads(int maxThreads)

getMaxThreads

public int getMaxThreads()

setThreadPriority

public void setThreadPriority(int threadPriority)

getThreadPriority

public int getThreadPriority()

setPollerSize

public void setPollerSize(int pollerSize)

getPollerSize

public int getPollerSize()

getKeepAliveTimeout

public int getKeepAliveTimeout()

setKeepAliveTimeout

public void setKeepAliveTimeout(int keepAliveTimeout)

getPort

public int getPort()

setPort

public void setPort(int port)

getAddress

public java.net.InetAddress getAddress()

setAddress

public void setAddress(java.net.InetAddress address)

setHandler

public void setHandler(JIoEndpoint.Handler handler)

getHandler

public JIoEndpoint.Handler getHandler()

setBacklog

public void setBacklog(int backlog)

getBacklog

public int getBacklog()

getTcpNoDelay

public boolean getTcpNoDelay()

setTcpNoDelay

public void setTcpNoDelay(boolean tcpNoDelay)

getSoLinger

public int getSoLinger()

setSoLinger

public void setSoLinger(int soLinger)

getSoTimeout

public int getSoTimeout()

setSoTimeout

public void setSoTimeout(int soTimeout)

setDaemon

public void setDaemon(boolean b)

getDaemon

public boolean getDaemon()

setName

public void setName(java.lang.String name)

getName

public java.lang.String getName()

setServerSocketFactory

public void setServerSocketFactory(ServerSocketFactory factory)

getServerSocketFactory

public ServerSocketFactory getServerSocketFactory()

getEventPoller

public JIoEndpoint.Poller getEventPoller()

isRunning

public boolean isRunning()

isPaused

public boolean isPaused()

getCurrentThreadCount

public int getCurrentThreadCount()

getCurrentThreadsBusy

public int getCurrentThreadsBusy()

init

public void init()
          throws java.lang.Exception
Throws:
java.lang.Exception

start

public void start()
           throws java.lang.Exception
Throws:
java.lang.Exception

pause

public void pause()

resume

public void resume()

stop

public void stop()

destroy

public void destroy()
             throws java.lang.Exception
Deallocate APR memory pools, and close server socket.

Throws:
java.lang.Exception

unlockAccept

protected void unlockAccept()
Unlock the accept by using a local connection.


setSocketOptions

protected boolean setSocketOptions(java.net.Socket socket)
Set the options for the current socket.


createWorkerThread

protected JIoEndpoint.Worker createWorkerThread()
Create (or allocate) and return an available processor for use in processing a specific HTTP request, if possible. If the maximum allowed processors have already been created and are in use, return null instead.


newWorkerThread

protected JIoEndpoint.Worker newWorkerThread()
Create and return a new processor suitable for processing HTTP requests and returning the corresponding responses.


getWorkerThread

protected JIoEndpoint.Worker getWorkerThread()
Return a new worker thread, and block while to worker is available.


recycleWorkerThread

protected void recycleWorkerThread(JIoEndpoint.Worker workerThread)
Recycle the specified Processor so that it can be used again.

Parameters:
workerThread - The processor to be recycled

processSocket

protected boolean processSocket(java.net.Socket socket)
Process given socket.


processSocket

protected boolean processSocket(java.net.Socket socket,
                                SocketStatus status)
Process given socket for an event.



Copyright © 2000-2009 Apache Software Foundation. All Rights Reserved.