Class Pool

  • All Implemented Interfaces:
    java.lang.AutoCloseable, PoolMBean

    public class Pool
    extends java.lang.Object
    implements java.lang.AutoCloseable, PoolMBean
    MariaDB Pool
    • Field Detail

      • logger

        private static final Logger logger
      • poolState

        private final java.util.concurrent.atomic.AtomicInteger poolState
      • pendingRequestNumber

        private final java.util.concurrent.atomic.AtomicInteger pendingRequestNumber
      • totalConnection

        private final java.util.concurrent.atomic.AtomicInteger totalConnection
      • connectionAppender

        private final java.util.concurrent.ThreadPoolExecutor connectionAppender
      • connectionAppenderQueue

        private final java.util.concurrent.BlockingQueue<java.lang.Runnable> connectionAppenderQueue
      • poolTag

        private final java.lang.String poolTag
      • poolExecutor

        private final java.util.concurrent.ScheduledThreadPoolExecutor poolExecutor
      • scheduledFuture

        private final java.util.concurrent.ScheduledFuture<?> scheduledFuture
      • waitTimeout

        private int waitTimeout
    • Constructor Detail

      • Pool

        public Pool​(Configuration conf,
                    int poolIndex,
                    java.util.concurrent.ScheduledThreadPoolExecutor poolExecutor)
        Create pool from configuration.
        Parameters:
        conf - configuration parser
        poolIndex - pool index to permit distinction of thread name
        poolExecutor - pools common executor
    • Method Detail

      • addConnectionRequest

        private void addConnectionRequest()
        Add new connection if needed. Only one thread create new connection, so new connection request will wait to newly created connection or for a released connection.
      • removeIdleTimeoutConnection

        private void removeIdleTimeoutConnection()
        Removing idle connection. Close them and recreate connection to reach minimal number of connection.
      • addConnection

        private void addConnection()
                            throws java.sql.SQLException
        Create new connection.
        Throws:
        java.sql.SQLException - if connection creation failed
      • getIdleConnection

        private MariaDbInnerPoolConnection getIdleConnection​(long timeout,
                                                             java.util.concurrent.TimeUnit timeUnit)
                                                      throws java.lang.InterruptedException
        Get an existing idle connection in pool.
        Returns:
        an IDLE connection.
        Throws:
        java.lang.InterruptedException
      • silentCloseConnection

        private void silentCloseConnection​(Connection con)
      • silentAbortConnection

        private void silentAbortConnection​(Connection con)
      • getPoolConnection

        public MariaDbInnerPoolConnection getPoolConnection()
                                                     throws java.sql.SQLException
        Retrieve new connection. If possible return idle connection, if not, stack connection query, ask for a connection creation, and loop until a connection become idle / a new connection is created.
        Returns:
        a connection object
        Throws:
        java.sql.SQLException - if no connection is created when reaching timeout (connectTimeout option)
      • getPoolConnection

        public MariaDbInnerPoolConnection getPoolConnection​(java.lang.String username,
                                                            java.lang.String password)
                                                     throws java.sql.SQLException
        Get new connection from pool if user and password correspond to pool. If username and password are different from pool, will return a dedicated connection.
        Parameters:
        username - username
        password - password
        Returns:
        connection
        Throws:
        java.sql.SQLException - if any error occur during connection
      • generatePoolTag

        private java.lang.String generatePoolTag​(int poolIndex)
      • getConf

        public Configuration getConf()
        Get current configuration
        Returns:
        configuration
      • close

        public void close()
        Close pool and underlying connections.
        Specified by:
        close in interface java.lang.AutoCloseable
      • getPoolTag

        public java.lang.String getPoolTag()
        return pool tag
        Returns:
        pool tag
      • getActiveConnections

        public long getActiveConnections()
        Description copied from interface: PoolMBean
        get pool active connection number
        Specified by:
        getActiveConnections in interface PoolMBean
        Returns:
        pool active connection number
      • getTotalConnections

        public long getTotalConnections()
        Description copied from interface: PoolMBean
        get pool total connection
        Specified by:
        getTotalConnections in interface PoolMBean
        Returns:
        pool total connection number
      • getIdleConnections

        public long getIdleConnections()
        Description copied from interface: PoolMBean
        get idle connection number
        Specified by:
        getIdleConnections in interface PoolMBean
        Returns:
        idle connection number
      • getConnectionRequests

        public long getConnectionRequests()
        Description copied from interface: PoolMBean
        get connection waiting request number
        Specified by:
        getConnectionRequests in interface PoolMBean
        Returns:
        request number
      • registerJmx

        private void registerJmx()
                          throws java.lang.Exception
        Throws:
        java.lang.Exception
      • unRegisterJmx

        private void unRegisterJmx()
                            throws java.lang.Exception
        Throws:
        java.lang.Exception
      • testGetConnectionIdleThreadIds

        public java.util.List<java.lang.Long> testGetConnectionIdleThreadIds()
        For testing purpose only.
        Returns:
        current thread id's