this service is spring 4.3.16.RELEASE and use DBCP.
no error in jboss server.log.
however, APM(Application Performance Management) system detects the Unclosed JDBC Connection
when every execute query.
on the other hand, I think about "Unclosed JDBC Connection" is naturally result.
because DBCP does not close Connection
. just returns it to the pool.
or else, have some solves?
my project info.
pom.xml
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
context-datasource.xml
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.mariadb.jdbc.Driver" />
<property name="url" value="jdbc:mariadb:host/dbname?allowMultiQueries=true" />
<property name="username" />
<property name="password" />
<!-- DBCP Options -->
<property name="initialSize" value="10" />
<property name="maxActive" value="150" />
</bean>
context-transaction.xml
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="select*" read-only="true" />
<tx:method name="*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx" expression="execution(* package..*Impl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
</aop:config>
the APM is reporting issue as below see stacktrace log of APM.
APM stacktrace log (issue title : Unclosed JBDC Connection)
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy.getConnection(TransactionAwareDataSourceProxy.java:127)
+ egovframework.rte.psl.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:184)
+ egovframework.rte.psl.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:296)
+ egovframework.rte.psl.dataaccess.EgovAbstractDAO.list(EgovAbstractDAO.java:226)
+ FTeGV.kz.menuMng.dao.MenuMngDAO.getMenuPathList(MenuMngDAO.java:29)
+ FTeGV.kz.menuMng.service.MenuMngServiceImpl.getMenuPathList(MenuMngServiceImpl.java:26)
+ sun.reflect.GeneratedMethodAccessor300.invoke(Unknown Source)
+ sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ java.lang.reflect.Method.invoke(Method.java:498)
+ org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
+ org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
+ org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
+ org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
+ org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
+ org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
+ org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
+ org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
+ org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
+ org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
+ com.sun.proxy.$Proxy185.getMenuPathList(Unknown Source)
+ FTeGV.kz.menuMng.ctrl.MenuMngController.menuPath(MenuMngController.java:32)
+ sun.reflect.GeneratedMethodAccessor299.invoke(Unknown Source)
+ sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ java.lang.reflect.Method.invoke(Method.java:498)
+ org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:181)
+ org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
+ org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
+ org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
+ org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
+ org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
+ org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:503)
+ org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
+ io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
+ io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:81)
+ io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
+ io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
+ io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
+ io.undertow.servlet.handlers.ServletInitialHandler.dispatchToServlet(ServletInitialHandler.java:196)
+ io.undertow.servlet.spec.RequestDispatcherImpl.includeImpl(RequestDispatcherImpl.java:391)
+ io.undertow.servlet.spec.RequestDispatcherImpl.setupIncludeImpl(RequestDispatcherImpl.java:326)
+ io.undertow.servlet.spec.RequestDispatcherImpl.access$200(RequestDispatcherImpl.java:54)
+ io.undertow.servlet.spec.RequestDispatcherImpl$3.run(RequestDispatcherImpl.java:274)
+ java.security.AccessController.doPrivileged(Native Method)
+ io.undertow.servlet.spec.RequestDispatcherImpl.include(RequestDispatcherImpl.java:271)
+ org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:301)
+ org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:155)
+ org.apache.jsp.WEB_002dINF.jsp.FTeGV.kz.inc.menuPath_jsp._jspx_meth_c_005fimport_005f0(menuPath_jsp.java:291)
+ org.apache.jsp.WEB_002dINF.jsp.FTeGV.kz.inc.menuPath_jsp._jspService(menuPath_jsp.java:143)
+ org.apache.jasper.runtime.HttpJspBase.service_whxwt___internal_org_apache_jasper_runtime_HttpJspBase(HttpJspBase.java:70)
+ org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java)
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
+ org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
+ org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
+ org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
+ io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
+ io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:81)
+ io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
+ io.undertow.jsp.JspFileHandler.handleRequest(JspFileHandler.java:32)
+ io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
+ io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
+ io.undertow.servlet.handlers.ServletInitialHandler.dispatchToServlet(ServletInitialHandler.java:196)
+ io.undertow.servlet.spec.RequestDispatcherImpl.includeImpl(RequestDispatcherImpl.java:391)
+ io.undertow.servlet.spec.RequestDispatcherImpl.setupIncludeImpl(RequestDispatcherImpl.java:326)
+ io.undertow.servlet.spec.RequestDispatcherImpl.access$200(RequestDispatcherImpl.java:54)
+ io.undertow.servlet.spec.RequestDispatcherImpl$3.run(RequestDispatcherImpl.java:274)
+ java.security.AccessController.doPrivileged(Native Method)
+ io.undertow.servlet.spec.RequestDispatcherImpl.include(RequestDispatcherImpl.java:271)
+ org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:301)
+ org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:155)
+ org.apache.jsp.WEB_002dINF.jsp.FTeGV.kz.info.ConfrList_jsp._jspx_meth_c_005fimport_005f1(ConfrList_jsp.java:1865)
+ org.apache.jsp.WEB_002dINF.jsp.FTeGV.kz.info.ConfrList_jsp._jspService(ConfrList_jsp.java:977)
+ org.apache.jasper.runtime.HttpJspBase.service_whxwt___internal_org_apache_jasper_runtime_HttpJspBase(HttpJspBase.java:70)
+ org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java)
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
+ org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
+ org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
+ org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
+ io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
+ io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:81)
+ io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
+ io.undertow.jsp.JspFileHandler.handleRequest(JspFileHandler.java:32)
+ io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
+ io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
+ io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:186)
+ io.undertow.servlet.spec.RequestDispatcherImpl.forwardImpl(RequestDispatcherImpl.java:227)
+ io.undertow.servlet.spec.RequestDispatcherImpl.forwardImplSetup(RequestDispatcherImpl.java:149)
+ io.undertow.servlet.spec.RequestDispatcherImpl.access$000(RequestDispatcherImpl.java:54)
+ io.undertow.servlet.spec.RequestDispatcherImpl$1.run(RequestDispatcherImpl.java:95)
+ java.security.AccessController.doPrivileged(Native Method)
+ io.undertow.servlet.spec.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:92)
+ org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
+ org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
+ org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
+ org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
+ org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
+ org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
+ org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
+ org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:503)
+ org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
+ io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
+ io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
+ io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter(SpanFinishingFilter.java:52)
+ io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
+ io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
+ FTeGV.common.CommonLogFilter.doFilter(CommonLogFilter.java:40)
+ io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
+ io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
+ FTeGV.common.FtHTMLTagFilterEgov.doFilter(FtHTMLTagFilterEgov.java:77)
+ io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
+ io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
+ org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:122)
+ org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
+ io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
+ io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
+ org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
+ org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
+ io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
+ io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
+ io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
+ io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
+ io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
+ io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
+ org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
+ io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
+ io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
+ io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
+ io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
+ io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
+ io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
+ io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
+ io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
+ io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269)
+ io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78)
+ io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133)
+ io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130)
+ io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
+ io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
+ org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
+ org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
+ org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
+ org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
+ org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
+ io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249)
+ io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78)
+ io.undertow.servlet.handlers.ServletInitialHandler$1$1.run(ServletInitialHandler.java:105)
+ java.security.AccessController.doPrivileged(Native Method)
+ io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:102)
+ io.undertow.server.Connectors.executeRootHandler(Connectors.java:370)
+ io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
+ org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
+ org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
+ org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
+ org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
+ org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1280)
+ java.lang.Thread.run(Thread.java:748)
I guessed that cause Connection Pool. transaction manager work well as below , though.
- transaction check
trace log.
DataSourceTransactionManager - Creating new transaction with name [...]
DataSourceTransactionManager - Acquired Connection [...]
DataSourceTransactionManager - Switching JDBC Connection [...]
TransactionSynchronizationManager - Bound Value
TransactionSynchronizationManager - Initializing transaction synchronization
TransactionInterceptor - Getting transaction for [...]
PreparedStatement - Executing Statement: ...sql...
DataSourceTransactionManager - Retrieved value [...]
DataSourceTransactionManager - Triggering beforeCommit synchronization
DataSourceTransactionManager - Triggering beforeCompletion synchronization
DataSourceTransactionManager - Initiating transaction commit
DataSourceTransactionManager - Committing JDBC transaction on Connection [...]
DataSourceTransactionManager - Triggering afterCommit synchronization
TransactionSynchronizationManager - Clearing transaction synchronization
DataSourceTransactionManager - Triggering afterCompletion synchronization
TransactionSynchronizationManager - Removed value [...]
DataSourceTransactionManager - Releasing JDBC Connection [...]
DataSourceUtils - Returning JDBC Connection [...]
- checked call
close()
method withgetConnection()
in sources
not found.