private Driver getDriver()

in src/main/java/org/apache/sling/datasource/internal/DriverDataSource.java [149:182]


    private Driver getDriver() throws SQLException {
        if (driver != null) {
            return driver;
        }
        final String url = poolProperties.getUrl();

        Collection<Driver> drivers = driverRegistry.getDrivers();
        if(!drivers.isEmpty()) {
            log.debug("Looking for driver for [{}] against registered drivers", url);
            driver = findMatchingDriver(drivers);
        }

        if(driver == null && poolProperties.getDriverClassName() != null){
            log.debug("Looking for driver for [{}] via provided className [{}]",
                    url, poolProperties.getDriverClassName());
            driver = loadDriverClass();
        }

        if(driver == null){
            //This one is redundant as DriverManager would filter out drivers
            //whose classes are not visible from our bundle classloader which
            //means that this list would be empty in most cases
            log.debug("Looking for driver from DriverManager");
            driver = findMatchingDriver(Collections.list(DriverManager.getDrivers()));
        }

        if(driver == null){
            String msg = String.format("Not able to find any matching driver for url [%s] " +
                    "and driverClassName [%s]",url,poolProperties.getDriverClassName());
            throw new SQLException(msg);
        }

        return driver;
    }