Add validationQuery="select 1" to your <Resource .../> definition to cause the database pool to test connections and regenerate them as necessary before your code gets a connection.

--David

Josué Alcalde González wrote:
I am having a problem with DBCP.

It is a problem with my applications written last year for
apache-tomcat-5.5. They worked perfectly but I will soon need
apache-tomcat-6 and I have upgraded my servers.

I haven't had any problem with my old applications until I discovered
every morning an exception occurs in my applications related to database
connection.

It is not a very big problem (connection fails, an error is reported to
the user, the user tries it again and it works) but it is really
annoying.

Has something important changed in DBCP which can cause such a problem?

Of course, I suppose you will need more tips to help me.
As I have said, I use the default datasource and connection pool system
included with tomcat.

I use to declare my datasource in META-INF/context.xml. For example:


-------------------------------META-INF/context.xml-------------------------

<?xml version="1.0" encoding="UTF-8"?>

<Context debug="5" reloadable="true" crossContext="true">

        <Resource name="jdbc/GesdocDB" auth="Container"
                type="javax.sql.DataSource" maxActive="100" maxIdle="30"
                maxWait="1000" username="gesdocweb" password="*******"
                driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/gesdoc"/>
</Context>

-------------------------------META-INF/context.xml-------------------------


I use two different ways to access db in different apps. I have used
JDBC+common-db-utils and Hibernate and I am having this problem with
both.
Since JDBC access is more transparent than Hibernate, I will try to give
you enough info about how the connection is done.

This would be a tipical conection to database to chek the password of a
user (sorry, the code is in spanish):

--------- es.csa.dipu.gesdoc.consultas.ConsultasUsuario ---------

80 public static User getUsuarioConLogin(String login)  throws
DataAccessException {
81   String sql = "SELECT idUsuario, login, nombre, apellido1, "
82               + "  apellido2, perfil, cambiarPassword, "
83               + "  password, estado "
84               + "FROM Usuarios WHERE login = ?;";
85   try {
86     QueryRunner run = new QueryRunner(DbUtils.getDataSource());
87     ResultSetHandler h = new BeanHandler(Usuario.class);
88     return (Usuario) run.query(sql, login, h);
89   } catch (Exception e) {
90     log.warn(msg.get("ERROR_CONSULTA_USUARIO"), e);
91     throw new
DataAccessException(msg.get("ERROR_CONSULTA_USUARIO"),e);
92   }
93 }

--------- es.csa.dipu.gesdoc.consultas.ConsultasUsuario ---------

run.query() will close resultsets, statements and connection and it
seems the problem is when it tries to close connection. This is a trace
of the error:

04-oct-2007 8:52:12 es.csa.dipu.gesdoc.consultas.ConsultasUsuario
getUsuarioConLogin
ADVERTENCIA: Se ha producido un error al consultar en la tabla usuarios.
java.sql.SQLException: Already closed.
        at
org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:84)
        at org.apache.tomcat.dbcp.dbcp.PoolingDataSource
$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
        at org.apache.commons.dbutils.DbUtils.close(DbUtils.java:38)
        at
org.apache.commons.dbutils.QueryRunner.close(QueryRunner.java:524)
        at
org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:311)
        at
org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:285)
        at
es.csa.dipu.gesdoc.consultas.ConsultasUsuario.getUsuarioConLogin(ConsultasUsuario.java:88)
        at
es.csa.dipu.gesdoc.beans.LoginBean.doLogin(LoginBean.java:123)
        at sun.reflect.GeneratedMethodAccessor694.invoke(Unknown Source)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at
org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
        at
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
        at javax.faces.component.UICommand.broadcast(UICommand.java:109)
        at
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
        at
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
        at
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
        at
javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
        at
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
        at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
        at org.apache.jk.common.ChannelSocket
$SocketConnection.runIt(ChannelSocket.java:889)
        at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:690)
        at java.lang.Thread.run(Thread.java:595)
04-oct-2007 8:52:18 es.csa.dipu.gesdoc.consultas.ConsultasUsuario
getUsuarioConLogin
ADVERTENCIA: Se ha producido un error al consultar en la tabla usuarios.
java.sql.SQLException: Already closed.
        at
org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:84)
        at org.apache.tomcat.dbcp.dbcp.PoolingDataSource
$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
        at org.apache.commons.dbutils.DbUtils.close(DbUtils.java:38)
        at
org.apache.commons.dbutils.QueryRunner.close(QueryRunner.java:524)
        at
org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:311)
        at
org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:285)
        at
es.csa.dipu.gesdoc.consultas.ConsultasUsuario.getUsuarioConLogin(ConsultasUsuario.java:88)
        at
es.csa.dipu.gesdoc.beans.LoginBean.doLogin(LoginBean.java:123)
        at sun.reflect.GeneratedMethodAccessor694.invoke(Unknown Source)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at
org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
        at
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
        at javax.faces.component.UICommand.broadcast(UICommand.java:109)
        at
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
        at
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
        at
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
        at
javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
        at
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
        at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
        at org.apache.jk.common.ChannelSocket
$SocketConnection.runIt(ChannelSocket.java:889)
        at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:690)
        at java.lang.Thread.run(Thread.java:595)


And that's all. Thanks for any help. I think the key is that it doesn't
fail in tomcat 5.5, but I don't know how to continue.






---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to