S
- The type for the sockets managed by this endpoint.public abstract class AbstractEndpoint<S> extends Object
Modifier and Type | Class and Description |
---|---|
static class |
AbstractEndpoint.Acceptor |
protected static class |
AbstractEndpoint.BindState |
static interface |
AbstractEndpoint.Handler<S> |
Modifier and Type | Field and Description |
---|---|
protected AbstractEndpoint.Acceptor[] |
acceptors
Threads used to accept new connections and pass them to worker threads.
|
protected int |
acceptorThreadCount
Acceptor thread count.
|
protected int |
acceptorThreadPriority
Priority of the acceptor threads.
|
protected HashMap<String,Object> |
attributes
Attributes provide a way for configuration to be passed to sub-components
without the
ProtocolHandler being aware of the
properties available on those sub-components. |
protected boolean |
internalExecutor
Are we using an internal executor
|
protected List<String> |
negotiableProtocols |
protected boolean |
paused
Will be set to true whenever the endpoint is paused.
|
protected SynchronizedStack<SocketProcessorBase<S>> |
processorCache
Cache for SocketProcessor objects
|
protected boolean |
running
Running state of the endpoint.
|
protected static StringManager |
sm |
protected SocketProperties |
socketProperties
Socket properties
|
protected ConcurrentMap<String,SSLHostConfig> |
sslHostConfigs |
protected int |
threadPriority
Priority of the worker threads.
|
Constructor and Description |
---|
AbstractEndpoint() |
Modifier and Type | Method and Description |
---|---|
void |
addNegotiatedProtocol(String negotiableProtocol) |
void |
addSslHostConfig(SSLHostConfig sslHostConfig)
Add the given SSL Host configuration.
|
void |
addSslHostConfig(SSLHostConfig sslHostConfig,
boolean replace)
Add the given SSL Host configuration, optionally replacing the existing
configuration for the given host.
|
abstract void |
bind() |
void |
closeServerSocketGraceful()
|
protected long |
countDownConnection() |
protected void |
countUpOrAwaitConnection() |
protected abstract AbstractEndpoint.Acceptor |
createAcceptor()
Hook to allow Endpoints to provide a specific Acceptor implementation.
|
void |
createExecutor() |
protected abstract SocketProcessorBase<S> |
createSocketProcessor(SocketWrapperBase<S> socketWrapper,
SocketEvent event) |
protected abstract void |
createSSLContext(SSLHostConfig sslHostConfig)
Create the SSLContextfor the the given SSLHostConfig.
|
void |
destroy() |
protected void |
destroySsl() |
protected abstract void |
doCloseServerSocket()
Actually close the server socket but don't perform any other clean-up.
|
SSLHostConfig[] |
findSslHostConfigs() |
int |
getAcceptCount() |
int |
getAcceptorThreadCount() |
int |
getAcceptorThreadPriority() |
InetAddress |
getAddress() |
Object |
getAttribute(String key)
Used by sub-components to retrieve configuration information.
|
int |
getBacklog()
Deprecated.
|
boolean |
getBindOnInit() |
long |
getConnectionCount()
Return the current count of connections handled by this endpoint, if the
connections are counted (which happens when the maximum count of
connections is limited), or
-1 if they are not. |
int |
getConnectionLinger()
Socket linger.
|
int |
getConnectionTimeout()
Socket timeout.
|
int |
getCurrentThreadCount()
Return the amount of threads that are managed by the pool.
|
int |
getCurrentThreadsBusy()
Return the amount of threads that are in use
|
boolean |
getDaemon() |
String |
getDefaultSSLHostConfigName() |
protected abstract boolean |
getDeferAccept() |
String |
getDomain() |
Executor |
getExecutor() |
long |
getExecutorTerminationTimeoutMillis() |
AbstractEndpoint.Handler<S> |
getHandler() |
int |
getKeepAliveTimeout() |
protected abstract InetSocketAddress |
getLocalAddress()
Obtain the network address the server socket is bound to.
|
int |
getLocalPort() |
protected abstract Log |
getLog() |
int |
getMaxConnections() |
int |
getMaxHeaderCount() |
int |
getMaxKeepAliveRequests() |
int |
getMaxThreads() |
int |
getMinSpareThreads() |
String |
getName() |
int |
getPort() |
String |
getProperty(String name) |
SocketProperties |
getSocketProperties() |
int |
getSoLinger()
Deprecated.
|
int |
getSoTimeout()
Deprecated.
|
protected SSLHostConfig |
getSSLHostConfig(String sniHostName)
Look up the SSLHostConfig for the given host name.
|
boolean |
getTcpNoDelay()
Socket TCP no delay.
|
int |
getThreadPriority() |
boolean |
getUseAsyncIO() |
boolean |
getUseSendfile() |
protected int |
handleExceptionWithDelay(int currentErrorDelay)
Provides a common approach for sub-classes to handle exceptions where a
delay is required to prevent a Thread from entering a tight loop which
will consume CPU and may also trigger large amounts of logging.
|
boolean |
hasNegotiableProtocols() |
void |
init() |
protected LimitLatch |
initializeConnectionLatch() |
abstract boolean |
isAlpnSupported()
Identifies if the endpoint supports ALPN.
|
boolean |
isPaused() |
boolean |
isRunning() |
boolean |
isSSLEnabled() |
void |
pause()
Pause the endpoint, which will stop it accepting new connections.
|
boolean |
processSocket(SocketWrapperBase<S> socketWrapper,
SocketEvent event,
boolean dispatch)
Process the given SocketWrapper with the given status.
|
protected void |
releaseConnectionLatch() |
protected void |
releaseSSLContext(SSLHostConfig sslHostConfig)
Release the SSLContext, if any, associated with the SSLHostConfig.
|
void |
reloadSslHostConfig(String hostName)
Re-read the configuration files for the SSL host and replace the existing
SSL configuration with the updated settings.
|
void |
reloadSslHostConfigs()
Re-read the configuration files for all SSL hosts and replace the
existing SSL configuration with the updated settings.
|
SSLHostConfig |
removeSslHostConfig(String hostName)
Removes the SSL host configuration for the given host name, if such a
configuration exists.
|
void |
resume()
Resume the endpoint, which will make it start accepting new connections
again.
|
void |
setAcceptCount(int acceptCount) |
void |
setAcceptorThreadCount(int acceptorThreadCount) |
void |
setAcceptorThreadPriority(int acceptorThreadPriority) |
void |
setAddress(InetAddress address) |
void |
setAttribute(String name,
Object value)
Generic property setter called when a property for which a specific
setter already exists within the
ProtocolHandler needs to be made available to
sub-components. |
void |
setBacklog(int backlog)
Deprecated.
|
void |
setBindOnInit(boolean b) |
void |
setConnectionLinger(int connectionLinger) |
void |
setConnectionTimeout(int soTimeout) |
void |
setDaemon(boolean b) |
void |
setDefaultSSLHostConfigName(String defaultSSLHostConfigName) |
void |
setDomain(String domain) |
void |
setExecutor(Executor executor) |
void |
setExecutorTerminationTimeoutMillis(long executorTerminationTimeoutMillis) |
void |
setHandler(AbstractEndpoint.Handler<S> handler) |
void |
setKeepAliveTimeout(int keepAliveTimeout) |
void |
setMaxConnections(int maxCon) |
void |
setMaxHeaderCount(int maxHeaderCount) |
void |
setMaxKeepAliveRequests(int maxKeepAliveRequests) |
void |
setMaxThreads(int maxThreads) |
void |
setMinSpareThreads(int minSpareThreads) |
void |
setName(String name) |
void |
setPort(int port) |
boolean |
setProperty(String name,
String value) |
void |
setSoLinger(int soLinger)
Deprecated.
|
void |
setSoTimeout(int soTimeout)
Deprecated.
|
void |
setSSLEnabled(boolean SSLEnabled) |
void |
setTcpNoDelay(boolean tcpNoDelay) |
void |
setThreadPriority(int threadPriority) |
void |
setUseAsyncIO(boolean useAsyncIO) |
void |
setUseSendfile(boolean useSendfile) |
void |
shutdownExecutor() |
void |
start() |
protected void |
startAcceptorThreads() |
abstract void |
startInternal() |
void |
stop() |
abstract void |
stopInternal() |
static long |
toTimeout(long timeout) |
abstract void |
unbind() |
protected void |
unlockAccept()
Unlock the server socket accept using a bogus connection.
|
protected static final StringManager sm
protected volatile boolean running
protected volatile boolean paused
protected volatile boolean internalExecutor
protected SocketProperties socketProperties
protected AbstractEndpoint.Acceptor[] acceptors
protected SynchronizedStack<SocketProcessorBase<S>> processorCache
protected ConcurrentMap<String,SSLHostConfig> sslHostConfigs
protected int acceptorThreadCount
protected int acceptorThreadPriority
protected int threadPriority
protected HashMap<String,Object> attributes
ProtocolHandler
being aware of the
properties available on those sub-components.public static long toTimeout(long timeout)
public SocketProperties getSocketProperties()
public String getDefaultSSLHostConfigName()
public void setDefaultSSLHostConfigName(String defaultSSLHostConfigName)
public void addSslHostConfig(SSLHostConfig sslHostConfig) throws IllegalArgumentException
sslHostConfig
- The configuration to addIllegalArgumentException
- If the host name is not valid or if a
configuration has already been provided
for that hostpublic void addSslHostConfig(SSLHostConfig sslHostConfig, boolean replace) throws IllegalArgumentException
sslHostConfig
- The configuration to addreplace
- If true
replacement of an existing
configuration is permitted, otherwise any such
attempted replacement will trigger an exceptionIllegalArgumentException
- If the host name is not valid or if a
configuration has already been provided
for that host and replacement is not
allowedpublic SSLHostConfig removeSslHostConfig(String hostName)
hostName
- The host name associated with the SSL host configuration
to removepublic void reloadSslHostConfig(String hostName)
hostName
- The SSL host for which the configuration should be
reloaded. This must match a current SSL hostpublic void reloadSslHostConfigs()
public SSLHostConfig[] findSslHostConfigs()
protected abstract void createSSLContext(SSLHostConfig sslHostConfig) throws Exception
sslHostConfig
- The SSLHostConfig for which the SSLContext should be
createdException
- If the SSLContext cannot be created for the given
SSLHostConfigprotected void releaseSSLContext(SSLHostConfig sslHostConfig)
sslHostConfig
- The SSLHostConfig for which the SSLContext should be
releasedprotected SSLHostConfig getSSLHostConfig(String sniHostName)
sniHostName
- Host name - must be in lower casepublic boolean getUseSendfile()
public void setUseSendfile(boolean useSendfile)
public long getExecutorTerminationTimeoutMillis()
public void setExecutorTerminationTimeoutMillis(long executorTerminationTimeoutMillis)
public void setAcceptorThreadCount(int acceptorThreadCount)
public int getAcceptorThreadCount()
public void setAcceptorThreadPriority(int acceptorThreadPriority)
public int getAcceptorThreadPriority()
public void setMaxConnections(int maxCon)
public int getMaxConnections()
public long getConnectionCount()
-1
if they are not. This
property is added here so that this value can be inspected through JMX.
It is visible on "ThreadPool" MBean.
The count is incremented by the Acceptor before it tries to accept a new connection. Until the limit is reached and thus the count cannot be incremented, this value is more by 1 (the count of acceptors) than the actual count of connections that are being served.
public void setExecutor(Executor executor)
public Executor getExecutor()
public int getPort()
public void setPort(int port)
public final int getLocalPort()
public InetAddress getAddress()
public void setAddress(InetAddress address)
protected abstract InetSocketAddress getLocalAddress() throws IOException
IOException
- If there is a problem determining the currently bound
socketpublic void setAcceptCount(int acceptCount)
public int getAcceptCount()
@Deprecated public void setBacklog(int backlog)
@Deprecated public int getBacklog()
public boolean getBindOnInit()
public void setBindOnInit(boolean b)
public int getKeepAliveTimeout()
public void setKeepAliveTimeout(int keepAliveTimeout)
public boolean getTcpNoDelay()
public void setTcpNoDelay(boolean tcpNoDelay)
public int getConnectionLinger()
public void setConnectionLinger(int connectionLinger)
@Deprecated public int getSoLinger()
@Deprecated public void setSoLinger(int soLinger)
public int getConnectionTimeout()
public void setConnectionTimeout(int soTimeout)
@Deprecated public int getSoTimeout()
@Deprecated public void setSoTimeout(int soTimeout)
public boolean isSSLEnabled()
public void setSSLEnabled(boolean SSLEnabled)
public abstract boolean isAlpnSupported()
true
implies that isSSLEnabled()
will also return
true
.true
if the endpoint supports ALPN in its current
configuration, otherwise false
.public void setMinSpareThreads(int minSpareThreads)
public int getMinSpareThreads()
public void setMaxThreads(int maxThreads)
public int getMaxThreads()
public void setThreadPriority(int threadPriority)
public int getThreadPriority()
public int getMaxKeepAliveRequests()
public void setMaxKeepAliveRequests(int maxKeepAliveRequests)
public int getMaxHeaderCount()
public void setMaxHeaderCount(int maxHeaderCount)
public void setName(String name)
public String getName()
public void setDomain(String domain)
public String getDomain()
public void setDaemon(boolean b)
public boolean getDaemon()
public void setUseAsyncIO(boolean useAsyncIO)
public boolean getUseAsyncIO()
protected abstract boolean getDeferAccept()
public void addNegotiatedProtocol(String negotiableProtocol)
public boolean hasNegotiableProtocols()
public void setHandler(AbstractEndpoint.Handler<S> handler)
public AbstractEndpoint.Handler<S> getHandler()
public void setAttribute(String name, Object value)
ProtocolHandler
needs to be made available to
sub-components. The specific setter will call this method to populate the
attributes.name
- Name of property to setvalue
- The value to set the property topublic Object getAttribute(String key)
key
- The name of the property for which the value should be
retrievedpublic int getCurrentThreadCount()
public int getCurrentThreadsBusy()
public boolean isRunning()
public boolean isPaused()
public void createExecutor()
public void shutdownExecutor()
protected void unlockAccept()
public boolean processSocket(SocketWrapperBase<S> socketWrapper, SocketEvent event, boolean dispatch)
socketWrapper
- The socket wrapper to processevent
- The socket event to be processeddispatch
- Should the processing be performed on a new
container threadprotected abstract SocketProcessorBase<S> createSocketProcessor(SocketWrapperBase<S> socketWrapper, SocketEvent event)
protected final void startAcceptorThreads()
protected abstract AbstractEndpoint.Acceptor createAcceptor()
public void pause()
public void resume()
protected abstract Log getLog()
protected LimitLatch initializeConnectionLatch()
protected void releaseConnectionLatch()
protected void countUpOrAwaitConnection() throws InterruptedException
InterruptedException
protected long countDownConnection()
protected int handleExceptionWithDelay(int currentErrorDelay)
currentErrorDelay
- The current delay being applied on failurepublic final void closeServerSocketGraceful()
start()
(rather than on
init()
).getBindOnInit()
protected abstract void doCloseServerSocket() throws IOException
IOException
- If an error occurs closing the socketCopyright © 2000-2021 Apache Software Foundation. All Rights Reserved.