src/main/java/org/vibur/dbcp/ViburDBCPDataSource.java
@Override
    public void start() throws ViburDBCPException {
        try {
            doStart();
            logger.info("Started {}", this);
        } catch (IllegalStateException e) {
            throw new ViburDBCPException(e);
        } catch (IllegalArgumentException | NullPointerException | ViburDBCPException e) {
            logger.error("Unable to start {} due to:", this, e);
            terminate();
            throw e instanceof ViburDBCPException ? e : new ViburDBCPException(e);
        }
    }
@Override
    public void start() throws ViburDBCPException {
        try {
            doStart();
            logger.info("Started {}", this);
        } catch (IllegalStateException e) {
            throw new ViburDBCPException(e);
        } catch (IllegalArgumentException | NullPointerException | ViburDBCPException e) {
            logger.error("Unable to start {} due to:", this, e);
            terminate();
            throw e instanceof ViburDBCPException ? e : new ViburDBCPException(e);
        }
    }
{@inheritDoc}

@throws ViburDBCPException if not in a {@code NEW} state when started;
if a configuration error is found during start;
if cannot start this DataSource successfully, that is, if cannot successfully
initialize/configure the underlying SQL system, if cannot create the underlying SQL connections,
if cannot initialize the configured/needed JDBC Driver, if cannot create the configured pool reducer,
or if cannot initialize JMX