/* * Copyright 1999-2017 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.druid.pool; import java.io.PrintWriter; import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.List; import java.util.Properties; import java.util.logging.Logger; import javax.sql.DataSource; import com.alibaba.druid.filter.Filter; public class DruidDataSourceC3P0Adapter implements DataSource, DruidDataSourceC3P0AdapterMBean { private DruidDataSource dataSource; public DruidDataSourceC3P0Adapter(){ dataSource = new DruidDataSource(); // setDefault dataSource.setInitialSize(3); acquireIncrement = 3; dataSource.setTimeBetweenConnectErrorMillis(1000); dataSource.setDefaultAutoCommit(true); dataSource.setLogAbandoned(false); dataSource.setMaxActive(15); dataSource.setMinIdle(3); dataSource.setTestOnReturn(false); dataSource.setTestOnBorrow(false); } @Override public PrintWriter getLogWriter() throws SQLException { return dataSource.getLogWriter(); } @Override public void setLogWriter(PrintWriter out) throws SQLException { dataSource.setLogWriter(out); } @Override public void setLoginTimeout(int seconds) throws SQLException { dataSource.setLoginTimeout(seconds); } @Override public int getLoginTimeout() throws SQLException { return dataSource.getLoginTimeout(); } @SuppressWarnings("unchecked") @Override public <T> T unwrap(Class<T> iface) throws SQLException { if (iface == DruidDataSourceC3P0Adapter.class) { return (T) this; } return dataSource.unwrap(iface); } @Override public boolean isWrapperFor(Class<?> iface) throws SQLException { if (iface == DruidDataSourceC3P0Adapter.class) { return true; } return dataSource.isWrapperFor(iface); } @Override public Connection getConnection() throws SQLException { return dataSource.getConnection(); } @Override public Connection getConnection(String username, String password) throws SQLException { return dataSource.getConnection(username, password); } public String getDriverClass() { return dataSource.getDriverClassName(); } public void setDriverClass(String driverClass) { dataSource.setDriverClassName(driverClass); } public String getJdbcUrl() { return dataSource.getUrl(); } public Driver getDriver() { return dataSource.getDriver(); } public void setDriver(Driver driver) { dataSource.setDriver(driver); } public void setJdbcUrl(String jdbcUrl) { dataSource.setUrl(jdbcUrl); } public Properties getProperties() { return dataSource.getConnectProperties(); } public void setProperties(Properties properties) { dataSource.setConnectProperties(properties); } public String getUser() { return dataSource.getUsername(); } public void setUser(String user) { dataSource.setUsername(user); } public String getPassword() { return dataSource.getPassword(); } public void setPassword(String password) { dataSource.setPassword(password); } public int getCheckoutTimeout() { return (int) dataSource.getMaxWait(); } public void setCheckoutTimeout(int checkoutTimeout) { dataSource.setMaxWait(checkoutTimeout); } public boolean isAutoCommitOnClose() { return dataSource.isDefaultAutoCommit(); } public void setAutoCommitOnClose(boolean autoCommitOnClose) { this.dataSource.setDefaultAutoCommit(autoCommitOnClose); } public int getIdleConnectionTestPeriod() { return (int) (dataSource.getTimeBetweenEvictionRunsMillis() / 1000); } public void setIdleConnectionTestPeriod(int idleConnectionTestPeriod) { dataSource.setTimeBetweenEvictionRunsMillis(((long) idleConnectionTestPeriod) * 1000L); } public int getInitialPoolSize() { return dataSource.getInitialSize(); } public void setInitialPoolSize(int initialPoolSize) { dataSource.setInitialSize(initialPoolSize); } public int getMaxIdleTime() { return (int) dataSource.getMinEvictableIdleTimeMillis() / 1000; } public void setMaxIdleTime(int maxIdleTime) { dataSource.setMinEvictableIdleTimeMillis(((long) maxIdleTime) * 1000L); } public int getMaxPoolSize() { return dataSource.getMaxActive(); } public void setMaxPoolSize(int maxPoolSize) { dataSource.setMaxActive(maxPoolSize); } public int getMinPoolSize() { return dataSource.getMinIdle(); } public void setMinPoolSize(int minPoolSize) { dataSource.setMinIdle(minPoolSize); } public boolean isTestConnectionOnCheckout() { return dataSource.isTestOnBorrow(); } public void setTestConnectionOnCheckout(boolean testConnectionOnCheckout) { dataSource.setTestOnBorrow(testConnectionOnCheckout); } public boolean isTestConnectionOnCheckin() { return dataSource.isTestOnReturn(); } public void setTestConnectionOnCheckin(boolean testConnectionOnCheckin) { dataSource.setTestOnReturn(testConnectionOnCheckin); } public String getPreferredTestQuery() { return dataSource.getValidationQuery(); } public void setPreferredTestQuery(String preferredTestQuery) { dataSource.setValidationQuery(preferredTestQuery); } public void setFilters(String filters) throws SQLException { dataSource.setFilters(filters); } public List<Filter> getProxyFilters() { return dataSource.getProxyFilters(); } public void setProxyFilters(List<Filter> filters) { dataSource.setProxyFilters(filters); } public String getDataSourceName() { return dataSource.getName(); } public int getNumConnections() { return dataSource.getActiveCount() + dataSource.getPoolingCount(); } public int getNumIdleConnections() { return dataSource.getPoolingCount(); } public int getNumBusyConnections() { return dataSource.getActiveCount(); } public int getNumUnclosedOrphanedConnections() { return 0; } public int getNumConnectionsDefaultUser() { return getNumConnections(); } public int getNumIdleConnectionsDefaultUser() { return getNumIdleConnections(); } public int getNumBusyConnectionsDefaultUser() { return getNumBusyConnections(); } public int getMaxStatementsPerConnection() { return dataSource.getMaxPoolPreparedStatementPerConnectionSize(); } public void setMaxStatementsPerConnection(int maxStatementsPerConnection) { dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxStatementsPerConnection); } public int getMaxStatements() { return dataSource.getMaxOpenPreparedStatements(); } public void setMaxStatements(int maxStatements) { dataSource.setMaxOpenPreparedStatements(maxStatements); } public int getUnreturnedConnectionTimeout() { return dataSource.getRemoveAbandonedTimeout(); } public void setUnreturnedConnectionTimeout(int unreturnedConnectionTimeout) { dataSource.setRemoveAbandonedTimeout(unreturnedConnectionTimeout); } public boolean isDebugUnreturnedConnectionStackTraces() { return dataSource.isLogAbandoned(); } public void setDebugUnreturnedConnectionStackTraces(boolean debugUnreturnedConnectionStackTraces) { dataSource.setLogAbandoned(debugUnreturnedConnectionStackTraces); } public int getAcquireRetryAttempts() { return dataSource.getConnectionErrorRetryAttempts(); } public void setAcquireRetryAttempts(int acquireRetryAttempts) { dataSource.setConnectionErrorRetryAttempts(acquireRetryAttempts); } public int getAcquireRetryDelay() { return (int) dataSource.getTimeBetweenConnectErrorMillis(); } public void setAcquireRetryDelay(int acquireRetryDelay) { dataSource.setTimeBetweenConnectErrorMillis(acquireRetryDelay); } public boolean isBreakAfterAcquireFailure() { return dataSource.isBreakAfterAcquireFailure(); } public void setBreakAfterAcquireFailure(boolean breakAfterAcquireFailure) { dataSource.setBreakAfterAcquireFailure(breakAfterAcquireFailure); } // ///////////////// @Override public boolean isEnable() { return dataSource.isEnable(); } @Override public void shrink() { dataSource.shrink(); } @Override public int getWaitThreadCount() { return dataSource.getWaitThreadCount(); } @Override public int getLockQueueLength() { return dataSource.getLockQueueLength(); } @Override public void close() { dataSource.close(); } // /////////////// private String overrideDefaultUser; private String overrideDefaultPassword; private int propertyCycle; private boolean usesTraditionalReflectiveProxies; private String userOverridesAsString; private int maxAdministrativeTaskTime; private int maxIdleTimeExcessConnections; private int maxConnectionAge; private String connectionCustomizerClassName; private String factoryClassLocation; private int acquireIncrement = 1; private String connectionTesterClassName; private String automaticTestTable; public String getConnectionTesterClassName() { return connectionTesterClassName; } public void setConnectionTesterClassName(String connectionTesterClassName) { this.connectionTesterClassName = connectionTesterClassName; } public String getAutomaticTestTable() { return automaticTestTable; } public void setAutomaticTestTable(String automaticTestTable) { this.automaticTestTable = automaticTestTable; } private boolean forceIgnoreUnresolvedTransactions; public boolean isForceIgnoreUnresolvedTransactions() { return forceIgnoreUnresolvedTransactions; } public void setForceIgnoreUnresolvedTransactions(boolean forceIgnoreUnresolvedTransactions) { this.forceIgnoreUnresolvedTransactions = forceIgnoreUnresolvedTransactions; } public boolean isUsesTraditionalReflectiveProxies() { return usesTraditionalReflectiveProxies; } public void setUsesTraditionalReflectiveProxies(boolean usesTraditionalReflectiveProxies) { this.usesTraditionalReflectiveProxies = usesTraditionalReflectiveProxies; } public String getUserOverridesAsString() { return userOverridesAsString; } public void setUserOverridesAsString(String userOverridesAsString) { this.userOverridesAsString = userOverridesAsString; } public int getMaxAdministrativeTaskTime() { return maxAdministrativeTaskTime; } public void setMaxAdministrativeTaskTime(int maxAdministrativeTaskTime) { this.maxAdministrativeTaskTime = maxAdministrativeTaskTime; } public int getMaxIdleTimeExcessConnections() { return maxIdleTimeExcessConnections; } public void setMaxIdleTimeExcessConnections(int maxIdleTimeExcessConnections) { this.maxIdleTimeExcessConnections = maxIdleTimeExcessConnections; } public int getMaxConnectionAge() { return maxConnectionAge; } public void setMaxConnectionAge(int maxConnectionAge) { this.maxConnectionAge = maxConnectionAge; } public String getConnectionCustomizerClassName() { return connectionCustomizerClassName; } public void setConnectionCustomizerClassName(String connectionCustomizerClassName) { this.connectionCustomizerClassName = connectionCustomizerClassName; } public String getFactoryClassLocation() { return factoryClassLocation; } public void setFactoryClassLocation(String factoryClassLocation) { this.factoryClassLocation = factoryClassLocation; } public int getAcquireIncrement() { return acquireIncrement; } public void setAcquireIncrement(int acquireIncrement) { this.acquireIncrement = acquireIncrement; } public String getOverrideDefaultUser() { return overrideDefaultUser; } public void setOverrideDefaultUser(String overrideDefaultUser) { this.overrideDefaultUser = overrideDefaultUser; } public String getOverrideDefaultPassword() { return overrideDefaultPassword; } public void setOverrideDefaultPassword(String overrideDefaultPassword) { this.overrideDefaultPassword = overrideDefaultPassword; } public int getPropertyCycle() { return propertyCycle; } public void setPropertyCycle(int propertyCycle) { this.propertyCycle = propertyCycle; } public Logger getParentLogger() throws SQLFeatureNotSupportedException { return dataSource.getParentLogger(); } }