2
votes

I am using Tomcat 7 (jdk 1.6) in Eclipse 4.3.2.

I configured my Connection Pool as below :

<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource" 
   driverClassName="com.p6spy.engine.spy.P6SpyDriver"
   url="jdbc:p6spy:oracle:thin:@server:1521:XXX"
   username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1"
   validationInterval="30000" validationQuery="SELECT 1 FROM DUAL"
/>

I am using Spring 3.2.14, Hibernate 3.2.6-GA, CXF 2.7.

Every time I receive a SOAP request, I saw in P6SPY logs that the validation query is run independently of validationInterval and its description https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html.

I was expecting the connections to be validated at most once every 30 seconds.

Is there anything wrong with my configuration, or is this a known bug ?

2

2 Answers

5
votes

The explanation is pretty simple, I did not read correctly the documentation, I need to set the factory to org.apache.tomcat.jdbc.pool.DataSourceFactory in order to use the "Tomcat High-concurrency connection pool".

After that all parameters work as expected :

<Resource 
  factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
  name="jdbc/myDS" auth="Container" type="javax.sql.DataSource" 
  driverClassName="com.p6spy.engine.spy.P6SpyDriver"
  url="jdbc:p6spy:oracle:thin:@server:1521:XXX"
  username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1"
  testOnBorrow="true"
  testWhileIdle="true"
  timeBetweenEvictionRunsMillis="10000"
  validationInterval="30000" 
  validationQuery="SELECT 1 FROM DUAL"
/>

The connections are validated at most every validationInterval. An evictionThread runs every timeBetweenEvictionRunsMillis and validates idle connection (I choose to do this in order to spare time on connection borrow).

0
votes

well, that might be because you set the testOnBorrow parameter to true. this is taken from the documentation link you give.

The indication of whether objects will be validated before being borrowed from the pool

so, I think you might want to set it to false