Package org.apache.coyote
Class AbstractProtocol<S>
- java.lang.Object
-
- org.apache.coyote.AbstractProtocol<S>
-
- All Implemented Interfaces:
javax.management.MBeanRegistration
,ProtocolHandler
- Direct Known Subclasses:
AbstractAjpProtocol
,AbstractHttp11Protocol
public abstract class AbstractProtocol<S> extends java.lang.Object implements ProtocolHandler, javax.management.MBeanRegistration
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
AbstractProtocol.AsyncTimeout
Async timeout threadprotected static class
AbstractProtocol.ConnectionHandler<S>
protected static class
AbstractProtocol.RecycledProcessors
-
Field Summary
Fields Modifier and Type Field Description protected Adapter
adapter
The adapter provides the link between the ProtocolHandler and the connector.protected java.lang.String
clientCertProvider
When client certificate information is presented in a form other than instances ofX509Certificate
it needs to be converted before it can be used and this property controls which JSSE provider is used to perform the conversion.protected java.lang.String
domain
protected javax.management.MBeanServer
mserver
protected javax.management.ObjectName
oname
protected int
processorCache
The maximum number of idle processors that will be retained in the cache and re-used with a subsequent request.protected javax.management.ObjectName
rgOname
Name of MBean for the Global Request Processor.
-
Constructor Summary
Constructors Constructor Description AbstractProtocol(AbstractEndpoint<S,?> endpoint)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
addWaitingProcessor(Processor processor)
long
awaitConnectionsClose(long waitMillis)
Wait for the client connections to the server to close gracefully.void
closeServerSocketGraceful()
Close the server socket (to prevent further connections) if the server socket was bound onProtocolHandler.start()
(rather than onProtocolHandler.init()
but do not perform any further shutdown.protected abstract Processor
createProcessor()
Create and configure a new Processor instance for the current protocol implementation.protected abstract Processor
createUpgradeProcessor(SocketWrapperBase<?> socket, UpgradeToken upgradeToken)
void
destroy()
Destroy the protocol (optional).int
getAcceptCount()
int
getAcceptorThreadCount()
Deprecated.This attribute is hard-coded to1
and is no longer configurable.int
getAcceptorThreadPriority()
Adapter
getAdapter()
Return the adapter associated with the protocol handler.java.net.InetAddress
getAddress()
AbstractProtocol.AsyncTimeout
getAsyncTimeout()
int
getBacklog()
Deprecated.java.lang.String
getClientCertProvider()
long
getConnectionCount()
int
getConnectionLinger()
int
getConnectionTimeout()
java.lang.String
getDomain()
protected AbstractEndpoint<S,?>
getEndpoint()
java.util.concurrent.Executor
getExecutor()
The executor, provide access to the underlying thread pool.javax.management.ObjectName
getGlobalRequestProcessorMBeanName()
protected AbstractEndpoint.Handler<S>
getHandler()
int
getKeepAliveTimeout()
The time Tomcat will wait for a subsequent request before closing the connection.int
getLocalPort()
protected abstract Log
getLog()
Concrete implementations need to provide access to their logger to be used by the abstract classes.int
getMaxConnections()
int
getMaxHeaderCount()
int
getMaxThreads()
int
getMinSpareThreads()
java.lang.String
getName()
The name will be prefix-address-port if address is non-null and prefix-port if the address is null.int
getNameIndex()
protected abstract java.lang.String
getNamePrefix()
Obtain the prefix to be used when construction a name for this protocol handler.protected abstract UpgradeProtocol
getNegotiatedProtocol(java.lang.String name)
Find a suitable handler for the protocol negotiated at the network layer.javax.management.ObjectName
getObjectName()
int
getPort()
int
getPortOffset()
int
getPortWithOffset()
int
getProcessorCache()
java.lang.String
getProperty(java.lang.String name)
Generic property getter used by the digester.protected abstract java.lang.String
getProtocolName()
Obtain the name of the protocol, (Http, Ajp, etc.).boolean
getSendReasonPhrase()
Deprecated.This option will be removed in Tomcat 9.int
getSoLinger()
Deprecated.int
getSoTimeout()
Deprecated.boolean
getTcpNoDelay()
int
getThreadPriority()
protected abstract UpgradeProtocol
getUpgradeProtocol(java.lang.String name)
Find a suitable handler for the protocol upgraded name specified.int
getWaitingProcessorCount()
void
init()
Initialise the protocol.boolean
isAprRequired()
Requires APR/native libraryboolean
isSendfileSupported()
Does this ProtocolHandler support sendfile?void
pause()
Pause the protocol (optional).void
postDeregister()
void
postRegister(java.lang.Boolean registrationDone)
void
preDeregister()
javax.management.ObjectName
preRegister(javax.management.MBeanServer server, javax.management.ObjectName name)
void
removeWaitingProcessor(Processor processor)
void
resume()
Resume the protocol (optional).void
setAcceptCount(int acceptCount)
void
setAcceptorThreadCount(int threadCount)
Deprecated.This attribute is hard-coded to1
and is no longer configurable.void
setAcceptorThreadPriority(int threadPriority)
void
setAdapter(Adapter adapter)
The adapter, used to call the connector.void
setAddress(java.net.InetAddress ia)
void
setBacklog(int backlog)
Deprecated.void
setClientCertProvider(java.lang.String s)
void
setConnectionLinger(int connectionLinger)
void
setConnectionTimeout(int timeout)
void
setExecutor(java.util.concurrent.Executor executor)
protected void
setHandler(AbstractEndpoint.Handler<S> handler)
void
setKeepAliveTimeout(int keepAliveTimeout)
void
setMaxConnections(int maxConnections)
void
setMaxHeaderCount(int maxHeaderCount)
void
setMaxThreads(int maxThreads)
void
setMinSpareThreads(int minSpareThreads)
void
setPort(int port)
void
setPortOffset(int portOffset)
void
setProcessorCache(int processorCache)
boolean
setProperty(java.lang.String name, java.lang.String value)
Generic property setter used by the digester.void
setSendReasonPhrase(boolean sendReasonPhrase)
Deprecated.This option will be removed in Tomcat 9.void
setSoLinger(int soLinger)
Deprecated.void
setSoTimeout(int timeout)
Deprecated.void
setTcpNoDelay(boolean tcpNoDelay)
void
setThreadPriority(int threadPriority)
void
start()
Start the protocol.void
stop()
Stop the protocol.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.coyote.ProtocolHandler
addSslHostConfig, addSslHostConfig, addUpgradeProtocol, findSslHostConfigs, findUpgradeProtocols
-
-
-
-
Field Detail
-
rgOname
protected javax.management.ObjectName rgOname
Name of MBean for the Global Request Processor.
-
adapter
protected Adapter adapter
The adapter provides the link between the ProtocolHandler and the connector.
-
processorCache
protected int processorCache
The maximum number of idle processors that will be retained in the cache and re-used with a subsequent request. The default is 200. A value of -1 means unlimited. In the unlimited case, the theoretical maximum number of cached Processor objects isgetMaxConnections()
although it will usually be closer togetMaxThreads()
.
-
clientCertProvider
protected java.lang.String clientCertProvider
When client certificate information is presented in a form other than instances ofX509Certificate
it needs to be converted before it can be used and this property controls which JSSE provider is used to perform the conversion. For example it is used with the AJP connectors, the HTTP APR connector and with theSSLValve
. If not specified, the default provider will be used.
-
domain
protected java.lang.String domain
-
oname
protected javax.management.ObjectName oname
-
mserver
protected javax.management.MBeanServer mserver
-
-
Constructor Detail
-
AbstractProtocol
public AbstractProtocol(AbstractEndpoint<S,?> endpoint)
-
-
Method Detail
-
setProperty
public boolean setProperty(java.lang.String name, java.lang.String value)
Generic property setter used by the digester. Other code should not need to use this. The digester will only use this method if it can't find a more specific setter. That means the property belongs to the Endpoint, the ServerSocketFactory or some other lower level component. This method ensures that it is visible to both.- Parameters:
name
- The name of the property to setvalue
- The value, in string form, to set for the property- Returns:
true
if the property was set successfully, otherwisefalse
-
getProperty
public java.lang.String getProperty(java.lang.String name)
Generic property getter used by the digester. Other code should not need to use this.- Parameters:
name
- The name of the property to get- Returns:
- The value of the property converted to a string
-
getGlobalRequestProcessorMBeanName
public javax.management.ObjectName getGlobalRequestProcessorMBeanName()
-
setAdapter
public void setAdapter(Adapter adapter)
Description copied from interface:ProtocolHandler
The adapter, used to call the connector.- Specified by:
setAdapter
in interfaceProtocolHandler
- Parameters:
adapter
- The adapter to associate
-
getAdapter
public Adapter getAdapter()
Description copied from interface:ProtocolHandler
Return the adapter associated with the protocol handler.- Specified by:
getAdapter
in interfaceProtocolHandler
- Returns:
- the adapter
-
getProcessorCache
public int getProcessorCache()
-
setProcessorCache
public void setProcessorCache(int processorCache)
-
getClientCertProvider
public java.lang.String getClientCertProvider()
-
setClientCertProvider
public void setClientCertProvider(java.lang.String s)
-
isAprRequired
public boolean isAprRequired()
Description copied from interface:ProtocolHandler
Requires APR/native library- Specified by:
isAprRequired
in interfaceProtocolHandler
- Returns:
true
if this Protocol Handler requires the APR/native library, otherwisefalse
-
isSendfileSupported
public boolean isSendfileSupported()
Description copied from interface:ProtocolHandler
Does this ProtocolHandler support sendfile?- Specified by:
isSendfileSupported
in interfaceProtocolHandler
- Returns:
true
if this Protocol Handler supports sendfile, otherwisefalse
-
getAsyncTimeout
public AbstractProtocol.AsyncTimeout getAsyncTimeout()
-
getSendReasonPhrase
@Deprecated public boolean getSendReasonPhrase()
Deprecated.This option will be removed in Tomcat 9. Reason phrase will not be sent.Returns whether the reason phrase will be sent in the response. By default a reason phrase will not be sent in the response.- Returns:
- whether the reason phrase will be sent
-
setSendReasonPhrase
@Deprecated public void setSendReasonPhrase(boolean sendReasonPhrase)
Deprecated.This option will be removed in Tomcat 9. Reason phrase will not be sent.Specifies whether the reason phrase will be sent in the response. By default a reason phrase will not be sent in the response.- Parameters:
sendReasonPhrase
- specifies whether the reason phrase will be sent
-
getExecutor
public java.util.concurrent.Executor getExecutor()
Description copied from interface:ProtocolHandler
The executor, provide access to the underlying thread pool.- Specified by:
getExecutor
in interfaceProtocolHandler
- Returns:
- The executor used to process requests
-
setExecutor
public void setExecutor(java.util.concurrent.Executor executor)
-
getMaxThreads
public int getMaxThreads()
-
setMaxThreads
public void setMaxThreads(int maxThreads)
-
getMaxConnections
public int getMaxConnections()
-
setMaxConnections
public void setMaxConnections(int maxConnections)
-
getMinSpareThreads
public int getMinSpareThreads()
-
setMinSpareThreads
public void setMinSpareThreads(int minSpareThreads)
-
getThreadPriority
public int getThreadPriority()
-
setThreadPriority
public void setThreadPriority(int threadPriority)
-
getAcceptCount
public int getAcceptCount()
-
setAcceptCount
public void setAcceptCount(int acceptCount)
-
getBacklog
@Deprecated public int getBacklog()
Deprecated.
-
setBacklog
@Deprecated public void setBacklog(int backlog)
Deprecated.
-
getTcpNoDelay
public boolean getTcpNoDelay()
-
setTcpNoDelay
public void setTcpNoDelay(boolean tcpNoDelay)
-
getConnectionLinger
public int getConnectionLinger()
-
setConnectionLinger
public void setConnectionLinger(int connectionLinger)
-
getSoLinger
@Deprecated public int getSoLinger()
Deprecated.
-
setSoLinger
@Deprecated public void setSoLinger(int soLinger)
Deprecated.
-
getKeepAliveTimeout
public int getKeepAliveTimeout()
The time Tomcat will wait for a subsequent request before closing the connection. The default isgetConnectionTimeout()
.- Returns:
- The timeout in milliseconds
-
setKeepAliveTimeout
public void setKeepAliveTimeout(int keepAliveTimeout)
-
getAddress
public java.net.InetAddress getAddress()
-
setAddress
public void setAddress(java.net.InetAddress ia)
-
getPort
public int getPort()
-
setPort
public void setPort(int port)
-
getPortOffset
public int getPortOffset()
-
setPortOffset
public void setPortOffset(int portOffset)
-
getPortWithOffset
public int getPortWithOffset()
-
getLocalPort
public int getLocalPort()
-
getConnectionTimeout
public int getConnectionTimeout()
-
setConnectionTimeout
public void setConnectionTimeout(int timeout)
-
getSoTimeout
@Deprecated public int getSoTimeout()
Deprecated.
-
setSoTimeout
@Deprecated public void setSoTimeout(int timeout)
Deprecated.
-
getMaxHeaderCount
public int getMaxHeaderCount()
-
setMaxHeaderCount
public void setMaxHeaderCount(int maxHeaderCount)
-
getConnectionCount
public long getConnectionCount()
-
setAcceptorThreadCount
@Deprecated public void setAcceptorThreadCount(int threadCount)
Deprecated.This attribute is hard-coded to1
and is no longer configurable.Unused.- Parameters:
threadCount
- Ignored
-
getAcceptorThreadCount
@Deprecated public int getAcceptorThreadCount()
Deprecated.This attribute is hard-coded to1
and is no longer configurable.Unused.- Returns:
- Always returns
1
-
setAcceptorThreadPriority
public void setAcceptorThreadPriority(int threadPriority)
-
getAcceptorThreadPriority
public int getAcceptorThreadPriority()
-
getNameIndex
public int getNameIndex()
-
getName
public java.lang.String getName()
The name will be prefix-address-port if address is non-null and prefix-port if the address is null.- Returns:
- A name for this protocol instance that is appropriately quoted for use in an ObjectName.
-
addWaitingProcessor
public void addWaitingProcessor(Processor processor)
-
removeWaitingProcessor
public void removeWaitingProcessor(Processor processor)
-
getWaitingProcessorCount
public int getWaitingProcessorCount()
-
getEndpoint
protected AbstractEndpoint<S,?> getEndpoint()
-
getHandler
protected AbstractEndpoint.Handler<S> getHandler()
-
setHandler
protected void setHandler(AbstractEndpoint.Handler<S> handler)
-
getLog
protected abstract Log getLog()
Concrete implementations need to provide access to their logger to be used by the abstract classes.- Returns:
- the logger
-
getNamePrefix
protected abstract java.lang.String getNamePrefix()
Obtain the prefix to be used when construction a name for this protocol handler. The name will be prefix-address-port.- Returns:
- the prefix
-
getProtocolName
protected abstract java.lang.String getProtocolName()
Obtain the name of the protocol, (Http, Ajp, etc.). Used with JMX.- Returns:
- the protocol name
-
getNegotiatedProtocol
protected abstract UpgradeProtocol getNegotiatedProtocol(java.lang.String name)
Find a suitable handler for the protocol negotiated at the network layer.- Parameters:
name
- The name of the requested negotiated protocol.- Returns:
- The instance where
UpgradeProtocol.getAlpnName()
matches the requested protocol
-
getUpgradeProtocol
protected abstract UpgradeProtocol getUpgradeProtocol(java.lang.String name)
Find a suitable handler for the protocol upgraded name specified. This is used for direct connection protocol selection.- Parameters:
name
- The name of the requested negotiated protocol.- Returns:
- The instance where
UpgradeProtocol.getAlpnName()
matches the requested protocol
-
createProcessor
protected abstract Processor createProcessor()
Create and configure a new Processor instance for the current protocol implementation.- Returns:
- A fully configured Processor instance that is ready to use
-
createUpgradeProcessor
protected abstract Processor createUpgradeProcessor(SocketWrapperBase<?> socket, UpgradeToken upgradeToken)
-
getObjectName
public javax.management.ObjectName getObjectName()
-
getDomain
public java.lang.String getDomain()
-
preRegister
public javax.management.ObjectName preRegister(javax.management.MBeanServer server, javax.management.ObjectName name) throws java.lang.Exception
- Specified by:
preRegister
in interfacejavax.management.MBeanRegistration
- Throws:
java.lang.Exception
-
postRegister
public void postRegister(java.lang.Boolean registrationDone)
- Specified by:
postRegister
in interfacejavax.management.MBeanRegistration
-
preDeregister
public void preDeregister() throws java.lang.Exception
- Specified by:
preDeregister
in interfacejavax.management.MBeanRegistration
- Throws:
java.lang.Exception
-
postDeregister
public void postDeregister()
- Specified by:
postDeregister
in interfacejavax.management.MBeanRegistration
-
init
public void init() throws java.lang.Exception
Description copied from interface:ProtocolHandler
Initialise the protocol.- Specified by:
init
in interfaceProtocolHandler
- Throws:
java.lang.Exception
- If the protocol handler fails to initialise
-
start
public void start() throws java.lang.Exception
Description copied from interface:ProtocolHandler
Start the protocol.- Specified by:
start
in interfaceProtocolHandler
- Throws:
java.lang.Exception
- If the protocol handler fails to start
-
pause
public void pause() throws java.lang.Exception
Description copied from interface:ProtocolHandler
Pause the protocol (optional).- Specified by:
pause
in interfaceProtocolHandler
- Throws:
java.lang.Exception
- If the protocol handler fails to pause
-
resume
public void resume() throws java.lang.Exception
Description copied from interface:ProtocolHandler
Resume the protocol (optional).- Specified by:
resume
in interfaceProtocolHandler
- Throws:
java.lang.Exception
- If the protocol handler fails to resume
-
stop
public void stop() throws java.lang.Exception
Description copied from interface:ProtocolHandler
Stop the protocol.- Specified by:
stop
in interfaceProtocolHandler
- Throws:
java.lang.Exception
- If the protocol handler fails to stop
-
destroy
public void destroy() throws java.lang.Exception
Description copied from interface:ProtocolHandler
Destroy the protocol (optional).- Specified by:
destroy
in interfaceProtocolHandler
- Throws:
java.lang.Exception
- If the protocol handler fails to destroy
-
closeServerSocketGraceful
public void closeServerSocketGraceful()
Description copied from interface:ProtocolHandler
Close the server socket (to prevent further connections) if the server socket was bound onProtocolHandler.start()
(rather than onProtocolHandler.init()
but do not perform any further shutdown.- Specified by:
closeServerSocketGraceful
in interfaceProtocolHandler
-
awaitConnectionsClose
public long awaitConnectionsClose(long waitMillis)
Description copied from interface:ProtocolHandler
Wait for the client connections to the server to close gracefully. The method will return when all of the client connections have closed or the method has been waiting forwaitTimeMillis
.- Specified by:
awaitConnectionsClose
in interfaceProtocolHandler
- Parameters:
waitMillis
- The maximum time to wait in milliseconds for the client connections to close.- Returns:
- The wait time, if any remaining when the method returned
-
-