On 06/07/2010 08:05, Yevgen Krapiva wrote: > Hi guys. > > I have a servlet that uses connection pool with the use of MySQL driver. > When I start or reload Tomcat the application works fine, then if I > redeploy my application it cannot get a connection from a DataSource object. > The following exception is thrown: > > java.lang.IllegalStateException: Timer already cancelled. > > java.util.Timer.sched(Timer.java:354) > java.util.Timer.schedule(Timer.java:222) > org.apache.tomcat.dbcp.pool.impl.EvictionTimer.schedule(EvictionTimer.java:64) > org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.startEvictor(GenericObjectPool.java:1647) > org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.setTimeBetweenEvictionRunsMillis(GenericObjectPool.java:843) > org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1173) > org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) > basis.onlineorder.commons.dao.UserDAOJdbcImpl.getUsers(UserDAOJdbcImpl.java:133) > org.apache.jsp.users_jsp.getUsersList(users_jsp.java:31) > org.apache.jsp.users_jsp._jspService(users_jsp.java:164) > org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) > javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) > org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) > javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > > I have not found anything I can do with this on the internet. Perhaps I've > found that I might have a relation to > timeBetweenEvictionRunsMillis parameter ( in <Resource> configuration > section ). > > I don't know if it is important, here is my configuration in context.xml > file: > > <Resource name="jdbc/onlineorder" > auth="Container" > type="javax.sql.DataSource" > username="user" > password="password" > driverClassName="com.mysql.jdbc.Driver" > url="jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf8" > maxActive="10" > maxIdle="5" > testOnBorrow="true" > testWhileIdle="true" > timeBetweenEvictionRunsMillis="10000" > minEvictableIdleTimeMillis="60000" > /> > > Did anyone face with this problem ?
Exactly which version of the MySQL driver are you using? This is a side-effect of the memory leak prevention in Tomcat 6.0.20+ which aims to stop Timers that haven't been properly shutdown. The problem is probably that the driver is located in the common classloader and that Tomcat is discovering and killing the Timer it starts when the webapp classloader is terminated. Which gives me an idea... p
signature.asc
Description: OpenPGP digital signature