Package org.h2.server

Class TcpServer

java.lang.Object
org.h2.server.TcpServer
All Implemented Interfaces:
Service

public class TcpServer extends Object implements Service
The TCP server implements the native H2 database server protocol. It supports multiple client connections to multiple databases (many to many). The same database may be opened by multiple clients. Also supported is the mixed mode: opening databases in embedded mode, and at the same time start a TCP server to allow clients to connect to the same database over the network.
  • Field Details

    • SHUTDOWN_NORMAL

      private static final int SHUTDOWN_NORMAL
      See Also:
    • SHUTDOWN_FORCE

      private static final int SHUTDOWN_FORCE
      See Also:
    • MANAGEMENT_DB_PREFIX

      private static final String MANAGEMENT_DB_PREFIX
      The name of the in-memory management database used by the TCP server to keep the active sessions.
      See Also:
    • SERVERS

      private static final ConcurrentHashMap<Integer,TcpServer> SERVERS
    • port

      private int port
    • portIsSet

      private boolean portIsSet
    • trace

      private boolean trace
    • ssl

      private boolean ssl
    • stop

      private boolean stop
    • shutdownHandler

      private ShutdownHandler shutdownHandler
    • serverSocket

      private ServerSocket serverSocket
    • running

      private final Set<TcpServerThread> running
    • baseDir

      private String baseDir
    • allowOthers

      private boolean allowOthers
    • isDaemon

      private boolean isDaemon
    • ifExists

      private boolean ifExists
    • managementDb

      private JdbcConnection managementDb
    • managementDbAdd

      private PreparedStatement managementDbAdd
    • managementDbRemove

      private PreparedStatement managementDbRemove
    • managementPassword

      private String managementPassword
    • listenerThread

      private Thread listenerThread
    • nextThreadId

      private int nextThreadId
    • key

      private String key
    • keyDatabase

      private String keyDatabase
  • Constructor Details

    • TcpServer

      public TcpServer()
  • Method Details

    • getManagementDbName

      public static String getManagementDbName(int port)
      Get the database name of the management database. The management database contains a table with active sessions (SESSIONS).
      Parameters:
      port - the TCP server port
      Returns:
      the database name (usually starting with mem:)
    • initManagementDb

      private void initManagementDb() throws SQLException
      Throws:
      SQLException
    • shutdown

      void shutdown()
      Shut down this server.
    • setShutdownHandler

      public void setShutdownHandler(ShutdownHandler shutdownHandler)
    • addConnection

      void addConnection(int id, String url, String user)
      Add a connection to the management database.
      Parameters:
      id - the connection id
      url - the database URL
      user - the user name
    • removeConnection

      void removeConnection(int id)
      Remove a connection from the management database.
      Parameters:
      id - the connection id
    • stopManagementDb

      private void stopManagementDb()
    • init

      public void init(String... args)
      Description copied from interface: Service
      Initialize the service from command line options.
      Specified by:
      init in interface Service
      Parameters:
      args - the command line options
    • getURL

      public String getURL()
      Description copied from interface: Service
      Get the URL of this service in a human readable form
      Specified by:
      getURL in interface Service
      Returns:
      the url
    • getPort

      public int getPort()
      Description copied from interface: Service
      Gets the port this service is listening on.
      Specified by:
      getPort in interface Service
      Returns:
      the port
    • getSSL

      public boolean getSSL()
      Returns whether a secure protocol is used.
      Returns:
      true if SSL socket is used, false if plain socket is used
    • allow

      boolean allow(Socket socket)
      Check if this socket may connect to this server. Remote connections are not allowed if the flag allowOthers is set.
      Parameters:
      socket - the socket
      Returns:
      true if this client may connect
    • start

      public void start() throws SQLException
      Description copied from interface: Service
      Start the service. This usually means create the server socket. This method must not block.
      Specified by:
      start in interface Service
      Throws:
      SQLException - on failure
    • listen

      public void listen()
      Description copied from interface: Service
      Listen for incoming connections. This method blocks.
      Specified by:
      listen in interface Service
    • isRunning

      public boolean isRunning(boolean traceError)
      Description copied from interface: Service
      Check if the service is running.
      Specified by:
      isRunning in interface Service
      Parameters:
      traceError - if errors should be written
      Returns:
      if the server is running
    • stop

      public void stop()
      Description copied from interface: Service
      Stop the service.
      Specified by:
      stop in interface Service
    • stopServer

      public static void stopServer(int port, String password, int shutdownMode)
      Stop a running server. This method is called via reflection from the STOP_SERVER function.
      Parameters:
      port - the port where the server runs, or 0 for all running servers
      password - the password (or null)
      shutdownMode - the shutdown mode, SHUTDOWN_NORMAL or SHUTDOWN_FORCE.
    • remove

      void remove(TcpServerThread t)
      Remove a thread from the list.
      Parameters:
      t - the thread to remove
    • getBaseDir

      String getBaseDir()
      Get the configured base directory.
      Returns:
      the base directory
    • trace

      void trace(String s)
      Print a message if the trace flag is enabled.
      Parameters:
      s - the message
    • traceError

      void traceError(Throwable e)
      Print a stack trace if the trace flag is enabled.
      Parameters:
      e - the exception
    • getAllowOthers

      public boolean getAllowOthers()
      Description copied from interface: Service
      Check if remote connections are allowed.
      Specified by:
      getAllowOthers in interface Service
      Returns:
      true if remote connections are allowed
    • getType

      public String getType()
      Description copied from interface: Service
      Get the human readable short name of the service.
      Specified by:
      getType in interface Service
      Returns:
      the type
    • getName

      public String getName()
      Description copied from interface: Service
      Get the human readable name of the service.
      Specified by:
      getName in interface Service
      Returns:
      the name
    • getIfExists

      boolean getIfExists()
    • shutdown

      public static void shutdown(String url, String password, boolean force, boolean all) throws SQLException
      Stop the TCP server with the given URL.
      Parameters:
      url - the database URL
      password - the password
      force - if the server should be stopped immediately
      all - whether all TCP servers that are running in the JVM should be stopped
      Throws:
      SQLException - on failure
    • cancelStatement

      void cancelStatement(String sessionId, int statementId)
      Cancel a running statement.
      Parameters:
      sessionId - the session id
      statementId - the statement id
    • checkKeyAndGetDatabaseName

      public String checkKeyAndGetDatabaseName(String db)
      If no key is set, return the original database name. If a key is set, check if the key matches. If yes, return the correct database name. If not, throw an exception.
      Parameters:
      db - the key to test (or database name if no key is used)
      Returns:
      the database name
      Throws:
      DbException - if a key is set but doesn't match
    • isDaemon

      public boolean isDaemon()
      Description copied from interface: Service
      Check if a daemon thread should be used.
      Specified by:
      isDaemon in interface Service
      Returns:
      true if a daemon thread should be used