Class AbstractProtocol<S>

java.lang.Object
org.apache.coyote.AbstractProtocol<S>
All Implemented Interfaces:
MBeanRegistration, ProtocolHandler
Direct Known Subclasses:
AbstractAjpProtocol, AbstractHttp11Protocol

public abstract class AbstractProtocol<S> extends Object implements ProtocolHandler, MBeanRegistration
  • Field Details

    • rgOname

      protected 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 is getMaxConnections() although it will usually be closer to getMaxThreads().
    • clientCertProvider

      protected String clientCertProvider
      When client certificate information is presented in a form other than instances of X509Certificate 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 the SSLValve. If not specified, the default provider will be used.
    • domain

      protected String domain
    • oname

      protected ObjectName oname
    • mserver

      protected MBeanServer mserver
  • Constructor Details

  • Method Details

    • setProperty

      public boolean setProperty(String name, 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 set
      value - The value, in string form, to set for the property
      Returns:
      true if the property was set successfully, otherwise false
    • getProperty

      public String getProperty(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 ObjectName getGlobalRequestProcessorMBeanName()
    • setAdapter

      public void setAdapter(Adapter adapter)
      Description copied from interface: ProtocolHandler
      The adapter, used to call the connector.
      Specified by:
      setAdapter in interface ProtocolHandler
      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 interface ProtocolHandler
      Returns:
      the adapter
    • getProcessorCache

      public int getProcessorCache()
    • setProcessorCache

      public void setProcessorCache(int processorCache)
    • getClientCertProvider

      public String getClientCertProvider()
    • setClientCertProvider

      public void setClientCertProvider(String s)
    • isAprRequired

      public boolean isAprRequired()
      Description copied from interface: ProtocolHandler
      Requires APR/native library
      Specified by:
      isAprRequired in interface ProtocolHandler
      Returns:
      true if this Protocol Handler requires the APR/native library, otherwise false
    • isSendfileSupported

      public boolean isSendfileSupported()
      Description copied from interface: ProtocolHandler
      Does this ProtocolHandler support sendfile?
      Specified by:
      isSendfileSupported in interface ProtocolHandler
      Returns:
      true if this Protocol Handler supports sendfile, otherwise false
    • getAsyncTimeout

      public AbstractProtocol<S>.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 Executor getExecutor()
      Description copied from interface: ProtocolHandler
      The executor, provide access to the underlying thread pool.
      Specified by:
      getExecutor in interface ProtocolHandler
      Returns:
      The executor used to process requests
    • setExecutor

      public void setExecutor(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 is getConnectionTimeout().
      Returns:
      The timeout in milliseconds
    • setKeepAliveTimeout

      public void setKeepAliveTimeout(int keepAliveTimeout)
    • getAddress

      public InetAddress getAddress()
    • setAddress

      public void setAddress(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 to 1 and is no longer configurable.
      Unused.
      Parameters:
      threadCount - Ignored
    • getAcceptorThreadCount

      @Deprecated public int getAcceptorThreadCount()
      Deprecated.
      This attribute is hard-coded to 1 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 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 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 String getProtocolName()
      Obtain the name of the protocol, (Http, Ajp, etc.). Used with JMX.
      Returns:
      the protocol name
    • getNegotiatedProtocol

      protected abstract UpgradeProtocol getNegotiatedProtocol(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(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 ObjectName getObjectName()
    • getDomain

      public String getDomain()
    • preRegister

      public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception
      Specified by:
      preRegister in interface MBeanRegistration
      Throws:
      Exception
    • postRegister

      public void postRegister(Boolean registrationDone)
      Specified by:
      postRegister in interface MBeanRegistration
    • preDeregister

      public void preDeregister() throws Exception
      Specified by:
      preDeregister in interface MBeanRegistration
      Throws:
      Exception
    • postDeregister

      public void postDeregister()
      Specified by:
      postDeregister in interface MBeanRegistration
    • init

      public void init() throws Exception
      Description copied from interface: ProtocolHandler
      Initialise the protocol.
      Specified by:
      init in interface ProtocolHandler
      Throws:
      Exception - If the protocol handler fails to initialise
    • start

      public void start() throws Exception
      Description copied from interface: ProtocolHandler
      Start the protocol.
      Specified by:
      start in interface ProtocolHandler
      Throws:
      Exception - If the protocol handler fails to start
    • pause

      public void pause() throws Exception
      Description copied from interface: ProtocolHandler
      Pause the protocol (optional).
      Specified by:
      pause in interface ProtocolHandler
      Throws:
      Exception - If the protocol handler fails to pause
    • resume

      public void resume() throws Exception
      Description copied from interface: ProtocolHandler
      Resume the protocol (optional).
      Specified by:
      resume in interface ProtocolHandler
      Throws:
      Exception - If the protocol handler fails to resume
    • stop

      public void stop() throws Exception
      Description copied from interface: ProtocolHandler
      Stop the protocol.
      Specified by:
      stop in interface ProtocolHandler
      Throws:
      Exception - If the protocol handler fails to stop
    • destroy

      public void destroy() throws Exception
      Description copied from interface: ProtocolHandler
      Destroy the protocol (optional).
      Specified by:
      destroy in interface ProtocolHandler
      Throws:
      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 on ProtocolHandler.start() (rather than on ProtocolHandler.init() but do not perform any further shutdown.
      Specified by:
      closeServerSocketGraceful in interface ProtocolHandler
    • 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 for waitTimeMillis.
      Specified by:
      awaitConnectionsClose in interface ProtocolHandler
      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