private synchronized void registerPool()

in src/main/java/org/apache/commons/dbcp2/datasources/PerUserPoolDataSource.java [686:720]


    private synchronized void registerPool(final String userName, final String password) throws NamingException, SQLException {
        final ConnectionPoolDataSource cpds = testCPDS(userName, password);
        // Set up the factory we will use (passing the pool associates
        // the factory with the pool, so we do not have to do so
        // explicitly)
        final CPDSConnectionFactory factory = new CPDSConnectionFactory(cpds, getValidationQuery(), getValidationQueryTimeoutDuration(),
                isRollbackAfterValidation(), userName, Utils.toCharArray(password));
        factory.setMaxConn(getMaxConnDuration());
        // Create an object pool to contain our PooledConnections
        @SuppressWarnings("resource")
        final GenericObjectPool<PooledConnectionAndInfo> pool = new GenericObjectPool<>(factory);
        factory.setPool(pool);
        pool.setBlockWhenExhausted(getPerUserBlockWhenExhausted(userName));
        pool.setEvictionPolicyClassName(getPerUserEvictionPolicyClassName(userName));
        pool.setLifo(getPerUserLifo(userName));
        pool.setMaxIdle(getPerUserMaxIdle(userName));
        pool.setMaxTotal(getPerUserMaxTotal(userName));
        pool.setMaxWait(getPerUserMaxWaitDuration(userName));
        pool.setMinEvictableIdleDuration(getPerUserMinEvictableIdleDuration(userName));
        pool.setMinIdle(getPerUserMinIdle(userName));
        pool.setNumTestsPerEvictionRun(getPerUserNumTestsPerEvictionRun(userName));
        pool.setSoftMinEvictableIdleDuration(getPerUserSoftMinEvictableIdleDuration(userName));
        pool.setTestOnCreate(getPerUserTestOnCreate(userName));
        pool.setTestOnBorrow(getPerUserTestOnBorrow(userName));
        pool.setTestOnReturn(getPerUserTestOnReturn(userName));
        pool.setTestWhileIdle(getPerUserTestWhileIdle(userName));
        pool.setDurationBetweenEvictionRuns(getPerUserDurationBetweenEvictionRuns(userName));
        pool.setSwallowedExceptionListener(new SwallowedExceptionLogger(log));
        final PoolKey poolKey = getPoolKey(userName);
        if (managers.containsKey(poolKey)) {
            pool.close();
            throw new IllegalStateException("Pool already contains an entry for this user/password: " + userName);
        }
        managers.put(poolKey, factory);
    }