Class TcpTransportServer

All Implemented Interfaces:
Runnable, Service, TransportServer, ServiceListener
Direct Known Subclasses:
NIOSSLTransportServer, SslTransportServer

public class TcpTransportServer extends TransportServerThreadSupport implements ServiceListener
A TCP based implementation of TransportServer
  • Field Details

    • serverSocket

      protected volatile ServerSocket serverSocket
    • selector

      protected volatile Selector selector
    • backlog

      protected int backlog
    • wireFormatFactory

      protected WireFormatFactory wireFormatFactory
    • transportFactory

      protected final TcpTransportFactory transportFactory
    • maxInactivityDuration

      protected long maxInactivityDuration
    • maxInactivityDurationInitalDelay

      protected long maxInactivityDurationInitalDelay
    • minmumWireFormatVersion

      protected int minmumWireFormatVersion
    • useQueueForAccept

      protected boolean useQueueForAccept
    • allowLinkStealing

      protected boolean allowLinkStealing
    • verifyHostName

      protected boolean verifyHostName
    • trace

      protected boolean trace
      trace=true -> the Transport stack where this TcpTransport object will be, will have a TransportLogger layer trace=false -> the Transport stack where this TcpTransport object will be, will NOT have a TransportLogger layer, and therefore will never be able to print logging messages. This parameter is most probably set in Connection or TransportConnector URIs.
    • soTimeout

      protected int soTimeout
    • socketBufferSize

      protected int socketBufferSize
    • connectionTimeout

      protected int connectionTimeout
    • logWriterName

      protected String logWriterName
      Name of the LogWriter implementation to use. Names are mapped to classes in the resources/META-INF/services/org/apache/activemq/transport/logwriters directory. This parameter is most probably set in Connection or TransportConnector URIs.
    • dynamicManagement

      protected boolean dynamicManagement
      Specifies if the TransportLogger will be manageable by JMX or not. Also, as long as there is at least 1 TransportLogger which is manageable, a TransportLoggerControl MBean will me created.
    • startLogging

      protected boolean startLogging
      startLogging=true -> the TransportLogger object of the Transport stack will initially write messages to the log. startLogging=false -> the TransportLogger object of the Transport stack will initially NOT write messages to the log. This parameter only has an effect if trace == true. This parameter is most probably set in Connection or TransportConnector URIs.
    • jmxPort

      protected int jmxPort
    • serverSocketFactory

      protected final ServerSocketFactory serverSocketFactory
    • socketQueue

      protected final BlockingQueue<Socket> socketQueue
    • socketHandlerThread

      protected Thread socketHandlerThread
    • maximumConnections

      protected int maximumConnections
      The maximum number of sockets allowed for this server
    • maximumConnectionsExceededCount

      protected final AtomicLong maximumConnectionsExceededCount
    • currentTransportCount

      protected final AtomicInteger currentTransportCount
  • Constructor Details

  • Method Details

    • bind

      public void bind() throws IOException
      Throws:
      IOException
    • getWireFormatFactory

      public WireFormatFactory getWireFormatFactory()
      Returns:
      Returns the wireFormatFactory.
    • setWireFormatFactory

      public void setWireFormatFactory(WireFormatFactory wireFormatFactory)
      Parameters:
      wireFormatFactory - The wireFormatFactory to set.
    • setBrokerInfo

      public void setBrokerInfo(BrokerInfo brokerInfo)
      Associates a broker info with the transport server so that the transport can do discovery advertisements of the broker.
      Specified by:
      setBrokerInfo in interface TransportServer
      Parameters:
      brokerInfo -
    • getMaxInactivityDuration

      public long getMaxInactivityDuration()
    • setMaxInactivityDuration

      public void setMaxInactivityDuration(long maxInactivityDuration)
    • getMaxInactivityDurationInitalDelay

      public long getMaxInactivityDurationInitalDelay()
    • setMaxInactivityDurationInitalDelay

      public void setMaxInactivityDurationInitalDelay(long maxInactivityDurationInitalDelay)
    • getMinmumWireFormatVersion

      public int getMinmumWireFormatVersion()
    • setMinmumWireFormatVersion

      public void setMinmumWireFormatVersion(int minmumWireFormatVersion)
    • isTrace

      public boolean isTrace()
    • setTrace

      public void setTrace(boolean trace)
    • getLogWriterName

      public String getLogWriterName()
    • setLogWriterName

      public void setLogWriterName(String logFormat)
    • isDynamicManagement

      public boolean isDynamicManagement()
    • setDynamicManagement

      public void setDynamicManagement(boolean useJmx)
    • setJmxPort

      public void setJmxPort(int jmxPort)
    • getJmxPort

      public int getJmxPort()
    • isStartLogging

      public boolean isStartLogging()
    • setStartLogging

      public void setStartLogging(boolean startLogging)
    • getBacklog

      public int getBacklog()
      Returns:
      the backlog
    • setBacklog

      public void setBacklog(int backlog)
      Parameters:
      backlog - the backlog to set
    • isUseQueueForAccept

      public boolean isUseQueueForAccept()
      Returns:
      the useQueueForAccept
    • setUseQueueForAccept

      public void setUseQueueForAccept(boolean useQueueForAccept)
      Parameters:
      useQueueForAccept - the useQueueForAccept to set
    • run

      public void run()
      pull Sockets from the ServerSocket
      Specified by:
      run in interface Runnable
    • createTransport

      protected Transport createTransport(Socket socket, WireFormat format) throws IOException
      Allow derived classes to override the Transport implementation that this transport server creates.
      Parameters:
      socket -
      format -
      Returns:
      a new Transport instance.
      Throws:
      IOException
    • toString

      public String toString()
      Overrides:
      toString in class Object
      Returns:
      pretty print of this
    • resolveHostName

      protected String resolveHostName(ServerSocket socket, InetAddress bindAddress) throws UnknownHostException
      Parameters:
      socket -
      bindAddress -
      Returns:
      real hostName
      Throws:
      UnknownHostException
    • doStart

      protected void doStart() throws Exception
      Overrides:
      doStart in class TransportServerThreadSupport
      Throws:
      Exception
    • doStop

      protected void doStop(ServiceStopper stopper) throws Exception
      Overrides:
      doStop in class TransportServerThreadSupport
      Throws:
      Exception
    • getSocketAddress

      public InetSocketAddress getSocketAddress()
      Specified by:
      getSocketAddress in interface TransportServer
      Returns:
      The socket address that this transport is accepting connections on or null if this does not or is not currently accepting connections on a socket.
    • handleSocket

      protected void handleSocket(Socket socket)
    • doHandleSocket

      protected final void doHandleSocket(Socket socket)
    • configureTransport

      protected TcpTransportServer.TransportInfo configureTransport(TcpTransportServer server, Socket socket) throws Exception
      Throws:
      Exception
    • getSoTimeout

      public int getSoTimeout()
    • setSoTimeout

      public void setSoTimeout(int soTimeout)
    • getSocketBufferSize

      public int getSocketBufferSize()
    • setSocketBufferSize

      public void setSocketBufferSize(int socketBufferSize)
    • getConnectionTimeout

      public int getConnectionTimeout()
    • setConnectionTimeout

      public void setConnectionTimeout(int connectionTimeout)
    • getMaximumConnections

      public int getMaximumConnections()
      Returns:
      the maximumConnections
    • setMaximumConnections

      public void setMaximumConnections(int maximumConnections)
      Parameters:
      maximumConnections - the maximumConnections to set
    • getCurrentTransportCount

      public AtomicInteger getCurrentTransportCount()
    • started

      public void started(Service service)
      Specified by:
      started in interface ServiceListener
    • stopped

      public void stopped(Service service)
      Specified by:
      stopped in interface ServiceListener
    • isSslServer

      public boolean isSslServer()
      Description copied from interface: TransportServer
      For TransportServers that provide SSL connections to their connected peers they should return true here if and only if they populate the ConnectionInfo command presented to the Broker with the peers certificate chain so that the broker knows it can use that information to authenticate the connected peer.
      Specified by:
      isSslServer in interface TransportServer
      Returns:
      true if this transport server provides SSL level security over its connections.
    • isAllowLinkStealing

      public boolean isAllowLinkStealing()
      Description copied from interface: TransportServer
      Some protocols allow link stealing by default (if 2 connections have the same clientID - the youngest wins). This is the default for AMQP and MQTT. However, JMS 1.1 spec requires the opposite
      Specified by:
      isAllowLinkStealing in interface TransportServer
      Overrides:
      isAllowLinkStealing in class TransportServerSupport
      Returns:
      true if allow link stealing is enabled.
    • setAllowLinkStealing

      public void setAllowLinkStealing(boolean allowLinkStealing)
      Overrides:
      setAllowLinkStealing in class TransportServerSupport
    • getMaxConnectionExceededCount

      public long getMaxConnectionExceededCount()
      Specified by:
      getMaxConnectionExceededCount in interface TransportServer
    • resetStatistics

      public void resetStatistics()
      Specified by:
      resetStatistics in interface TransportServer