public DataSource createMCSConnectionPool(
      MCSConnectionPoolConfiguration configuration, DataSource dataSource)
      throws RepositoryException {

    // Create and configure a Connection pool if there is one.
    if (configuration == null || !configuration.isEnabled()) {
      return dataSource;
    }

    int maxConnections = configuration.getMaxConnections();
    int maxFreeConnections = configuration.getMaxFreeConnections();
    // int optimalFreeConnections;
    int minFreeConnections = configuration.getMinFreeConnections();
    int initialConnections = configuration.getInitialConnections();

    boolean keepConnectionsAlive = configuration.isKeepAliveActive();
    ConnectionPool connectionPool = new ConnectionPool(dataSource);
    if (keepConnectionsAlive) {
      connectionPool.setKeepConnectionsAlive(true);
      int connectionPollInterval = configuration.getKeepAlivePollInterval();
      if (connectionPollInterval > 0) {
        connectionPool.setConnectionPollInterval(connectionPollInterval);
      }
    }

    connectionPool.setMaxConnections(maxConnections);
    connectionPool.setMaxFreeConnections(maxFreeConnections);
    // connectionPool.setOptimalFreeConnections (optimalFreeConnections);
    connectionPool.setMinFreeConnections(minFreeConnections);
    connectionPool.setInitialConnections(initialConnections);

    connectionPool.start();

    return connectionPool;
  }