Search in sources :

Example 11 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class DruidAbstractDataSource method getFilterClasses.

public String[] getFilterClasses() {
    List<Filter> filterConfigList = getProxyFilters();
    List<String> classes = new ArrayList<String>();
    for (Filter filter : filterConfigList) {
        classes.add(filter.getClass().getName());
    }
    return classes.toArray(new String[classes.size()]);
}
Also used : Filter(com.alibaba.druid.filter.Filter) ArrayList(java.util.ArrayList) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList)

Example 12 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class DruidDataSource method init.

public void init() throws SQLException {
    if (inited) {
        return;
    }
    final ReentrantLock lock = this.lock;
    try {
        lock.lockInterruptibly();
    } catch (InterruptedException e) {
        throw new SQLException("interrupt", e);
    }
    boolean init = false;
    try {
        if (inited) {
            return;
        }
        initStackTrace = Utils.toString(Thread.currentThread().getStackTrace());
        this.id = DruidDriver.createDataSourceId();
        if (this.id > 1) {
            long delta = (this.id - 1) * 100000;
            this.connectionIdSeed.addAndGet(delta);
            this.statementIdSeed.addAndGet(delta);
            this.resultSetIdSeed.addAndGet(delta);
            this.transactionIdSeed.addAndGet(delta);
        }
        if (this.jdbcUrl != null) {
            this.jdbcUrl = this.jdbcUrl.trim();
            initFromWrapDriverUrl();
        }
        for (Filter filter : filters) {
            filter.init(this);
        }
        if (this.dbType == null || this.dbType.length() == 0) {
            this.dbType = JdbcUtils.getDbType(jdbcUrl, null);
        }
        if (//
        JdbcConstants.MYSQL.equals(this.dbType) || JdbcConstants.MARIADB.equals(this.dbType)) {
            boolean cacheServerConfigurationSet = false;
            if (this.connectProperties.containsKey("cacheServerConfiguration")) {
                cacheServerConfigurationSet = true;
            } else if (this.jdbcUrl.indexOf("cacheServerConfiguration") != -1) {
                cacheServerConfigurationSet = true;
            }
            if (cacheServerConfigurationSet) {
                this.connectProperties.put("cacheServerConfiguration", "true");
            }
        }
        if (maxActive <= 0) {
            throw new IllegalArgumentException("illegal maxActive " + maxActive);
        }
        if (maxActive < minIdle) {
            throw new IllegalArgumentException("illegal maxActive " + maxActive);
        }
        if (getInitialSize() > maxActive) {
            throw new IllegalArgumentException("illegal initialSize " + this.initialSize + ", maxActive " + maxActive);
        }
        if (timeBetweenLogStatsMillis > 0 && useGlobalDataSourceStat) {
            throw new IllegalArgumentException("timeBetweenLogStatsMillis not support useGlobalDataSourceStat=true");
        }
        if (maxEvictableIdleTimeMillis < minEvictableIdleTimeMillis) {
            throw new SQLException("maxEvictableIdleTimeMillis must be grater than minEvictableIdleTimeMillis");
        }
        if (this.driverClass != null) {
            this.driverClass = driverClass.trim();
        }
        initFromSPIServiceLoader();
        if (this.driver == null) {
            if (this.driverClass == null || this.driverClass.isEmpty()) {
                this.driverClass = JdbcUtils.getDriverClassName(this.jdbcUrl);
            }
            if (MockDriver.class.getName().equals(driverClass)) {
                driver = MockDriver.instance;
            } else {
                driver = JdbcUtils.createDriver(driverClassLoader, driverClass);
            }
        } else {
            if (this.driverClass == null) {
                this.driverClass = driver.getClass().getName();
            }
        }
        initCheck();
        initExceptionSorter();
        initValidConnectionChecker();
        validationQueryCheck();
        if (isUseGlobalDataSourceStat()) {
            dataSourceStat = JdbcDataSourceStat.getGlobal();
            if (dataSourceStat == null) {
                dataSourceStat = new JdbcDataSourceStat("Global", "Global", this.dbType);
                JdbcDataSourceStat.setGlobal(dataSourceStat);
            }
            if (dataSourceStat.getDbType() == null) {
                dataSourceStat.setDbType(this.dbType);
            }
        } else {
            dataSourceStat = new JdbcDataSourceStat(this.name, this.jdbcUrl, this.dbType, this.connectProperties);
        }
        dataSourceStat.setResetStatEnable(this.resetStatEnable);
        connections = new DruidConnectionHolder[maxActive];
        evictConnections = new DruidConnectionHolder[maxActive];
        keepAliveConnections = new DruidConnectionHolder[maxActive];
        SQLException connectError = null;
        try {
            // init connections
            for (int i = 0, size = getInitialSize(); i < size; ++i) {
                PhysicalConnectionInfo pyConnectInfo = createPhysicalConnection();
                DruidConnectionHolder holder = new DruidConnectionHolder(this, pyConnectInfo);
                connections[poolingCount] = holder;
                incrementPoolingCount();
            }
            if (poolingCount > 0) {
                poolingPeak = poolingCount;
                poolingPeakTime = System.currentTimeMillis();
            }
        } catch (SQLException ex) {
            LOG.error("init datasource error, url: " + this.getUrl(), ex);
            connectError = ex;
        }
        createAndLogThread();
        createAndStartCreatorThread();
        createAndStartDestroyThread();
        initedLatch.await();
        init = true;
        initedTime = new Date();
        registerMbean();
        if (connectError != null && poolingCount == 0) {
            throw connectError;
        }
        if (keepAlive) {
            // async fill to minIdle
            if (createScheduler != null) {
                for (int i = 0; i < minIdle; ++i) {
                    createTaskCount++;
                    CreateConnectionTask task = new CreateConnectionTask();
                    createScheduler.submit(task);
                }
            } else {
                this.emptySignal();
            }
        }
    } catch (SQLException e) {
        LOG.error("{dataSource-" + this.getID() + "} init error", e);
        throw e;
    } catch (InterruptedException e) {
        throw new SQLException(e.getMessage(), e);
    } finally {
        inited = true;
        lock.unlock();
        if (init && LOG.isInfoEnabled()) {
            LOG.info("{dataSource-" + this.getID() + "} inited");
        }
    }
}
Also used : ReentrantLock(java.util.concurrent.locks.ReentrantLock) MockDriver(com.alibaba.druid.mock.MockDriver) SQLException(java.sql.SQLException) JdbcDataSourceStat(com.alibaba.druid.stat.JdbcDataSourceStat) Date(java.util.Date) WallFilter(com.alibaba.druid.wall.WallFilter) Filter(com.alibaba.druid.filter.Filter)

Example 13 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class DruidPooledConnection method syncClose.

public void syncClose() throws SQLException {
    lock.lock();
    try {
        if (this.disable) {
            return;
        }
        DruidConnectionHolder holder = this.holder;
        if (holder == null) {
            if (dupCloseLogEnable) {
                LOG.error("dup close");
            }
            return;
        }
        for (ConnectionEventListener listener : holder.getConnectionEventListeners()) {
            listener.connectionClosed(new ConnectionEvent(this));
        }
        DruidAbstractDataSource dataSource = holder.getDataSource();
        List<Filter> filters = dataSource.getProxyFilters();
        if (filters.size() > 0) {
            FilterChainImpl filterChain = new FilterChainImpl(dataSource);
            filterChain.dataSource_recycle(this);
        } else {
            recycle();
        }
        this.disable = true;
    } finally {
        lock.unlock();
    }
}
Also used : FilterChainImpl(com.alibaba.druid.filter.FilterChainImpl) Filter(com.alibaba.druid.filter.Filter) ConnectionEvent(javax.sql.ConnectionEvent) ConnectionEventListener(javax.sql.ConnectionEventListener)

Example 14 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class DruidPooledConnection method close.

@Override
public void close() throws SQLException {
    if (this.disable) {
        return;
    }
    DruidConnectionHolder holder = this.holder;
    if (holder == null) {
        if (dupCloseLogEnable) {
            LOG.error("dup close");
        }
        return;
    }
    DruidAbstractDataSource dataSource = holder.getDataSource();
    boolean isSameThread = this.getOwnerThread() == Thread.currentThread();
    if (!isSameThread) {
        dataSource.setAsyncCloseConnectionEnable(true);
    }
    if (dataSource.isAsyncCloseConnectionEnable()) {
        syncClose();
        return;
    }
    for (ConnectionEventListener listener : holder.getConnectionEventListeners()) {
        listener.connectionClosed(new ConnectionEvent(this));
    }
    List<Filter> filters = dataSource.getProxyFilters();
    if (filters.size() > 0) {
        FilterChainImpl filterChain = new FilterChainImpl(dataSource);
        filterChain.dataSource_recycle(this);
    } else {
        recycle();
    }
    this.disable = true;
}
Also used : FilterChainImpl(com.alibaba.druid.filter.FilterChainImpl) Filter(com.alibaba.druid.filter.Filter) ConnectionEvent(javax.sql.ConnectionEvent) ConnectionEventListener(javax.sql.ConnectionEventListener)

Example 15 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class FilterManagerTest method test_loadFilter.

public void test_loadFilter() throws Exception {
    Exception error = null;
    try {
        FilterManager.loadFilter(new ArrayList<Filter>(), ErrorFilter.class.getName());
    } catch (SQLException e) {
        error = e;
    }
    Assert.assertNotNull(error);
}
Also used : Filter(com.alibaba.druid.filter.Filter) SQLException(java.sql.SQLException) SQLException(java.sql.SQLException)

Aggregations

Filter (com.alibaba.druid.filter.Filter)16 WallFilter (com.alibaba.druid.wall.WallFilter)7 SQLException (java.sql.SQLException)4 ArrayList (java.util.ArrayList)3 FilterChainImpl (com.alibaba.druid.filter.FilterChainImpl)2 DruidDataSource (com.alibaba.druid.pool.DruidDataSource)2 DataSourceProxyConfig (com.alibaba.druid.proxy.jdbc.DataSourceProxyConfig)2 ConnectionEvent (javax.sql.ConnectionEvent)2 ConnectionEventListener (javax.sql.ConnectionEventListener)2 TransactionTimeoutException (com.alibaba.druid.TransactionTimeoutException)1 AutoLoad (com.alibaba.druid.filter.AutoLoad)1 FilterAdapter (com.alibaba.druid.filter.FilterAdapter)1 FilterChain (com.alibaba.druid.filter.FilterChain)1 MockDriver (com.alibaba.druid.mock.MockDriver)1 ConnectionProxy (com.alibaba.druid.proxy.jdbc.ConnectionProxy)1 DataSourceProxy (com.alibaba.druid.proxy.jdbc.DataSourceProxy)1 DataSourceProxyImpl (com.alibaba.druid.proxy.jdbc.DataSourceProxyImpl)1 JdbcDataSourceStat (com.alibaba.druid.stat.JdbcDataSourceStat)1 WallConfig (com.alibaba.druid.wall.WallConfig)1 Connection (java.sql.Connection)1