You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Josué Alcalde González <ja...@csa.es> on 2007/10/04 10:21:29 UTC

Problems with DBCP in tomcat6

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: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Problems with DBCP in tomcat6

Posted by Josué Alcalde González <ja...@csa.es>.
El jue, 04-10-2007 a las 05:38 -0400, David Smith escribió:
> 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
> 
> 
Perfect. It works. That was the solution.
Thank you very much.

> 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: users-unsubscribe@tomcat.apache.org
> > For additional commands, e-mail: users-help@tomcat.apache.org
> >
> >   
> 
> 
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 
> 
-- 
_______________________________________________
Josué Alcalde González
jalcalde@csa.es
Dpto. Desarrollo

CSA - Centro Regional de Servicios Avanzados
C/ López Bravo, 1
Pol. Ind. Villalonquéjar (Burgos)

Tel. (+34) 947 256 250
Fax. (+34) 947 256 583

Web: http://www.csa.es



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


Re: Problems with DBCP in tomcat6

Posted by David Smith <dn...@cornell.edu>.
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: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>   


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