Ayuda aplicación JSF + PRIMEFACES + SPRING + HIBERNATE, no responde desp de conectarse cierta cantidad de usuarios

Buienas tardes, espero me puedan ayudar,

Lo que sucede es que estoy desarrollando una pagina web en JSF con PRIMEFACES, con conexion a BD MYSQL utilizo HIBERNATE, también uso SPRING como contenedor de beans y pues tengo el bean de sessionFactory en el applicationContext.xml de SPRING, la aplicación responde bien, buena velocidad, todo super, el problema es que me dio por probarla con multiples conexiones en distintos clientes, todo iba bien hasta que hacia la 7 conexion y dejaba de responder, el log del Glassfish esta limpio, no hay stackTrace, la BD no esta saturada de conexiones (apenas 9),
pero al tratar de conectar otro usuario ya no responde no devuelve vistas, no hace absolutamente nada, y pues llega hasta el punto que devuelve operation time out, pero en el explorador, y pues, no tengo idea de que pueda ser, en la consola de administracion del Glassfish aumente los valores de MaxPermSize y otro que no recuerdo jejej, que segun lei me iba a "solucionar" ese problema, pero pues nada, espero haber sido claro y espero me puedan ayudar, dejo mas detalles:

Pc que tengo como servidor:

Acer Aspire One, procesador intel i5 a 2.53Ghz
3 Gb de Ram
Windows XP SP3
Glassfish v 3.1
Spring 2.5.6
Hibernate 3
Primefaces 2.2.1
JSF 2.0
Mysql 5.5.8

Nota: mientras escribia esta entrada luego como de 15 minutos de no responder, me botó un stackTrace que cito:

ADVERTENCIA: GRIZZLY0023: Interrupting idle Thread: http-thread-pool-80(4).
ADVERTENCIA: SQL Error: 0, SQLState: null
GRAVE: Cannot get a connection, general error
ADVERTENCIA: SQL Error: 0, SQLState: null
GRAVE: Cannot get a connection, general error
ADVERTENCIA: Error while extracting database product name - falling back to empty error codes
org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, general error
        at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:293)
        at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:320)
        at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:216)
        at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:140)
        at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:103)
        at org.springframework.orm.hibernate3.SessionFactoryUtils.newJdbcExceptionTranslator(SessionFactoryUtils.java:145)
        at org.springframework.orm.hibernate3.HibernateAccessor.getDefaultJdbcExceptionTranslator(HibernateAccessor.java:453)
        at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
        at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
        at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
        at org.springframework.orm.hibernate3.HibernateTemplate.findByCriteria(HibernateTemplate.java:1055)
        at com.distribucion.datos.control.usuario.HbSpringUsuarioDaoImpl.obtenerRangoUsuarios(HbSpringUsuarioDaoImpl.java:172)
        at com.distribucion.vista.control.ControlAdministracion$1.load(ControlAdministracion.java:32)
        at org.primefaces.component.datatable.DataTable.loadLazyData(DataTable.java:686)
        at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:461)
        at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:201)
        at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:180)
        at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:85)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
        at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:518)
        at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
        at javax.faces.component.UIData.visitTree(UIData.java:1411)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
        at javax.faces.component.UIForm.visitTree(UIForm.java:335)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
        at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
        at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:297)
        at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
        at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:981)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:390)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at com.distribucion.datos.control.filter.UserLoguedFilter.doFilter(UserLoguedFilter.java:47)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:662)
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, general error
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:280)
        ... 79 more
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, general error
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:118)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
        ... 80 more
Caused by: java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:485)
        at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1115)
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
        ... 83 more

GRAVE: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot get a connection, general error; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, general error

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

conexiones

Lo más probable es que no estás devolviendo conexiones al pool. Nunca las cierras.

Me imagino que tienes configurado en glassfish un pool de conexiones con un máximo de 6 conexiones (veo DBCP en tu stack trace), y tu aplicación obtiene una conexión pero nunca la cierra, de modo que nunca regresa al pool, y entonces cuando se requiere una séptima conexión, se queda esperando un rato hasta que ocurre el timeout porque nadie devuelve sus conexiones.

Si estás usando JDBC de manera directa, debes ser muy cuidadoso de cerrar la conexión, los statements, los resultsets, etc, pon todo eso en un bloque finally.