diff options
Diffstat (limited to 'dblib/common/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java')
-rw-r--r-- | dblib/common/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java | 612 |
1 files changed, 0 insertions, 612 deletions
diff --git a/dblib/common/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java b/dblib/common/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java deleted file mode 100644 index d0a5127..0000000 --- a/dblib/common/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java +++ /dev/null @@ -1,612 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * openecomp - * ================================================================================ - * Copyright (C) 2016 - 2017 AT&T - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - */ - -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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 org.apache.tomcat.jdbc.pool; - - -import java.sql.Connection; -import java.util.Hashtable; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.Name; -import javax.naming.NamingException; -import javax.naming.RefAddr; -import javax.naming.Reference; -import javax.naming.spi.ObjectFactory; -import javax.sql.DataSource; - -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; - -/** - * <p>JNDI object factory that creates an instance of - * <code>BasicDataSource</code> that has been configured based on the - * <code>RefAddr</code> values of the specified <code>Reference</code>, - * which must match the names and data types of the - * <code>BasicDataSource</code> bean properties.</p> - * <br> - * Properties available for configuration:<br> - * <a href="http://commons.apache.org/dbcp/configuration.html">Commons DBCP properties</a><br> - *<ol> - * <li>initSQL - A query that gets executed once, right after the connection is established.</li> - * <li>testOnConnect - run validationQuery after connection has been established.</li> - * <li>validationInterval - avoid excess validation, only run validation at most at this frequency - time in milliseconds.</li> - * <li>jdbcInterceptors - a semicolon separated list of classnames extending {@link JdbcInterceptor} class.</li> - * <li>jmxEnabled - true of false, whether to register the pool with JMX.</li> - * <li>fairQueue - true of false, whether the pool should sacrifice a little bit of performance for true fairness.</li> - *</ol> - * @author Craig R. McClanahan - * @author Dirk Verbeeck - */ -public class DataSourceFactory implements ObjectFactory { - private static final Log log = LogFactory.getLog(DataSourceFactory.class); - - protected static final String PROP_DEFAULTAUTOCOMMIT = "defaultAutoCommit"; - protected static final String PROP_DEFAULTREADONLY = "defaultReadOnly"; - protected static final String PROP_DEFAULTTRANSACTIONISOLATION = "defaultTransactionIsolation"; - protected static final String PROP_DEFAULTCATALOG = "defaultCatalog"; - - protected static final String PROP_DRIVERCLASSNAME = "driverClassName"; - protected static final String PROP_PASSWORD = "password"; - protected static final String PROP_URL = "url"; - protected static final String PROP_USERNAME = "username"; - - protected static final String PROP_MAXACTIVE = "maxActive"; - protected static final String PROP_MAXIDLE = "maxIdle"; - protected static final String PROP_MINIDLE = "minIdle"; - protected static final String PROP_INITIALSIZE = "initialSize"; - protected static final String PROP_MAXWAIT = "maxWait"; - protected static final String PROP_MAXAGE = "maxAge"; - - protected static final String PROP_TESTONBORROW = "testOnBorrow"; - protected static final String PROP_TESTONRETURN = "testOnReturn"; - protected static final String PROP_TESTWHILEIDLE = "testWhileIdle"; - protected static final String PROP_TESTONCONNECT = "testOnConnect"; - protected static final String PROP_VALIDATIONQUERY = "validationQuery"; - protected static final String PROP_VALIDATIONQUERY_TIMEOUT = "validationQueryTimeout"; - protected static final String PROP_VALIDATOR_CLASS_NAME = "validatorClassName"; - - protected static final String PROP_NUMTESTSPEREVICTIONRUN = "numTestsPerEvictionRun"; - protected static final String PROP_TIMEBETWEENEVICTIONRUNSMILLIS = "timeBetweenEvictionRunsMillis"; - protected static final String PROP_MINEVICTABLEIDLETIMEMILLIS = "minEvictableIdleTimeMillis"; - - protected static final String PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED = "accessToUnderlyingConnectionAllowed"; - - protected static final String PROP_REMOVEABANDONED = "removeAbandoned"; - protected static final String PROP_REMOVEABANDONEDTIMEOUT = "removeAbandonedTimeout"; - protected static final String PROP_LOGABANDONED = "logAbandoned"; - protected static final String PROP_ABANDONWHENPERCENTAGEFULL = "abandonWhenPercentageFull"; - - protected static final String PROP_POOLPREPAREDSTATEMENTS = "poolPreparedStatements"; - protected static final String PROP_MAXOPENPREPAREDSTATEMENTS = "maxOpenPreparedStatements"; - protected static final String PROP_CONNECTIONPROPERTIES = "connectionProperties"; - - protected static final String PROP_INITSQL = "initSQL"; - protected static final String PROP_INTERCEPTORS = "jdbcInterceptors"; - protected static final String PROP_VALIDATIONINTERVAL = "validationInterval"; - protected static final String PROP_JMX_ENABLED = "jmxEnabled"; - protected static final String PROP_FAIR_QUEUE = "fairQueue"; - - protected static final String PROP_USE_EQUALS = "useEquals"; - protected static final String PROP_USE_CON_LOCK = "useLock"; - - protected static final String PROP_DATASOURCE= "dataSource"; - protected static final String PROP_DATASOURCE_JNDI = "dataSourceJNDI"; - - protected static final String PROP_SUSPECT_TIMEOUT = "suspectTimeout"; - - protected static final String PROP_ALTERNATE_USERNAME_ALLOWED = "alternateUsernameAllowed"; - - protected static final String PROP_COMMITONRETURN = "commitOnReturn"; - protected static final String PROP_ROLLBACKONRETURN = "rollbackOnReturn"; - - protected static final String PROP_USEDISPOSABLECONNECTIONFACADE = "useDisposableConnectionFacade"; - - protected static final String PROP_LOGVALIDATIONERRORS = "logValidationErrors"; - - protected static final String PROP_PROPAGATEINTERRUPTSTATE = "propagateInterruptState"; - - protected static final String PROP_IGNOREEXCEPTIONONPRELOAD = "ignoreExceptionOnPreLoad"; - - public static final int UNKNOWN_TRANSACTIONISOLATION = -1; - - public static final String OBJECT_NAME = "object_name"; - - - protected static final String[] ALL_PROPERTIES = { - PROP_DEFAULTAUTOCOMMIT, - PROP_DEFAULTREADONLY, - PROP_DEFAULTTRANSACTIONISOLATION, - PROP_DEFAULTCATALOG, - PROP_DRIVERCLASSNAME, - PROP_MAXACTIVE, - PROP_MAXIDLE, - PROP_MINIDLE, - PROP_INITIALSIZE, - PROP_MAXWAIT, - PROP_TESTONBORROW, - PROP_TESTONRETURN, - PROP_TIMEBETWEENEVICTIONRUNSMILLIS, - PROP_NUMTESTSPEREVICTIONRUN, - PROP_MINEVICTABLEIDLETIMEMILLIS, - PROP_TESTWHILEIDLE, - PROP_TESTONCONNECT, - PROP_PASSWORD, - PROP_URL, - PROP_USERNAME, - PROP_VALIDATIONQUERY, - PROP_VALIDATIONQUERY_TIMEOUT, - PROP_VALIDATOR_CLASS_NAME, - PROP_VALIDATIONINTERVAL, - PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED, - PROP_REMOVEABANDONED, - PROP_REMOVEABANDONEDTIMEOUT, - PROP_LOGABANDONED, - PROP_POOLPREPAREDSTATEMENTS, - PROP_MAXOPENPREPAREDSTATEMENTS, - PROP_CONNECTIONPROPERTIES, - PROP_INITSQL, - PROP_INTERCEPTORS, - PROP_JMX_ENABLED, - PROP_FAIR_QUEUE, - PROP_USE_EQUALS, - OBJECT_NAME, - PROP_ABANDONWHENPERCENTAGEFULL, - PROP_MAXAGE, - PROP_USE_CON_LOCK, - PROP_DATASOURCE, - PROP_DATASOURCE_JNDI, - PROP_SUSPECT_TIMEOUT, - PROP_ALTERNATE_USERNAME_ALLOWED, - PROP_COMMITONRETURN, - PROP_ROLLBACKONRETURN, - PROP_USEDISPOSABLECONNECTIONFACADE, - PROP_LOGVALIDATIONERRORS, - PROP_PROPAGATEINTERRUPTSTATE, - PROP_IGNOREEXCEPTIONONPRELOAD - }; - - // -------------------------------------------------- ObjectFactory Methods - - /** - * <p>Create and return a new <code>BasicDataSource</code> instance. If no - * instance can be created, return <code>null</code> instead.</p> - * - * @param obj The possibly null object containing location or - * reference information that can be used in creating an object - * @param name The name of this object relative to <code>nameCtx</code> - * @param nameCtx The context relative to which the <code>name</code> - * parameter is specified, or <code>null</code> if <code>name</code> - * is relative to the default initial context - * @param environment The possibly null environment that is used in - * creating this object - * - * @exception Exception if an exception occurs creating the instance - */ - @Override - public Object getObjectInstance(Object obj, Name name, Context nameCtx, - Hashtable<?,?> environment) throws Exception { - - // We only know how to deal with <code>javax.naming.Reference</code>s - // that specify a class name of "javax.sql.DataSource" - if ((obj == null) || !(obj instanceof Reference)) { - return null; - } - Reference ref = (Reference) obj; - boolean XA = false; - boolean ok = false; - if ("javax.sql.DataSource".equals(ref.getClassName())) { - ok = true; - } - if ("javax.sql.XADataSource".equals(ref.getClassName())) { - ok = true; - XA = true; - } - if (org.apache.tomcat.jdbc.pool.DataSource.class.getName().equals(ref.getClassName())) { - ok = true; - } - - if (!ok) { - log.warn(ref.getClassName()+" is not a valid class name/type for this JNDI factory."); - return null; - } - - - Properties properties = new Properties(); - for (int i = 0; i < ALL_PROPERTIES.length; i++) { - String propertyName = ALL_PROPERTIES[i]; - RefAddr ra = ref.get(propertyName); - if (ra != null) { - String propertyValue = ra.getContent().toString(); - properties.setProperty(propertyName, propertyValue); - } - } - - return createDataSource(properties,nameCtx,XA); - } - - public static PoolConfiguration parsePoolProperties(Properties properties) { - PoolConfiguration poolProperties = new PoolProperties(); - String value = null; - - value = properties.getProperty(PROP_DEFAULTAUTOCOMMIT); - if (value != null) { - poolProperties.setDefaultAutoCommit(Boolean.valueOf(value)); - } - - value = properties.getProperty(PROP_DEFAULTREADONLY); - if (value != null) { - poolProperties.setDefaultReadOnly(Boolean.valueOf(value)); - } - - value = properties.getProperty(PROP_DEFAULTTRANSACTIONISOLATION); - if (value != null) { - int level = UNKNOWN_TRANSACTIONISOLATION; - if ("NONE".equalsIgnoreCase(value)) { - level = Connection.TRANSACTION_NONE; - } else if ("READ_COMMITTED".equalsIgnoreCase(value)) { - level = Connection.TRANSACTION_READ_COMMITTED; - } else if ("READ_UNCOMMITTED".equalsIgnoreCase(value)) { - level = Connection.TRANSACTION_READ_UNCOMMITTED; - } else if ("REPEATABLE_READ".equalsIgnoreCase(value)) { - level = Connection.TRANSACTION_REPEATABLE_READ; - } else if ("SERIALIZABLE".equalsIgnoreCase(value)) { - level = Connection.TRANSACTION_SERIALIZABLE; - } else { - try { - level = Integer.parseInt(value); - } catch (NumberFormatException e) { - System.err.println("Could not parse defaultTransactionIsolation: " + value); - System.err.println("WARNING: defaultTransactionIsolation not set"); - System.err.println("using default value of database driver"); - level = UNKNOWN_TRANSACTIONISOLATION; - } - } - poolProperties.setDefaultTransactionIsolation(level); - } - - value = properties.getProperty(PROP_DEFAULTCATALOG); - if (value != null) { - poolProperties.setDefaultCatalog(value); - } - - value = properties.getProperty(PROP_DRIVERCLASSNAME); - if (value != null) { - poolProperties.setDriverClassName(value); - } - - value = properties.getProperty(PROP_MAXACTIVE); - if (value != null) { - poolProperties.setMaxActive(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_MAXIDLE); - if (value != null) { - poolProperties.setMaxIdle(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_MINIDLE); - if (value != null) { - poolProperties.setMinIdle(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_INITIALSIZE); - if (value != null) { - poolProperties.setInitialSize(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_MAXWAIT); - if (value != null) { - poolProperties.setMaxWait(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_TESTONBORROW); - if (value != null) { - poolProperties.setTestOnBorrow(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_TESTONRETURN); - if (value != null) { - poolProperties.setTestOnReturn(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_TESTONCONNECT); - if (value != null) { - poolProperties.setTestOnConnect(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_TIMEBETWEENEVICTIONRUNSMILLIS); - if (value != null) { - poolProperties.setTimeBetweenEvictionRunsMillis(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_NUMTESTSPEREVICTIONRUN); - if (value != null) { - poolProperties.setNumTestsPerEvictionRun(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_MINEVICTABLEIDLETIMEMILLIS); - if (value != null) { - poolProperties.setMinEvictableIdleTimeMillis(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_TESTWHILEIDLE); - if (value != null) { - poolProperties.setTestWhileIdle(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_PASSWORD); - if (value != null) { - poolProperties.setPassword(value); - } - - value = properties.getProperty(PROP_URL); - if (value != null) { - poolProperties.setUrl(value); - } - - value = properties.getProperty(PROP_USERNAME); - if (value != null) { - poolProperties.setUsername(value); - } - - value = properties.getProperty(PROP_VALIDATIONQUERY); - if (value != null) { - poolProperties.setValidationQuery(value); - } - - value = properties.getProperty(PROP_VALIDATIONQUERY_TIMEOUT); - if (value != null) { - poolProperties.setValidationQueryTimeout(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_VALIDATOR_CLASS_NAME); - if (value != null) { - poolProperties.setValidatorClassName(value); - } - - value = properties.getProperty(PROP_VALIDATIONINTERVAL); - if (value != null) { - poolProperties.setValidationInterval(Long.parseLong(value)); - } - - value = properties.getProperty(PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED); - if (value != null) { - poolProperties.setAccessToUnderlyingConnectionAllowed(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_REMOVEABANDONED); - if (value != null) { - poolProperties.setRemoveAbandoned(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_REMOVEABANDONEDTIMEOUT); - if (value != null) { - poolProperties.setRemoveAbandonedTimeout(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_LOGABANDONED); - if (value != null) { - poolProperties.setLogAbandoned(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_POOLPREPAREDSTATEMENTS); - if (value != null) { - log.warn(PROP_POOLPREPAREDSTATEMENTS + " is not a valid setting, it will have no effect."); - } - - value = properties.getProperty(PROP_MAXOPENPREPAREDSTATEMENTS); - if (value != null) { - log.warn(PROP_MAXOPENPREPAREDSTATEMENTS + " is not a valid setting, it will have no effect."); - } - - value = properties.getProperty(PROP_CONNECTIONPROPERTIES); - if (value != null) { - Properties p = getProperties(value); - poolProperties.setDbProperties(p); - } else { - poolProperties.setDbProperties(new Properties()); - } - - if (poolProperties.getUsername()!=null) { - poolProperties.getDbProperties().setProperty("user",poolProperties.getUsername()); - } - if (poolProperties.getPassword()!=null) { - poolProperties.getDbProperties().setProperty("password",poolProperties.getPassword()); - } - - value = properties.getProperty(PROP_INITSQL); - if (value != null) { - poolProperties.setInitSQL(value); - } - - value = properties.getProperty(PROP_INTERCEPTORS); - if (value != null) { - poolProperties.setJdbcInterceptors(value); - } - - value = properties.getProperty(PROP_JMX_ENABLED); - if (value != null) { - poolProperties.setJmxEnabled(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_FAIR_QUEUE); - if (value != null) { - poolProperties.setFairQueue(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_USE_EQUALS); - if (value != null) { - poolProperties.setUseEquals(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(OBJECT_NAME); - if (value != null) { - poolProperties.setName(ObjectName.quote(value)); - } - - value = properties.getProperty(PROP_ABANDONWHENPERCENTAGEFULL); - if (value != null) { - poolProperties.setAbandonWhenPercentageFull(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_MAXAGE); - if (value != null) { - poolProperties.setMaxAge(Long.parseLong(value)); - } - - value = properties.getProperty(PROP_USE_CON_LOCK); - if (value != null) { - poolProperties.setUseLock(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_DATASOURCE); - if (value != null) { - //this should never happen - throw new IllegalArgumentException("Can't set dataSource property as a string, this must be a javax.sql.DataSource object."); - - } - - value = properties.getProperty(PROP_DATASOURCE_JNDI); - if (value != null) { - poolProperties.setDataSourceJNDI(value); - } - - value = properties.getProperty(PROP_SUSPECT_TIMEOUT); - if (value != null) { - poolProperties.setSuspectTimeout(Integer.parseInt(value)); - } - - value = properties.getProperty(PROP_ALTERNATE_USERNAME_ALLOWED); - if (value != null) { - poolProperties.setAlternateUsernameAllowed(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_COMMITONRETURN); - if (value != null) { - poolProperties.setCommitOnReturn(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_ROLLBACKONRETURN); - if (value != null) { - poolProperties.setRollbackOnReturn(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_USEDISPOSABLECONNECTIONFACADE); - if (value != null) { - poolProperties.setUseDisposableConnectionFacade(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_LOGVALIDATIONERRORS); - if (value != null) { - poolProperties.setLogValidationErrors(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_PROPAGATEINTERRUPTSTATE); - if (value != null) { - poolProperties.setPropagateInterruptState(Boolean.parseBoolean(value)); - } - - value = properties.getProperty(PROP_IGNOREEXCEPTIONONPRELOAD); - if (value != null) { - poolProperties.setIgnoreExceptionOnPreLoad(Boolean.parseBoolean(value)); - } - - return poolProperties; - } - - /** - * Creates and configures a {@link DataSource} instance based on the - * given properties. - * - * @param properties the datasource configuration properties - * @return the datasource - * @throws Exception if an error occurs creating the data source - */ - public DataSource createDataSource(Properties properties) throws Exception { - return createDataSource(properties,null,false); - } - public DataSource createDataSource(Properties properties,Context context, boolean XA) throws Exception { - PoolConfiguration poolProperties = DataSourceFactory.parsePoolProperties(properties); - if (poolProperties.getDataSourceJNDI()!=null && poolProperties.getDataSource()==null) { - performJNDILookup(context, poolProperties); - } - org.apache.tomcat.jdbc.pool.DataSource dataSource = XA? - new org.apache.tomcat.jdbc.pool.XADataSource(poolProperties) : - new org.apache.tomcat.jdbc.pool.DataSource(poolProperties); - //initialise the pool itself - dataSource.createPool(); - // Return the configured DataSource instance - return dataSource; - } - - public void performJNDILookup(Context context, PoolConfiguration poolProperties) { - Object jndiDS = null; - try { - if (context!=null) { - jndiDS = context.lookup(poolProperties.getDataSourceJNDI()); - } else { - log.warn("dataSourceJNDI property is configured, but local JNDI context is null."); - } - } catch (NamingException e) { - log.debug("The name \""+poolProperties.getDataSourceJNDI()+"\" cannot be found in the local context."); - } - if (jndiDS==null) { - try { - context = new InitialContext(); - jndiDS = context.lookup(poolProperties.getDataSourceJNDI()); - } catch (NamingException e) { - log.warn("The name \""+poolProperties.getDataSourceJNDI()+"\" cannot be found in the InitialContext."); - } - } - if (jndiDS!=null) { - poolProperties.setDataSource(jndiDS); - } - } - - /** - * Parse properties from the string. Format of the string must be [propertyName=property;]*. - * @param propText The properties string - * @return the properties - */ - protected static Properties getProperties(String propText) { - return PoolProperties.getProperties(propText,null); - } - -} |