shweta-nerake1 opened a new issue, #14471:
URL: https://github.com/apache/grails-core/issues/14471

   Ours is a multitenant application running in `SCHEMA` mode on Postgres 
database. 
   We are continuously facing `java.sql.SQLException: PooledConnection` has 
already been closed issue.
   
   Here is the stacktrace for it:
   
--------------------------------------------------------------------------------------------------------------
   ```groovy
   ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - PooledConnection 
has already been closed.
   ERROR org.grails.web.errors.GrailsExceptionResolver - SQLException occurred 
when processing request: [GET] /login/auth
   PooledConnection has already been closed.. Stacktrace follows:
   org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: 
could not prepare statement; uncategorized SQLException for SQL [select 
this_.id as id1_84_0_, this_.version as version2_84_0_, this_.date_created as 
date_cre3_84_0_, this_.logo as logo4_84_0_, this_.organization as 
organiza5_84_0_, this_.username as username6_84_0_, this_.password as 
password7_84_0_, this_.status as status8_84_0_, this_.is_infra_provider as 
is_infra9_84_0_, this_.domain as domain10_84_0_, this_.identifier as 
identif11_84_0_, this_.email as email12_84_0_ from public.tenant this_ where 
this_.domain=? limit ?]; SQL state [null]; error code [0]; PooledConnection has 
already been closed.; nested exception is java.sql.SQLException: 
PooledConnection has already been closed.
           at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
           at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
           at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
           at 
org.grails.orm.hibernate.GrailsHibernateTemplate.convertJdbcAccessException(GrailsHibernateTemplate.java:723)
           at 
org.grails.orm.hibernate.GrailsHibernateTemplate.convertHibernateAccessException(GrailsHibernateTemplate.java:711)
           at 
org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:302)
           at 
org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:242)
           at 
org.grails.orm.hibernate.GrailsHibernateTemplate.executeWithNewSession(GrailsHibernateTemplate.java:149)
           at 
org.grails.orm.hibernate.GrailsHibernateTemplate.executeWithExistingOrCreateNewSession(GrailsHibernateTemplate.java:208)
           at 
org.grails.orm.hibernate.AbstractHibernateDatastore.withNewSession(AbstractHibernateDatastore.java:362)
           at 
grails.gorm.multitenancy.Tenants$_withId_closure1.doCall(Tenants.groovy:218)
           at 
grails.gorm.multitenancy.Tenants$CurrentTenant.withTenant(Tenants.groovy:318)
           at grails.gorm.multitenancy.Tenants.withId(Tenants.groovy:196)
           at grails.gorm.multitenancy.Tenants.withId(Tenants.groovy:166)
           at 
grails.plugin.springsecurity.LoginController.auth(LoginController.groovy:62)
           at 
org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
           at 
org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
           at 
org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
           at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
           at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
           at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
           at 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
           at 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
           at 
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
           at 
org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
           at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
           at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
           at 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
           at 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)
           at 
grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:150)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58)
           at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
           at 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
           at 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
           at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
           at 
org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
           at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
           at 
org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
           at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
           at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
           at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
           at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
           at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
           at 
io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
           at 
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
           at 
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
           at 
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
           at 
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
           at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
           at 
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
           at 
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
           at 
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
           at 
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
           at 
io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
           at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
           at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
           at 
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:285)
           at 
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:264)
           at 
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
           at 
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:175)
           at 
io.undertow.server.Connectors.executeRootHandler(Connectors.java:209)
           at 
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:802)
           at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
           at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
           at java.lang.Thread.run(Thread.java:748)
   Caused by: java.sql.SQLException: PooledConnection has already been closed.
           at 
org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy$LazyConnectionInvocationHandler.invoke(LazyConnectionDataSourceProxy.java:376)
           at 
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:240)
           at 
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:240)
           at 
org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146)
           at 
org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
           at 
org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148)
           at 
org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1934)
           at 
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1903)
           at 
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1881)
           at org.hibernate.loader.Loader.doQuery(Loader.java:925)
           at 
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342)
           at org.hibernate.loader.Loader.doList(Loader.java:2622)
           at org.hibernate.loader.Loader.doList(Loader.java:2605)
           at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2434)
           at org.hibernate.loader.Loader.list(Loader.java:2429)
           at 
org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:109)
           at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1787)
           at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:363)
           at 
org.grails.orm.hibernate.query.AbstractHibernateQuery.singleResultViaListCall(AbstractHibernateQuery.java:801)
           at 
org.grails.orm.hibernate.query.AbstractHibernateQuery.singleResult(AbstractHibernateQuery.java:791)
           at 
org.grails.datastore.gorm.finders.AbstractFindByFinder.invokeQuery(AbstractFindByFinder.java:35)
           at 
org.grails.datastore.gorm.finders.AbstractFindByFinder$1.doInSession(AbstractFindByFinder.java:29)
           at 
org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:319)
           at 
org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:42)
           at 
org.grails.datastore.gorm.finders.AbstractFindByFinder.doInvokeInternal(AbstractFindByFinder.java:27)
           at 
org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:252)
           at 
org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:390)
           at 
org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:172)
           at 
org.grails.datastore.gorm.GormEntity$Trait$Helper.staticMethodMissing(GormEntity.groovy:757)
           at 
grails.plugin.springsecurity.LoginController$_auth_closure1.doCall(LoginController.groovy:63)
           at 
grails.gorm.multitenancy.Tenants$_withId_closure1$_closure3.doCall(Tenants.groovy:225)
           at 
org.grails.orm.hibernate.GrailsHibernateTemplate$1.doInHibernate(GrailsHibernateTemplate.java:152)
           at 
org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:298)
           ... 83 common frames omitted
    ```
   
--------------------------------------------------------------------------------------------------------------------------------
   **Some pointers on this:**
   
   1. **Production environment Configuration:**
   ```yaml
   ---
   hibernate:
       cache:
           queries: false
           use_second_level_cache: false
           use_query_cache: false
           region.factory_class: 
'org.hibernate.cache.ehcache.EhCacheRegionFactory'
   
   dataSource:
       pooled: true
       jmxExport: true
       driverClassName: org.h2.Driver
       username: sa
       password:
   
   environments:
       production:
           dataSource:
               dbCreate: none
               pooled: true
               jmxExport: true
               driverClassName: 'org.postgresql.Driver'
               dialect: net.kaleidos.hibernate.PostgresqlExtensionsDialect
               username: 'root'
               password: 'root'
               url:  'jdbc:postgresql://someHostname:5432/database'
               logSql: true
            schemaHandler: flint.forms.TenantSchemaHandler
               properties:
                   jmxEnabled: true
                   initialSize: 5
                   maxActive: 50
                   minIdle: 5
                   maxIdle: 25
                   maxWait: 10000
                   maxAge: 600000
                   timeBetweenEvictionRunsMillis: 5000
                   minEvictableIdleTimeMillis: 60000
                   validationQuery: SELECT 1
                   validationQueryTimeout: 3
                   validationInterval: 15000
                   testOnBorrow: true
                   testWhileIdle: true
                   testOnReturn: false
                   jdbcInterceptors: ConnectionState
                   defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED
              
   ---
   grails:
       gorm:
           multiTenancy:
               mode: SCHEMA
               tenantResolverClass: <packageName.className>
   ```
   **2. Environment Information:**
   
   Operating System: Ubuntu 16.04/CentOS 7
   GORM Version: 6.1.4.RELEASE
   Grails Version: 3.2.10
   JDK Version: 1.8
   
   **3. Libraries Included:**
   ```groovy
   org.grails:grails-datastore-web:6.0.11.RELEASE"
   'org.grails', name: 'grails-datastore-gorm-async', version: '6.1.4.RELEASE'
   org.postgresql:postgresql:9.4.1212.jre7
   org.grails.plugins:postgresql-extensions:5.1.0
   org.grails.plugins:hibernate5:6.1.4
   org.hibernate:hibernate-core:5.1.2.Final
   org.hibernate:hibernate-ehcache:5.1.2.Final
   org.hibernate:hibernate-java8:5.1.2.Final
   org.springframework.boot:spring-boot-starter-tomcat
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to