docs: protected ObjectPool setupPool(JdbcConnectionDescriptor jcd)
      {
          log.info("Create new ObjectPool for DBCP connections:" + jcd);
  
          try
          {
              ClassHelper.newInstance(jcd.getDriver());
          }
          catch (InstantiationException e)
          {
              log.fatal("Unable to instantiate the driver class: " + jcd.getDriver() + " in ConnectionFactoryDBCImpl!" , e);
          }
          catch (IllegalAccessException e)
          {
              log.fatal("IllegalAccessException while instantiating the driver class: " + jcd.getDriver() + " in ConnectionFactoryDBCImpl!" , e);
          }
          catch (ClassNotFoundException e)
          {
              log.fatal("Could not find the driver class : " + jcd.getDriver() + " in ConnectionFactoryDBCImpl!" , e);
          }
  
          // Get the configuration for the connection pool
          GenericObjectPool.Config conf = jcd.getConnectionPoolDescriptor().getObjectPoolConfig();
  
          // Get the additional abandoned configuration
          AbandonedConfig ac = jcd.getConnectionPoolDescriptor().getAbandonedConfig();
  
          // Create the ObjectPool that serves as the actual pool of connections.
          final ObjectPool connectionPool = createConnectionPool(conf, ac);
  
          // Create a DriverManager-based ConnectionFactory that
          // the connectionPool will use to create Connection instances
          final org.apache.commons.dbcp.ConnectionFactory connectionFactory;
          connectionFactory = createConnectionFactory(jcd);
  
          // Create PreparedStatement object pool (if any)
          KeyedObjectPoolFactory statementPoolFactory = createStatementPoolFactory(jcd);
  
          // Set validation query and auto-commit mode
          final String validationQuery;
          final boolean defaultAutoCommit;
          final boolean defaultReadOnly = false;
          validationQuery = jcd.getConnectionPoolDescriptor().getValidationQuery();
          defaultAutoCommit = (jcd.getUseAutoCommit() != JdbcConnectionDescriptor.AUTO_COMMIT_SET_FALSE);
  
          //
          // Now we'll create the PoolableConnectionFactory, which wraps
          // the "real" Connections created by the ConnectionFactory with
          // the classes that implement the pooling functionality.
          //
          final PoolableConnectionFactory poolableConnectionFactory;
          poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory,
                  connectionPool,
                  statementPoolFactory,
                  validationQuery,
                  defaultReadOnly,
                  defaultAutoCommit,
                  ac);
          return poolableConnectionFactory.getPool();
      }