You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2016/01/01 18:59:05 UTC
svn commit: r1722514 - in /jmeter/trunk: ./ lib/ licenses/bin/ res/maven/
src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/ xdocs/
xdocs/usermanual/
Author: pmouawad
Date: Fri Jan 1 17:59:04 2016
New Revision: 1722514
URL: http://svn.apache.org/viewvc?rev=1722514&view=rev
Log:
Bug 58786 - JDBC Sampler : Replace Excalibur DataSource by more up to date library commons-dbcp2
Bugzilla Id: 58786
Modified:
jmeter/trunk/build.properties
jmeter/trunk/build.xml
jmeter/trunk/eclipse.classpath
jmeter/trunk/lib/ (props changed)
jmeter/trunk/lib/aareadme.txt
jmeter/trunk/licenses/bin/README.txt
jmeter/trunk/res/maven/ApacheJMeter_parent.pom
jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java
jmeter/trunk/xdocs/changes.xml
jmeter/trunk/xdocs/usermanual/component_reference.xml
Modified: jmeter/trunk/build.properties
URL: http://svn.apache.org/viewvc/jmeter/trunk/build.properties?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/build.properties (original)
+++ jmeter/trunk/build.properties Fri Jan 1 17:59:04 2016
@@ -85,6 +85,11 @@ commons-collections.jar = commons-co
commons-collections.loc = ${maven2.repo}/commons-collections/commons-collections/${commons-collections.version}
commons-collections.md5 = f54a8510f834a1a57166970bfc982e94
+commons-dbcp2.version = 2.1.1
+commons-dbcp2.jar = commons-dbcp2-${commons-dbcp2.version}.jar
+commons-dbcp2.loc = ${maven2.repo}/org/apache/commons/commons-dbcp2/${commons-dbcp2.version}
+commons-dbcp2.md5 = 298897b1e785b933b0522351871cf7ae
+
commons-httpclient.version = 3.1
commons-httpclient.jar = commons-httpclient-${commons-httpclient.version}.jar
commons-httpclient.loc = ${maven2.repo}/commons-httpclient/commons-httpclient/${commons-httpclient.version}
@@ -110,7 +115,6 @@ commons-lang3.jar = commons-la
commons-lang3.loc = ${maven2.repo}/org/apache/commons/commons-lang3/${commons-lang3.version}
commons-lang3.md5 = 8667a442ee77e509fbe8176b94726eb2
-
commons-logging.version = 1.2
commons-logging.jar = commons-logging-${commons-logging.version}.jar
commons-logging.loc = ${maven2.repo}/commons-logging/commons-logging/${commons-logging.version}
Modified: jmeter/trunk/build.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/build.xml?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/build.xml (original)
+++ jmeter/trunk/build.xml Fri Jan 1 17:59:04 2016
@@ -365,6 +365,7 @@
<include name="${lib.dir}/${beanshell.jar}"/>
<include name="${lib.dir}/${commons-codec.jar}"/>
<include name="${lib.dir}/${commons-collections.jar}"/>
+ <include name="${lib.dir}/${commons-dbcp2.jar}"/>
<include name="${lib.dir}/${commons-httpclient.jar}"/>
<include name="${lib.dir}/${commons-io.jar}"/>
<include name="${lib.dir}/${commons-jexl.jar}"/>
@@ -375,12 +376,7 @@
<include name="${lib.dir}/${commons-net.jar}"/>
<include name="${lib.dir}/${commons-pool2.jar}"/>
<include name="${lib.dir}/${dnsjava.jar}"/>
- <include name="${lib.dir}/${excalibur-datasource.jar}"/>
- <include name="${lib.dir}/${excalibur-instrument.jar}"/>
<include name="${lib.dir}/${excalibur-logger.jar}"/>
- <include name="${lib.dir}/${excalibur-pool-api.jar}"/>
- <include name="${lib.dir}/${excalibur-pool-impl.jar}"/>
- <include name="${lib.dir}/${excalibur-pool-instrumented.jar}"/>
<include name="${lib.dir}/${freemarker.jar}"/>
<include name="${lib.dir}/${htmllexer.jar}"/>
<include name="${lib.dir}/${htmlparser.jar}"/>
@@ -442,6 +438,7 @@
<pathelement location="${lib.dir}/${beanshell.jar}"/>
<pathelement location="${lib.dir}/${commons-codec.jar}"/>
<pathelement location="${lib.dir}/${commons-collections.jar}"/>
+ <pathelement location="${lib.dir}/${commons-dbcp2.jar}"/>
<pathelement location="${lib.dir}/${commons-httpclient.jar}"/>
<pathelement location="${lib.dir}/${commons-io.jar}"/>
<pathelement location="${lib.dir}/${commons-jexl.jar}"/>
@@ -452,12 +449,7 @@
<pathelement location="${lib.dir}/${commons-net.jar}"/>
<pathelement location="${lib.dir}/${commons-pool2.jar}"/>
<pathelement location="${lib.dir}/${dnsjava.jar}"/>
- <pathelement location="${lib.dir}/${excalibur-datasource.jar}"/>
- <pathelement location="${lib.dir}/${excalibur-instrument.jar}"/>
<pathelement location="${lib.dir}/${excalibur-logger.jar}"/>
- <pathelement location="${lib.dir}/${excalibur-pool-api.jar}"/>
- <pathelement location="${lib.dir}/${excalibur-pool-impl.jar}"/>
- <pathelement location="${lib.dir}/${excalibur-pool-instrumented.jar}"/>
<pathelement location="${lib.dir}/${freemarker.jar}"/>
<pathelement location="${lib.dir}/${htmllexer.jar}"/>
<pathelement location="${lib.dir}/${htmlparser.jar}"/>
@@ -488,7 +480,7 @@
<pathelement location="${lib.dir}/${jtidy.jar}"/>
<pathelement location="${lib.dir}/${tika-core.jar}"/>
<pathelement location="${lib.dir}/${tika-parsers.jar}"/>
- <pathelement location="${lib.dir}/${xalan.jar}"/>
+ <pathelement location="${lib.dir}/${xalan.jar}"/>
<pathelement location="${lib.dir}/${xerces.jar}"/>
<pathelement location="${lib.dir}/${xml-apis.jar}"/>
<pathelement location="${lib.dir}/${xmlgraphics-commons.jar}"/>
@@ -871,7 +863,7 @@
<target name="package" depends="compile, prepare-resources, package-only"
description="Compile everything and create the jars"/>
- <target name="package-and-check" depends="package, checkstyle"
+ <target name="package-and-check" depends="clean, package, checkstyle"
description="Compile, create jars and apply checkstyle before commiting code"/>
<target name="prepare-resources"
@@ -2843,6 +2835,7 @@ run JMeter unless all the JMeter jars ar
<process_jarfile jarname="beanshell"/>
<process_jarfile jarname="commons-codec"/>
<process_jarfile jarname="commons-collections"/>
+ <process_jarfile jarname="commons-dbcp2"/>
<process_jarfile jarname="commons-httpclient"/>
<process_jarfile jarname="commons-io"/>
<process_jarfile jarname="commons-jexl"/>
@@ -2853,12 +2846,7 @@ run JMeter unless all the JMeter jars ar
<process_jarfile jarname="commons-net"/>
<process_jarfile jarname="commons-pool2"/>
<process_jarfile jarname="dnsjava"/>
- <process_jarfile jarname="excalibur-datasource"/>
- <process_jarfile jarname="excalibur-instrument"/>
<process_jarfile jarname="excalibur-logger"/>
- <process_jarfile jarname="excalibur-pool-api"/>
- <process_jarfile jarname="excalibur-pool-impl"/>
- <process_jarfile jarname="excalibur-pool-instrumented"/>
<process_jarfile jarname="freemarker"/>
<process_jarfile jarname="htmllexer"/>
<process_jarfile jarname="htmlparser"/>
@@ -2925,7 +2913,6 @@ run JMeter unless all the JMeter jars ar
<delete verbose="true">
<fileset dir="${lib.api}" includes="bcmail-jdk15-*.jar bcprov-jdk15-*.jar"/>
<!-- tidy up old pool jar -->
- <fileset dir="${lib.dir}" includes="excalibur-pool-1.2.jar"/>
</delete>
<antcall target="_process_all_jars">
<param name="_get_file" value="true"/>
Modified: jmeter/trunk/eclipse.classpath
URL: http://svn.apache.org/viewvc/jmeter/trunk/eclipse.classpath?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/eclipse.classpath (original)
+++ jmeter/trunk/eclipse.classpath Fri Jan 1 17:59:04 2016
@@ -48,6 +48,7 @@
<classpathentry kind="lib" path="lib/bsh-2.0b5.jar"/>
<classpathentry kind="lib" path="lib/commons-codec-1.10.jar"/>
<classpathentry kind="lib" path="lib/commons-collections-3.2.2.jar"/>
+ <classpathentry kind="lib" path="lib/commons-dbcp2-2.1.1.jar"/>
<classpathentry kind="lib" path="lib/commons-httpclient-3.1.jar"/>
<classpathentry kind="lib" path="lib/commons-io-2.4.jar"/>
<classpathentry kind="lib" path="lib/commons-jexl-1.1.jar"/>
@@ -58,12 +59,7 @@
<classpathentry kind="lib" path="lib/commons-net-3.4.jar"/>
<classpathentry kind="lib" path="lib/commons-pool2-2.4.2.jar"/>
<classpathentry kind="lib" path="lib/dnsjava-2.1.7.jar"/>
- <classpathentry kind="lib" path="lib/excalibur-datasource-2.1.jar"/>
- <classpathentry kind="lib" path="lib/excalibur-instrument-1.0.jar"/>
<classpathentry kind="lib" path="lib/excalibur-logger-1.1.jar"/>
- <classpathentry kind="lib" path="lib/excalibur-pool-api-2.1.jar"/>
- <classpathentry kind="lib" path="lib/excalibur-pool-impl-2.1.jar"/>
- <classpathentry kind="lib" path="lib/excalibur-pool-instrumented-2.1.jar"/>
<classpathentry kind="lib" path="lib/freemarker-2.3.23.jar"/>
<classpathentry kind="lib" path="lib/geronimo-jms_1.1_spec-1.1.1.jar"/>
<classpathentry kind="lib" path="lib/htmllexer-2.1.jar"/>
Propchange: jmeter/trunk/lib/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Jan 1 17:59:04 2016
@@ -6,6 +6,7 @@ bsh-2.0b5.jar
bshclient.jar
commons-codec-1.10.jar
commons-collections-3.2.2.jar
+commons-dbcp2-2.1.1.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-jexl-1.1.jar
@@ -16,19 +17,14 @@ commons-math3-3.5.jar
commons-net-3.4.jar
commons-pool2-2.4.2.jar
dnsjava-2.1.7.jar
-excalibur-instrument-1.0.jar
excalibur-logger-1.1.jar
-excalibur-datasource-2.1.jar
-excalibur-pool-api-2.1.jar
-excalibur-pool-impl-2.1.jar
-excalibur-pool-instrumented-2.1.jar
freemarker-2.3.23.jar
geronimo*.jar
htmllexer-2.1.jar
htmlparser-2.1.jar
-httpclient-4.2.6.jar
-httpcore-4.2.5.jar
-httpmime-4.2.6.jar
+httpclient-4.5.1.jar
+httpcore-4.4.4.jar
+httpmime-4.5.1.jar
jcharts-0.7.5.jar
jdom-1.1.3.jar
jms*.jar
Modified: jmeter/trunk/lib/aareadme.txt
URL: http://svn.apache.org/viewvc/jmeter/trunk/lib/aareadme.txt?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/lib/aareadme.txt (original)
+++ jmeter/trunk/lib/aareadme.txt Fri Jan 1 17:59:04 2016
@@ -91,22 +91,10 @@ dnsjava-2.1.7
http://www.dnsjava.org/download/
- DNSCacheManager
-excalibur-datasource-1.1.1 (org.apache.avalon.excalibur.datasource)
---------------------------
-- DataSourceElement (JDBC)
-
-excalibur-instrument-1.0 (org.apache.excalibur.instrument)
-------------------------
-- used by excalibur-datasource
-
excalibur-logger-1.1 (org.apache.avalon.excalibur.logger)
--------------------
- LoggingManager
-excalibur-pool-1.2 (org.apache.avalon.excalibur.pool)
-------------------
-- used by excalibur-datasource
-
freemarker-2.3.23.jar
----------------------
- used by Report/Dashboard feature
@@ -227,6 +215,10 @@ tika-1.11
http://tika.apache.org/
- Regular Expression Extractor
+commons-dbcp2-2.1.1 (org.apache.commons.dbcp2)
+--------------------------
+- DataSourceElement (JDBC)
+
velocity-1.7
--------------
http://velocity.apache.org/download.cgi
Modified: jmeter/trunk/licenses/bin/README.txt
URL: http://svn.apache.org/viewvc/jmeter/trunk/licenses/bin/README.txt?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/licenses/bin/README.txt (original)
+++ jmeter/trunk/licenses/bin/README.txt Fri Jan 1 17:59:04 2016
@@ -7,6 +7,7 @@ bsf-2.4.0.jar
bshclient.jar (part of JMeter)
commons-codec-1.10.jar
commons-collections-3.2.2.jar
+commons-dbcp2-2.1.1.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-jexl-1.1.jar
@@ -16,12 +17,7 @@ commons-logging-1.2.jar
commons-math3-3.5.jar
commons-net-3.4.jar
commons-pool2-2.4.2.jar
-excalibur-datasource-2.1.jar
-excalibur-instrument-1.0.jar
excalibur-logger-1.1.jar
-excalibur-pool-api-2.1.jar
-excalibur-pool-impl-2.1.jar
-excalibur-pool-instrumented-2.1.jar
geronimo-jms_1.1_spec-1.1.1.jar
httpclient-4.5.1.jar
httpcore-4.4.4.jar
Modified: jmeter/trunk/res/maven/ApacheJMeter_parent.pom
URL: http://svn.apache.org/viewvc/jmeter/trunk/res/maven/ApacheJMeter_parent.pom?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/res/maven/ApacheJMeter_parent.pom (original)
+++ jmeter/trunk/res/maven/ApacheJMeter_parent.pom Fri Jan 1 17:59:04 2016
@@ -60,6 +60,7 @@ under the License.
<bcpkix.version>1.49</bcpkix.version>
<commons-codec.version>1.10</commons-codec.version>
<commons-collections.version>3.2.2</commons-collections.version>
+ <commons-dbcp2.version>2.1.1</commons-dbcp2.version>
<commons-httpclient.version>3.1</commons-httpclient.version>
<commons-io.version>2.4</commons-io.version>
<commons-jexl.version>1.1</commons-jexl.version>
@@ -70,13 +71,7 @@ under the License.
<commons-net.version>3.4</commons-net.version>
<commons-pool2.version>2.4.2</commons-pool2.version>
<dnsjava.version>2.1.7</dnsjava.version>
- <excalibur-datasource.version>2.1</excalibur-datasource.version>
- <excalibur-instrument.version>1.0</excalibur-instrument.version>
<excalibur-logger.version>1.1</excalibur-logger.version>
- <excalibur-pool.version>2.1</excalibur-pool.version>
- <excalibur-pool-api.version>${excalibur-pool.version}</excalibur-pool-api.version>
- <excalibur-pool-impl.version>${excalibur-pool.version}</excalibur-pool-impl.version>
- <excalibur-pool-instrumented.version>${excalibur-pool.version}</excalibur-pool-instrumented.version>
<freemarker.version>2.3.23</freemarker.version>
<htmlparser.version>2.1</htmlparser.version>
<httpclient.version>4.5.1</httpclient.version>
@@ -155,6 +150,11 @@ under the License.
<version>${commons-collections.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-dbcp2</artifactId>
+ <version>${commons-dbcp2.version}</version>
+ </dependency>
+ <dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>${commons-httpclient.version}</version>
@@ -205,46 +205,11 @@ under the License.
<version>${dnsjava.version}</version>
</dependency>
<dependency>
- <groupId>excalibur-datasource</groupId>
- <artifactId>excalibur-datasource</artifactId>
- <version>${excalibur-datasource.version}</version>
- <exclusions>
- <exclusion>
- <groupId>excalibur-fortress</groupId>
- <artifactId>excalibur-fortress-container-api</artifactId>
- </exclusion>
- <exclusion>
- <groupId>excalibur-fortress</groupId>
- <artifactId>excalibur-fortress-meta</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>excalibur-instrument</groupId>
- <artifactId>excalibur-instrument</artifactId>
- <version>${excalibur-instrument.version}</version>
- </dependency>
- <dependency>
<groupId>excalibur-logger</groupId>
<artifactId>excalibur-logger</artifactId>
<version>${excalibur-logger.version}</version>
</dependency>
<dependency>
- <groupId>excalibur-pool</groupId>
- <artifactId>excalibur-pool-api</artifactId>
- <version>${excalibur-pool-api.version}</version>
- </dependency>
- <dependency>
- <groupId>excalibur-pool</groupId>
- <artifactId>excalibur-pool-impl</artifactId>
- <version>${excalibur-pool-impl.version}</version>
- </dependency>
- <dependency>
- <groupId>excalibur-pool</groupId>
- <artifactId>excalibur-pool-instrumented</artifactId>
- <version>${excalibur-pool-instrumented.version}</version>
- </dependency>
- <dependency>
<groupId>org.htmlparser</groupId>
<artifactId>htmllexer</artifactId>
<version>${htmlparser.version}</version>
Modified: jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java (original)
+++ jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java Fri Jan 1 17:59:04 2016
@@ -24,12 +24,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import org.apache.avalon.excalibur.datasource.DataSourceComponent;
-import org.apache.avalon.excalibur.datasource.ResourceLimitingJdbcDataSource;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.configuration.DefaultConfiguration;
-import org.apache.avalon.framework.logger.LogKitLogger;
+import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.jmeter.config.ConfigElement;
import org.apache.jmeter.testbeans.TestBean;
import org.apache.jmeter.testbeans.TestBeanHelper;
@@ -42,26 +37,35 @@ import org.apache.jorphan.util.JOrphanUt
import org.apache.log.Logger;
public class DataSourceElement extends AbstractTestElement
- implements ConfigElement, TestStateListener, TestBean
- {
+ implements ConfigElement, TestStateListener, TestBean {
private static final Logger log = LoggingManager.getLoggerForClass();
- private static final long serialVersionUID = 233L;
+ private static final long serialVersionUID = 234L;
- private transient String dataSource, driver, dbUrl, username, password, checkQuery, poolMax, connectionAge, timeout,
- trimInterval,transactionIsolation;
+ private transient String dataSource;
+ private transient String driver;
+ private transient String dbUrl;
+ private transient String username;
+ private transient String password;
+ private transient String checkQuery;
+ private transient String poolMax;
+ private transient String connectionAge;
+ private transient String timeout;
+ private transient String trimInterval;
+ private transient String transactionIsolation;
- private transient boolean keepAlive, autocommit;
+ private transient boolean keepAlive;
+ private transient boolean autocommit;
/*
* The datasource is set up by testStarted and cleared by testEnded.
* These are called from different threads, so access must be synchronized.
* The same instance is called in each case.
*/
- private transient ResourceLimitingJdbcDataSource excaliburSource;
+ private transient BasicDataSource dbcpDataSource;
// Keep a record of the pre-thread pools so that they can be disposed of at the end of a test
- private transient Set<ResourceLimitingJdbcDataSource> perThreadPoolSet;
+ private transient Set<BasicDataSource> perThreadPoolSet;
public DataSourceElement() {
}
@@ -69,15 +73,23 @@ public class DataSourceElement extends A
@Override
public void testEnded() {
synchronized (this) {
- if (excaliburSource != null) {
- excaliburSource.dispose();
+ if (dbcpDataSource != null) {
+ try {
+ dbcpDataSource.close();
+ } catch (SQLException ex) {
+ log.error("Error closing pool:"+getName(), ex);
+ }
}
- excaliburSource = null;
+ dbcpDataSource = null;
}
if (perThreadPoolSet != null) {// in case
- for(ResourceLimitingJdbcDataSource dsc : perThreadPoolSet){
- log.debug("Disposing pool: "+dsc.getInstrumentableName()+" @"+System.identityHashCode(dsc));
- dsc.dispose();
+ for(BasicDataSource dsc : perThreadPoolSet){
+ log.debug("Closing pool: "+ getDataSourceName()+" @"+System.identityHashCode(dsc));
+ try {
+ dsc.close();
+ } catch (SQLException ex) {
+ log.error("Error closing pool:"+getName(), ex);
+ }
}
perThreadPoolSet=null;
}
@@ -100,14 +112,14 @@ public class DataSourceElement extends A
log.error("JDBC data source already defined for: "+poolName);
} else {
String maxPool = getPoolMax();
- perThreadPoolSet = Collections.synchronizedSet(new HashSet<ResourceLimitingJdbcDataSource>());
+ perThreadPoolSet = Collections.synchronizedSet(new HashSet<BasicDataSource>());
if (maxPool.equals("0")){ // i.e. if we want per thread pooling
variables.putObject(poolName, new DataSourceComponentImpl()); // pool will be created later
} else {
- ResourceLimitingJdbcDataSource src=initPool(maxPool);
+ BasicDataSource src = initPool(maxPool);
synchronized(this){
- excaliburSource = src;
- variables.putObject(poolName, new DataSourceComponentImpl(excaliburSource));
+ dbcpDataSource = src;
+ variables.putObject(poolName, new DataSourceComponentImpl(dbcpDataSource));
}
}
}
@@ -122,7 +134,7 @@ public class DataSourceElement extends A
public Object clone() {
DataSourceElement el = (DataSourceElement) super.clone();
synchronized (this) {
- el.excaliburSource = excaliburSource;
+ el.dbcpDataSource = dbcpDataSource;
el.perThreadPoolSet = perThreadPoolSet;
}
return el;
@@ -140,8 +152,8 @@ public class DataSourceElement extends A
if (poolObject == null) {
throw new SQLException("No pool found named: '" + poolName + "', ensure Variable Name matches Variable Name of JDBC Connection Configuration");
} else {
- if(poolObject instanceof DataSourceComponent) {
- DataSourceComponent pool = (DataSourceComponent) poolObject;
+ if(poolObject instanceof DataSourceComponentImpl) {
+ DataSourceComponentImpl pool = (DataSourceComponentImpl) poolObject;
return pool.getConnection();
} else {
String errorMsg = "Found object stored under variable:'"+poolName
@@ -156,10 +168,8 @@ public class DataSourceElement extends A
* Set up the DataSource - maxPool is a parameter, so the same code can
* also be used for setting up the per-thread pools.
*/
- private ResourceLimitingJdbcDataSource initPool(String maxPool) {
- ResourceLimitingJdbcDataSource source = null;
- source = new ResourceLimitingJdbcDataSource();
- DefaultConfiguration config = new DefaultConfiguration("rl-jdbc"); // $NON-NLS-1$
+ private BasicDataSource initPool(String maxPool) {
+ BasicDataSource dataSource = new BasicDataSource();
if (log.isDebugEnabled()) {
StringBuilder sb = new StringBuilder(40);
@@ -173,17 +183,14 @@ public class DataSourceElement extends A
sb.append(isAutocommit());
log.debug(sb.toString());
}
- DefaultConfiguration poolController = new DefaultConfiguration("pool-controller"); // $NON-NLS-1$
- poolController.setAttribute("max", maxPool); // $NON-NLS-1$
- poolController.setAttribute("max-strict", "true"); // $NON-NLS-1$ $NON-NLS-2$
- poolController.setAttribute("blocking", "true"); // $NON-NLS-1$ $NON-NLS-2$
- poolController.setAttribute("timeout", getTimeout()); // $NON-NLS-1$
- poolController.setAttribute("trim-interval", getTrimInterval()); // $NON-NLS-1$
- config.addChild(poolController);
-
- DefaultConfiguration autoCommit = new DefaultConfiguration("auto-commit"); // $NON-NLS-1$
- autoCommit.setValue(String.valueOf(isAutocommit()));
- config.addChild(autoCommit);
+ int poolSize = Integer.parseInt(maxPool);
+ dataSource.setMinIdle(0);
+ dataSource.setInitialSize(poolSize);
+ dataSource.setMaxIdle(poolSize);
+ dataSource.setMaxTotal(poolSize);
+ dataSource.setMaxWaitMillis(Long.parseLong(getTimeout()));
+
+ dataSource.setDefaultAutoCommit(Boolean.valueOf(isAutocommit()));
if (log.isDebugEnabled()) {
StringBuilder sb = new StringBuilder(40);
@@ -195,11 +202,22 @@ public class DataSourceElement extends A
sb.append(getCheckQuery());
log.debug(sb.toString());
}
- DefaultConfiguration cfgKeepAlive = new DefaultConfiguration("keep-alive"); // $NON-NLS-1$
- cfgKeepAlive.setAttribute("disable", String.valueOf(!isKeepAlive())); // $NON-NLS-1$
- cfgKeepAlive.setAttribute("age", getConnectionAge()); // $NON-NLS-1$
- cfgKeepAlive.setValue(getCheckQuery());
- poolController.addChild(cfgKeepAlive);
+ dataSource.setTestOnBorrow(false);
+ dataSource.setTestOnReturn(false);
+ dataSource.setTestOnCreate(false);
+ dataSource.setTestWhileIdle(false);
+
+ if(isKeepAlive()) {
+ dataSource.setTestWhileIdle(true);
+ dataSource.setValidationQuery(getCheckQuery());
+ dataSource.setMaxConnLifetimeMillis(Long.parseLong(getConnectionAge()));
+ dataSource.setTimeBetweenEvictionRunsMillis(Integer.parseInt(getTrimInterval()));
+ }
+
+ int transactionIsolation = DataSourceElementBeanInfo.getTransactionIsolationMode(getTransactionIsolation());
+ if (transactionIsolation >= 0) {
+ dataSource.setDefaultTransactionIsolation(transactionIsolation);
+ }
String _username = getUsername();
if (log.isDebugEnabled()) {
@@ -212,38 +230,27 @@ public class DataSourceElement extends A
sb.append(_username);
log.debug(sb.toString());
}
- DefaultConfiguration cfgDriver = new DefaultConfiguration("driver"); // $NON-NLS-1$
- cfgDriver.setValue(getDriver());
- config.addChild(cfgDriver);
- DefaultConfiguration cfgDbUrl = new DefaultConfiguration("dburl"); // $NON-NLS-1$
- cfgDbUrl.setValue(getDbUrl());
- config.addChild(cfgDbUrl);
+ dataSource.setDriverClassName(getDriver());
+ dataSource.setUrl(getDbUrl());
if (_username.length() > 0){
- DefaultConfiguration cfgUsername = new DefaultConfiguration("user"); // $NON-NLS-1$
- cfgUsername.setValue(_username);
- config.addChild(cfgUsername);
- DefaultConfiguration cfgPassword = new DefaultConfiguration("password"); // $NON-NLS-1$
- cfgPassword.setValue(getPassword());
- config.addChild(cfgPassword);
+ dataSource.setUsername(_username);
+ dataSource.setPassword(getPassword());
}
// log is required to ensure errors are available
- source.enableLogging(new LogKitLogger(log));
- try {
- source.configure(config);
- source.setInstrumentableName(getDataSource());
- } catch (ConfigurationException e) {
- log.error("Could not configure datasource for pool: "+getDataSource(),e);
+ //source.enableLogging(new LogKitLogger(log));
+ if(log.isDebugEnabled()) {
+ log.debug("PoolConfiguration:"+this.dataSource);
}
- return source;
+ return dataSource;
}
// used to hold per-thread singleton connection pools
- private static final ThreadLocal<Map<String, ResourceLimitingJdbcDataSource>> perThreadPoolMap =
- new ThreadLocal<Map<String, ResourceLimitingJdbcDataSource>>(){
+ private static final ThreadLocal<Map<String, BasicDataSource>> perThreadPoolMap =
+ new ThreadLocal<Map<String, BasicDataSource>>(){
@Override
- protected Map<String, ResourceLimitingJdbcDataSource> initialValue() {
+ protected Map<String, BasicDataSource> initialValue() {
return new HashMap<>();
}
};
@@ -253,31 +260,34 @@ public class DataSourceElement extends A
* and per-thread pools.
*
*/
- private class DataSourceComponentImpl implements DataSourceComponent{
+ private class DataSourceComponentImpl {
- private final ResourceLimitingJdbcDataSource sharedDSC;
+ private final BasicDataSource sharedDSC;
DataSourceComponentImpl(){
sharedDSC=null;
}
- DataSourceComponentImpl(ResourceLimitingJdbcDataSource p_dsc){
+ DataSourceComponentImpl(BasicDataSource p_dsc){
sharedDSC=p_dsc;
}
- @Override
+ /**
+ * @return Connection
+ * @throws SQLException
+ */
public Connection getConnection() throws SQLException {
Connection conn = null;
- ResourceLimitingJdbcDataSource dsc = null;
+ BasicDataSource dsc = null;
if (sharedDSC != null){ // i.e. shared pool
dsc = sharedDSC;
} else {
- Map<String, ResourceLimitingJdbcDataSource> poolMap = perThreadPoolMap.get();
- dsc = poolMap.get(getDataSource());
+ Map<String, BasicDataSource> poolMap = perThreadPoolMap.get();
+ dsc = poolMap.get(getDataSourceName());
if (dsc == null){
dsc = initPool("1");
- poolMap.put(getDataSource(),dsc);
- log.debug("Storing pool: "+dsc.getInstrumentableName()+" @"+System.identityHashCode(dsc));
+ poolMap.put(getDataSourceName(),dsc);
+ log.debug("Storing pool: "+getName()+" @"+System.identityHashCode(dsc));
perThreadPoolSet.add(dsc);
}
}
@@ -298,11 +308,6 @@ public class DataSourceElement extends A
}
return conn;
}
-
- @Override
- public void configure(Configuration arg0) throws ConfigurationException {
- }
-
}
@Override
@@ -358,6 +363,10 @@ public class DataSourceElement extends A
public void setDataSource(String dataSource) {
this.dataSource = dataSource;
}
+
+ private String getDataSourceName() {
+ return getDataSource();
+ }
/**
* @return Returns the dbUrl.
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Fri Jan 1 17:59:04 2016
@@ -101,6 +101,7 @@ Summary
<li><bug>57928</bug>Add ability to define protocol (http/https) to AccessLogSampler GUI. Contributed by Jérémie Lesage (jeremie.lesage at jeci.fr)</li>
<li><bug>58300</bug> Make existing Java Samplers implement Interruptible</li>
<li><bug>58160</bug>JMS Publisher : reload file content if file name changes. Based partly on a patch contributed by Maxime Chassagneux (maxime.chassagneux at gmail.com)</li>
+ <li><bug>58786</bug>JDBC Sampler : Replace Excalibur DataSource by more up to date library commons-dbcp2</li>
</ul>
<h3>Controllers</h3>
Modified: jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1722514&r1=1722513&r2=1722514&view=diff
==============================================================================
--- jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jmeter/trunk/xdocs/usermanual/component_reference.xml Fri Jan 1 17:59:04 2016
@@ -4143,7 +4143,7 @@ instead. (see figures 12 and 13).</p>
</property>
<property name="Pool timeout" required="Yes">Pool throws an error if the timeout period is exceeded in the
process of trying to retrieve a connection</property>
- <property name="Idle Cleanup Interval (ms)" required="Yes">This is used to specify how long idle connections will be maintained in the pool before being closed. For a complete explanation on how this works, see <a href="http://excalibur.apache.org/apidocs/org/apache/avalon/excalibur/pool/ResourceLimitingPool.html#trim%28%29">ResourceLimitingPool.trim()</a> (Defaults to "<code>60000</code>", 1 minute)</property>
+ <property name="Idle Cleanup Interval (ms)" required="Yes">This is used to specify how long idle connections will be maintained in the pool before being closed. (Defaults to "<code>60000</code>", 1 minute)</property>
<property name="Auto Commit" required="Yes">Turn auto commit on or off for the connections.</property>
<property name="Keep-alive" required="Yes">The keep-alive is used enable a mechanism to monitor the health of connections. If a connection has not been used for Max Connection Age (ms) then before returning the connection from a call to <code>getConnection()</code>, the connection is first used to ping the database to make sure that it is still alive.
Setting the age allows the 5 second age to be overridden. Validation Query will be used to test it.</property>