Search in sources :

Example 1 with DatabaseDialectException

use of org.pentaho.database.DatabaseDialectException in project pentaho-platform by pentaho.

the class PooledDatasourceHelper method convert.

@VisibleForTesting
static DataSource convert(IDatabaseConnection databaseConnection, Supplier<IDatabaseDialectService> dialectSupplier) throws DBDatasourceServiceException {
    // From Spring
    DriverManagerDataSource basicDatasource = new DriverManagerDataSource();
    IDatabaseDialect dialect = Optional.ofNullable(dialectSupplier.get()).orElseThrow(() -> new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0001_DATASOURCE_CANNOT_LOAD_DIALECT_SVC"))).getDialect(databaseConnection);
    if (databaseConnection.getDatabaseType() == null && dialect == null) {
        // We do not have enough information to create a DataSource. Throwing exception
        throw new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0001_DATASOURCE_CREATE_ERROR_NO_DIALECT", databaseConnection.getName()));
    }
    if (databaseConnection.getDatabaseType().getShortName().equals("GENERIC")) {
        // $NON-NLS-1$
        String driverClassName = databaseConnection.getAttributes().get(GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS);
        if (!StringUtils.isEmpty(driverClassName)) {
            initDriverClass(basicDatasource, dialect, driverClassName, databaseConnection.getName());
        } else {
            // We do not have enough information to create a DataSource. Throwing exception
            throw new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0002_DATASOURCE_CREATE_ERROR_NO_CLASSNAME", databaseConnection.getName()));
        }
    } else {
        if (!StringUtils.isEmpty(dialect.getNativeDriver())) {
            initDriverClass(basicDatasource, dialect, dialect.getNativeDriver(), databaseConnection.getName());
        } else {
            // We do not have enough information to create a DataSource. Throwing exception
            throw new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0003_DATASOURCE_CREATE_ERROR_NO_DRIVER", databaseConnection.getName()));
        }
    }
    try {
        basicDatasource.setUrl(dialect.getURLWithExtraOptions(databaseConnection));
    } catch (DatabaseDialectException e) {
        basicDatasource.setUrl(null);
    }
    basicDatasource.setUsername(databaseConnection.getUsername());
    basicDatasource.setPassword(databaseConnection.getPassword());
    return basicDatasource;
}
Also used : DBDatasourceServiceException(org.pentaho.platform.api.data.DBDatasourceServiceException) DatabaseDialectException(org.pentaho.database.DatabaseDialectException) DriverManagerDataSource(org.springframework.jdbc.datasource.DriverManagerDataSource) IDatabaseDialect(org.pentaho.database.IDatabaseDialect) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 2 with DatabaseDialectException

use of org.pentaho.database.DatabaseDialectException in project data-access by pentaho.

the class DatasourceInMemoryServiceHelper method getConnection.

public static SQLConnection getConnection(String connectionName) throws DatasourceServiceException {
    IDatabaseConnection connection = null;
    try {
        ConnectionServiceImpl service = new ConnectionServiceImpl();
        connection = service.getConnectionByName(connectionName);
        DatabaseDialectService dialectService = new DatabaseDialectService();
        IDatabaseDialect dialect = dialectService.getDialect(connection);
        String driverClass = null;
        if (connection.getDatabaseType().getShortName().equals("GENERIC")) {
            driverClass = connection.getAttributes().get(GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS);
        } else {
            driverClass = dialect.getNativeDriver();
        }
        return new SQLConnection(driverClass, dialect.getURLWithExtraOptions(connection), connection.getUsername(), connection.getPassword(), null);
    } catch (ConnectionServiceException e1) {
        return null;
    } catch (DatabaseDialectException e) {
        return null;
    }
}
Also used : ConnectionServiceException(org.pentaho.platform.dataaccess.datasource.wizard.service.ConnectionServiceException) ConnectionServiceImpl(org.pentaho.platform.dataaccess.datasource.wizard.service.impl.ConnectionServiceImpl) DatabaseDialectException(org.pentaho.database.DatabaseDialectException) SQLConnection(org.pentaho.platform.plugin.services.connections.sql.SQLConnection) DatabaseDialectService(org.pentaho.database.service.DatabaseDialectService) IDatabaseDialect(org.pentaho.database.IDatabaseDialect) IDatabaseConnection(org.pentaho.database.model.IDatabaseConnection)

Example 3 with DatabaseDialectException

use of org.pentaho.database.DatabaseDialectException in project pentaho-platform by pentaho.

the class PooledDatasourceHelper method setupPooledDataSource.

public static PoolingDataSource setupPooledDataSource(IDatabaseConnection databaseConnection) throws DBDatasourceServiceException {
    PoolingDataSource poolingDataSource = null;
    String driverClass = null;
    String url = null;
    try {
        if (databaseConnection.getAccessType().equals(DatabaseAccessType.JNDI)) {
            throw new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0008_UNABLE_TO_POOL_DATASOURCE_IT_IS_JNDI", databaseConnection.getName()));
        }
        ICacheManager cacheManager = PentahoSystem.getCacheManager(null);
        IDatabaseDialectService databaseDialectService = PentahoSystem.get(IDatabaseDialectService.class);
        if (databaseDialectService == null) {
            throw new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0005_UNABLE_TO_POOL_DATASOURCE_NO_DIALECT_SERVICE", databaseConnection.getName()));
        }
        IDatabaseDialect dialect = databaseDialectService.getDialect(databaseConnection);
        if (dialect == null || dialect.getDatabaseType() == null) {
            throw new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0004_UNABLE_TO_POOL_DATASOURCE_NO_DIALECT", databaseConnection.getName()));
        }
        if (databaseConnection.getDatabaseType().getShortName().equals("GENERIC")) {
            // $NON-NLS-1$
            driverClass = databaseConnection.getAttributes().get(GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS);
            if (StringUtils.isEmpty(driverClass)) {
                throw new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0006_UNABLE_TO_POOL_DATASOURCE_NO_CLASSNAME", databaseConnection.getName()));
            }
        } else {
            driverClass = dialect.getNativeDriver();
            if (StringUtils.isEmpty(driverClass)) {
                throw new DBDatasourceServiceException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0007_UNABLE_TO_POOL_DATASOURCE_NO_DRIVER", databaseConnection.getName()));
            }
        }
        try {
            url = dialect.getURLWithExtraOptions(databaseConnection);
        } catch (DatabaseDialectException e) {
            url = null;
        }
        // Read default connection pooling parameter
        // $NON-NLS-1$
        String maxdleConn = PentahoSystem.getSystemSetting("dbcp-defaults/max-idle-conn", null);
        // $NON-NLS-1$
        String minIdleConn = PentahoSystem.getSystemSetting("dbcp-defaults/min-idle-conn", null);
        // $NON-NLS-1$
        String maxActConn = PentahoSystem.getSystemSetting("dbcp-defaults/max-act-conn", null);
        String validQuery = null;
        // $NON-NLS-1$
        String whenExhaustedAction = PentahoSystem.getSystemSetting("dbcp-defaults/when-exhausted-action", null);
        // $NON-NLS-1$
        String wait = PentahoSystem.getSystemSetting("dbcp-defaults/wait", null);
        // $NON-NLS-1$
        String testWhileIdleValue = PentahoSystem.getSystemSetting("dbcp-defaults/test-while-idle", null);
        // $NON-NLS-1$
        String testOnBorrowValue = PentahoSystem.getSystemSetting("dbcp-defaults/test-on-borrow", null);
        // $NON-NLS-1$
        String testOnReturnValue = PentahoSystem.getSystemSetting("dbcp-defaults/test-on-return", null);
        // property initialization
        boolean testWhileIdle = !StringUtil.isEmpty(testWhileIdleValue) ? Boolean.parseBoolean(testWhileIdleValue) : false;
        boolean testOnBorrow = !StringUtil.isEmpty(testOnBorrowValue) ? Boolean.parseBoolean(testOnBorrowValue) : false;
        boolean testOnReturn = !StringUtil.isEmpty(testOnReturnValue) ? Boolean.parseBoolean(testOnReturnValue) : false;
        int maxActiveConnection = !StringUtil.isEmpty(maxActConn) ? Integer.parseInt(maxActConn) : -1;
        long waitTime = !StringUtil.isEmpty(wait) ? Integer.parseInt(wait) : -1;
        byte whenExhaustedActionType = !StringUtil.isEmpty(whenExhaustedAction) ? Byte.parseByte(whenExhaustedAction) : GenericObjectPool.WHEN_EXHAUSTED_BLOCK;
        int minIdleConnection = !StringUtil.isEmpty(minIdleConn) ? Integer.parseInt(minIdleConn) : -1;
        int maxIdleConnection = !StringUtil.isEmpty(maxdleConn) ? Integer.parseInt(maxdleConn) : -1;
        // setting properties according to user specifications
        Map<String, String> attributes = databaseConnection.getConnectionPoolingProperties();
        if (attributes.containsKey(IDBDatasourceService.MAX_ACTIVE_KEY) && NumberUtils.isNumber(attributes.get(IDBDatasourceService.MAX_ACTIVE_KEY))) {
            maxActiveConnection = Integer.parseInt(attributes.get(IDBDatasourceService.MAX_ACTIVE_KEY));
        }
        if (attributes.containsKey(IDBDatasourceService.MAX_WAIT_KEY) && NumberUtils.isNumber(attributes.get(IDBDatasourceService.MAX_WAIT_KEY))) {
            waitTime = Integer.parseInt(attributes.get(IDBDatasourceService.MAX_WAIT_KEY));
        }
        if (attributes.containsKey(IDBDatasourceService.MIN_IDLE_KEY) && NumberUtils.isNumber(attributes.get(IDBDatasourceService.MIN_IDLE_KEY))) {
            minIdleConnection = Integer.parseInt(attributes.get(IDBDatasourceService.MIN_IDLE_KEY));
        }
        if (attributes.containsKey(IDBDatasourceService.MAX_IDLE_KEY) && NumberUtils.isNumber(attributes.get(IDBDatasourceService.MAX_IDLE_KEY))) {
            maxIdleConnection = Integer.parseInt(attributes.get(IDBDatasourceService.MAX_IDLE_KEY));
        }
        if (attributes.containsKey(IDBDatasourceService.QUERY_KEY)) {
            validQuery = attributes.get(IDBDatasourceService.QUERY_KEY);
        }
        if (attributes.containsKey(IDBDatasourceService.TEST_ON_BORROW)) {
            testOnBorrow = Boolean.parseBoolean(attributes.get(IDBDatasourceService.TEST_ON_BORROW));
        }
        if (attributes.containsKey(IDBDatasourceService.TEST_ON_RETURN)) {
            testOnReturn = Boolean.parseBoolean(attributes.get(IDBDatasourceService.TEST_ON_RETURN));
        }
        if (attributes.containsKey(IDBDatasourceService.TEST_WHILE_IDLE)) {
            testWhileIdle = Boolean.parseBoolean(attributes.get(IDBDatasourceService.TEST_WHILE_IDLE));
        }
        poolingDataSource = new PoolingDataSource();
        if (dialect instanceof IDriverLocator) {
            if (!((IDriverLocator) dialect).initialize(driverClass)) {
                throw new DriverNotInitializedException(Messages.getInstance().getErrorString("PooledDatasourceHelper.ERROR_0009_UNABLE_TO_POOL_DATASOURCE_CANT_INITIALIZE", databaseConnection.getName(), driverClass));
            }
        } else {
            Class.forName(driverClass);
        }
        // As the name says, this is a generic pool; it returns basic Object-class objects.
        GenericObjectPool pool = new GenericObjectPool(null);
        // if removedAbandoned = true, then an AbandonedObjectPool object will take GenericObjectPool's place
        if (attributes.containsKey(IDBDatasourceService.REMOVE_ABANDONED) && true == Boolean.parseBoolean(attributes.get(IDBDatasourceService.REMOVE_ABANDONED))) {
            AbandonedConfig config = new AbandonedConfig();
            config.setRemoveAbandoned(Boolean.parseBoolean(attributes.get(IDBDatasourceService.REMOVE_ABANDONED)));
            if (attributes.containsKey(IDBDatasourceService.LOG_ABANDONED)) {
                config.setLogAbandoned(Boolean.parseBoolean(attributes.get(IDBDatasourceService.LOG_ABANDONED)));
            }
            if (attributes.containsKey(IDBDatasourceService.REMOVE_ABANDONED_TIMEOUT) && NumberUtils.isNumber(attributes.get(IDBDatasourceService.REMOVE_ABANDONED_TIMEOUT))) {
                config.setRemoveAbandonedTimeout(Integer.parseInt(attributes.get(IDBDatasourceService.REMOVE_ABANDONED_TIMEOUT)));
            }
            pool = new AbandonedObjectPool(null, config);
        }
        pool.setWhenExhaustedAction(whenExhaustedActionType);
        // Tuning the connection pool
        pool.setMaxActive(maxActiveConnection);
        pool.setMaxIdle(maxIdleConnection);
        pool.setMaxWait(waitTime);
        pool.setMinIdle(minIdleConnection);
        pool.setTestWhileIdle(testWhileIdle);
        pool.setTestOnReturn(testOnReturn);
        pool.setTestOnBorrow(testOnBorrow);
        pool.setTestWhileIdle(testWhileIdle);
        if (attributes.containsKey(IDBDatasourceService.TIME_BETWEEN_EVICTION_RUNS_MILLIS) && NumberUtils.isNumber(attributes.get(IDBDatasourceService.TIME_BETWEEN_EVICTION_RUNS_MILLIS))) {
            pool.setTimeBetweenEvictionRunsMillis(Long.parseLong(attributes.get(IDBDatasourceService.TIME_BETWEEN_EVICTION_RUNS_MILLIS)));
        }
        /*
       * ConnectionFactory creates connections on behalf of the pool. Here, we use the DriverManagerConnectionFactory
       * because that essentially uses DriverManager as the source of connections.
       */
        ConnectionFactory factory = null;
        if (url.startsWith("jdbc:mysql:") || (url.startsWith("jdbc:mariadb:"))) {
            Properties props = new Properties();
            props.put("user", databaseConnection.getUsername());
            props.put("password", databaseConnection.getPassword());
            props.put("socketTimeout", "0");
            props.put("connectTimeout", "5000");
            factory = new DriverManagerConnectionFactory(url, props);
        } else {
            factory = new DriverManagerConnectionFactory(url, databaseConnection.getUsername(), databaseConnection.getPassword());
        }
        boolean defaultReadOnly = attributes.containsKey(IDBDatasourceService.DEFAULT_READ_ONLY) ? Boolean.parseBoolean(attributes.get(IDBDatasourceService.TEST_WHILE_IDLE)) : // default to false
        false;
        boolean defaultAutoCommit = attributes.containsKey(IDBDatasourceService.DEFAULT_AUTO_COMMIT) ? Boolean.parseBoolean(attributes.get(IDBDatasourceService.DEFAULT_AUTO_COMMIT)) : // default to true
        true;
        KeyedObjectPoolFactory kopf = null;
        if (attributes.containsKey(IDBDatasourceService.POOL_PREPARED_STATEMENTS) && true == Boolean.parseBoolean(attributes.get(IDBDatasourceService.POOL_PREPARED_STATEMENTS))) {
            // unlimited
            int maxOpenPreparedStatements = -1;
            if (attributes.containsKey(IDBDatasourceService.MAX_OPEN_PREPARED_STATEMENTS) && NumberUtils.isNumber(attributes.get(IDBDatasourceService.MAX_OPEN_PREPARED_STATEMENTS))) {
                maxOpenPreparedStatements = Integer.parseInt(attributes.get(IDBDatasourceService.MAX_OPEN_PREPARED_STATEMENTS));
            }
            kopf = new GenericKeyedObjectPoolFactory(null, pool.getMaxActive(), pool.getWhenExhaustedAction(), pool.getMaxWait(), pool.getMaxIdle(), maxOpenPreparedStatements);
        }
        /*
       * Puts pool-specific wrappers on factory connections. For clarification: "[PoolableConnection]Factory," not
       * "Poolable[ConnectionFactory]."
       */
        PoolableConnectionFactory pcf = new PoolableConnectionFactory(// ConnectionFactory
        factory, // ObjectPool
        pool, // KeyedObjectPoolFactory
        kopf, // String (validation query)
        validQuery, // boolean (default to read-only?)
        defaultReadOnly, // boolean (default to auto-commit statements?)
        defaultAutoCommit);
        if (attributes.containsKey(IDBDatasourceService.DEFAULT_TRANSACTION_ISOLATION) && !IDBDatasourceService.TRANSACTION_ISOLATION_NONE_VALUE.equalsIgnoreCase(attributes.get(IDBDatasourceService.DEFAULT_TRANSACTION_ISOLATION))) {
            Isolation isolationLevel = Isolation.valueOf(attributes.get(IDBDatasourceService.DEFAULT_TRANSACTION_ISOLATION));
            if (isolationLevel != null) {
                pcf.setDefaultTransactionIsolation(isolationLevel.value());
            }
        }
        if (attributes.containsKey(IDBDatasourceService.DEFAULT_CATALOG)) {
            pcf.setDefaultCatalog(attributes.get(IDBDatasourceService.DEFAULT_CATALOG));
        }
        /*
       * initialize the pool to X connections
       */
        Logger.debug(PooledDatasourceHelper.class, "Pool defaults to " + maxActiveConnection + " max active/" + maxIdleConnection + "max idle" + "with " + waitTime + // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
        "wait time" + // $NON-NLS-1$
        " idle connections.");
        String prePopulatePoolStr = PentahoSystem.getSystemSetting("dbcp-defaults/pre-populate-pool", null);
        if (Boolean.parseBoolean(prePopulatePoolStr)) {
            for (int i = 0; i < maxIdleConnection; ++i) {
                pool.addObject();
            }
            if (Logger.getLogLevel() <= ILogger.DEBUG) {
                Logger.debug(PooledDatasourceHelper.class, "Pool has been pre-populated with " + maxIdleConnection + " connections");
            }
        }
        Logger.debug(PooledDatasourceHelper.class, "Pool now has " + pool.getNumActive() + " active/" + pool.getNumIdle() + // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        " idle connections.");
        /*
       * All of this is wrapped in a DataSource, which client code should already know how to handle (since it's the
       * same class of object they'd fetch via the container's JNDI tree
       */
        poolingDataSource.setPool(pool);
        if (attributes.containsKey(IDBDatasourceService.ACCESS_TO_UNDERLYING_CONNECTION_ALLOWED)) {
            poolingDataSource.setAccessToUnderlyingConnectionAllowed(Boolean.parseBoolean(attributes.get(IDBDatasourceService.ACCESS_TO_UNDERLYING_CONNECTION_ALLOWED)));
        }
        // store the pool, so we can get to it later
        cacheManager.putInRegionCache(IDBDatasourceService.JDBC_POOL, databaseConnection.getName(), pool);
        return (poolingDataSource);
    } catch (Exception e) {
        throw new DBDatasourceServiceException(e);
    }
}
Also used : AbandonedConfig(org.apache.commons.dbcp.AbandonedConfig) DriverManagerConnectionFactory(org.apache.commons.dbcp.DriverManagerConnectionFactory) IDatabaseDialect(org.pentaho.database.IDatabaseDialect) IDatabaseDialectService(org.pentaho.database.service.IDatabaseDialectService) Properties(java.util.Properties) GenericKeyedObjectPoolFactory(org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory) KeyedObjectPoolFactory(org.apache.commons.pool.KeyedObjectPoolFactory) PoolableConnectionFactory(org.apache.commons.dbcp.PoolableConnectionFactory) ConnectionFactory(org.apache.commons.dbcp.ConnectionFactory) DriverManagerConnectionFactory(org.apache.commons.dbcp.DriverManagerConnectionFactory) PoolableConnectionFactory(org.apache.commons.dbcp.PoolableConnectionFactory) PoolingDataSource(org.apache.commons.dbcp.PoolingDataSource) AbandonedObjectPool(org.apache.commons.dbcp.AbandonedObjectPool) GenericObjectPool(org.apache.commons.pool.impl.GenericObjectPool) NamingException(javax.naming.NamingException) DBDatasourceServiceException(org.pentaho.platform.api.data.DBDatasourceServiceException) DatabaseDialectException(org.pentaho.database.DatabaseDialectException) GenericKeyedObjectPoolFactory(org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory) DBDatasourceServiceException(org.pentaho.platform.api.data.DBDatasourceServiceException) DatabaseDialectException(org.pentaho.database.DatabaseDialectException) Isolation(org.springframework.transaction.annotation.Isolation) ICacheManager(org.pentaho.platform.api.engine.ICacheManager) IDriverLocator(org.pentaho.database.IDriverLocator)

Example 4 with DatabaseDialectException

use of org.pentaho.database.DatabaseDialectException in project data-access by pentaho.

the class ConnectionServiceImpl method testConnection.

public boolean testConnection(IDatabaseConnection connection) throws ConnectionServiceException {
    ensureDataAccessPermission();
    if (connection != null) {
        sanitizer.sanitizeConnectionParameters(connection);
        if (connection.getPassword() == null) {
            // Can have an empty password but not a null one
            // $NON-NLS-1$
            connection.setPassword("");
        }
        IDatabaseDialect dialect = dialectService.getDialect(connection);
        String driverClass = null;
        if (connection.getDatabaseType().getShortName().equals("GENERIC")) {
            driverClass = connection.getAttributes().get(GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS);
        } else {
            driverClass = dialect.getNativeDriver();
        }
        IPentahoConnection pentahoConnection = null;
        try {
            if (connection.getAccessType().equals(DatabaseAccessType.JNDI)) {
                pentahoConnection = PentahoConnectionFactory.getConnection(IPentahoConnection.SQL_DATASOURCE, connection.getDatabaseName(), null, this);
            } else {
                if (connection.isUsingConnectionPool()) {
                    Properties props = new Properties();
                    props.put(IPentahoConnection.CONNECTION_NAME, connection.getName());
                    props.put(IPentahoConnection.CONNECTION, connection);
                    pentahoConnection = PentahoConnectionFactory.getConnection(IPentahoConnection.SQL_DATASOURCE, props, null, this);
                } else {
                    pentahoConnection = PentahoConnectionFactory.getConnection(IPentahoConnection.SQL_DATASOURCE, driverClass, dialect.getURLWithExtraOptions(connection), connection.getUsername(), getConnectionPassword(connection.getName(), connection.getPassword()), null, this);
                }
            }
        } catch (DatabaseDialectException e) {
            throw new ConnectionServiceException(e);
        }
        if (pentahoConnection != null) {
            // make sure we have a native connection behind the SQLConnection object
            // if the native connection is null, the test of the connection failed
            boolean testedOk = ((SQLConnection) pentahoConnection).getNativeConnection() != null;
            pentahoConnection.close();
            return testedOk;
        } else {
            return false;
        }
    } else {
        // $NON-NLS-1$
        String message = Messages.getErrorString("ConnectionServiceImpl.ERROR_0008_UNABLE_TO_TEST_NULL_CONNECTION");
        logger.error(message);
        // $NON-NLS-1$
        throw new ConnectionServiceException(Response.SC_BAD_REQUEST, message);
    }
}
Also used : IPentahoConnection(org.pentaho.commons.connection.IPentahoConnection) ConnectionServiceException(org.pentaho.platform.dataaccess.datasource.wizard.service.ConnectionServiceException) DatabaseDialectException(org.pentaho.database.DatabaseDialectException) IDatabaseDialect(org.pentaho.database.IDatabaseDialect) Properties(java.util.Properties)

Example 5 with DatabaseDialectException

use of org.pentaho.database.DatabaseDialectException in project data-access by pentaho.

the class InMemoryConnectionServiceImpl method getConnection.

/**
 * NOTE: caller is responsible for closing connection
 *
 * @param ds
 * @return
 * @throws DataSourceManagementException
 */
private static java.sql.Connection getConnection(IDatabaseConnection connection) throws ConnectionServiceException {
    java.sql.Connection conn = null;
    String driverClass = connection.getAccessType().getClass().toString();
    if (StringUtils.isEmpty(driverClass)) {
        logger.error(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0020_CONNECTION_ATTEMPT_FAILED"));
        throw new ConnectionServiceException(Messages.getErrorString(// $NON-NLS-1$
        "ConnectionServiceInMemoryDelegate.ERROR_0020_CONNECTION_ATTEMPT_FAILED"));
    }
    Class<?> driverC = null;
    try {
        driverC = Class.forName(driverClass);
    } catch (ClassNotFoundException e) {
        logger.error(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0021_DRIVER_NOT_FOUND_IN_CLASSPATH", driverClass), e);
        throw new ConnectionServiceException(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0021_DRIVER_NOT_FOUND_IN_CLASSPATH"), // $NON-NLS-1$
        e);
    }
    if (!Driver.class.isAssignableFrom(driverC)) {
        logger.error(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0021_DRIVER_NOT_FOUND_IN_CLASSPATH", driverClass));
        throw new ConnectionServiceException(Messages.getErrorString(// $NON-NLS-1$
        "ConnectionServiceInMemoryDelegate.ERROR_0021_DRIVER_NOT_FOUND_IN_CLASSPATH"));
    }
    Driver driver = null;
    try {
        driver = driverC.asSubclass(Driver.class).newInstance();
    } catch (InstantiationException e) {
        logger.error(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0022_UNABLE_TO_INSTANCE_DRIVER", driverClass), e);
        throw new ConnectionServiceException(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0022_UNABLE_TO_INSTANCE_DRIVER"), // $NON-NLS-1$
        e);
    } catch (IllegalAccessException e) {
        logger.error(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0022_UNABLE_TO_INSTANCE_DRIVER", driverClass), e);
        throw new ConnectionServiceException(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0022_UNABLE_TO_INSTANCE_DRIVER"), // $NON-NLS-1$
        e);
    }
    try {
        DriverManager.registerDriver(driver);
        DatabaseDialectService dialectService = new DatabaseDialectService();
        IDatabaseDialect dialect = dialectService.getDialect(connection);
        conn = DriverManager.getConnection(dialect.getURLWithExtraOptions(connection), connection.getUsername(), connection.getPassword());
        return conn;
    } catch (SQLException e) {
        logger.error(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0023_UNABLE_TO_CONNECT"), e);
        throw new ConnectionServiceException(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0023_UNABLE_TO_CONNECT"), // $NON-NLS-1$
        e);
    } catch (DatabaseDialectException e) {
        logger.error(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0023_UNABLE_TO_CONNECT"), e);
        throw new ConnectionServiceException(Messages.getErrorString("ConnectionServiceInMemoryDelegate.ERROR_0023_UNABLE_TO_CONNECT"), // $NON-NLS-1$
        e);
    }
}
Also used : ConnectionServiceException(org.pentaho.platform.dataaccess.datasource.wizard.service.ConnectionServiceException) SQLException(java.sql.SQLException) Driver(java.sql.Driver) IDatabaseDialect(org.pentaho.database.IDatabaseDialect) DatabaseDialectException(org.pentaho.database.DatabaseDialectException) DatabaseDialectService(org.pentaho.database.service.DatabaseDialectService)

Aggregations

DatabaseDialectException (org.pentaho.database.DatabaseDialectException)6 IDatabaseDialect (org.pentaho.database.IDatabaseDialect)6 ConnectionServiceException (org.pentaho.platform.dataaccess.datasource.wizard.service.ConnectionServiceException)4 DatabaseDialectService (org.pentaho.database.service.DatabaseDialectService)3 Driver (java.sql.Driver)2 SQLException (java.sql.SQLException)2 Properties (java.util.Properties)2 IDatabaseConnection (org.pentaho.database.model.IDatabaseConnection)2 DBDatasourceServiceException (org.pentaho.platform.api.data.DBDatasourceServiceException)2 ConnectionServiceImpl (org.pentaho.platform.dataaccess.datasource.wizard.service.impl.ConnectionServiceImpl)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 NamingException (javax.naming.NamingException)1 AbandonedConfig (org.apache.commons.dbcp.AbandonedConfig)1 AbandonedObjectPool (org.apache.commons.dbcp.AbandonedObjectPool)1 ConnectionFactory (org.apache.commons.dbcp.ConnectionFactory)1 DriverManagerConnectionFactory (org.apache.commons.dbcp.DriverManagerConnectionFactory)1 PoolableConnectionFactory (org.apache.commons.dbcp.PoolableConnectionFactory)1 PoolingDataSource (org.apache.commons.dbcp.PoolingDataSource)1 KeyedObjectPoolFactory (org.apache.commons.pool.KeyedObjectPoolFactory)1 GenericKeyedObjectPoolFactory (org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory)1