Wesley Wu wrote: > Hi Scott, > > The memory leak circumstance was not spotted in Resin 4.0.5 and early > 4.0.x versions. >
> One of the inject path is: > > * A filter CmsPageFilter dispatch a request to a Jsp page through > javax.servlet.RequestDispatcher.forward(request, response) > * Jsp page called a BeanMethod custom jsp tag > * The jsp tag create a VideoManager through my BeanManager wrapper > (MDIObjectFactory) > * VideoManager injects a PersonManager > * PersonManager injects a PersonController > * PersonController injects a DefaultBeanManager and a DefaultBeanReader > * DefaultBeanManager and DefaultBeanReader inject a > CmsPersistentUnit(@Singleton) > * CmsPersistentUnit injects a javax.persistence.EntityManagerFactory > (@PersistenceUnit) > > All those beans except CmsPersistentUnit were dependent scoped (not > explicitly annotated) > and should be created at its inject point and freed when > the parent bean (the jsp page) was destroyed. > Just double-checking, which of the beans have which scope annotations? I just verified that the basic getReference with dependent scope isn't leaking so there must be some non-dependent bean that's triggering the problem. -- Scott > I list three most frequently bean creation process here. > > #============handle jsp tag which requires bean creation=================== > # this call should be the creation of an @Dependent (thought not > explicitly annotated) beans > # like com.buysou.cms.managers.DefaultBeanManager or > com.buysou.cms.managers.DefaultBeanReader > # (for writing/reading database through a @RequestScoped @PersistentContext) > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 118 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 117 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 117 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 117 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 117 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 117 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 114 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 114 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 114 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 114 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 114 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 112 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 112 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 112 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 111 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 111 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 103 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 103 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 103 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 103 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 103 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 89 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 89 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 89 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 88 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 88 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 60 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 60 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 60 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 58 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 58 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 34 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 34 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 34 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 33 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 33 > com.caucho.config.inject.InjectManager.getReference(Bean, Type, > CreationalContext) 22 > # My BeanManager wrapper creating a bean instance by @Named > mdi.java.factory.MDIObjectFactory.buildBean(String) 17 > com.buysou.cms.jsptags.components.cms.BeanMethod.start(Writer) 13 > com.buysou.cms.components.ComponentTagSupport.doStartTag() 13 > _jsp._WEB_22dINF._templates._default._video__jsp._jspService(HttpServletRequest, > HttpServletResponse, PageContextImpl, ServletContext, HttpSession, > _video__jsp$TagState) 13 > _jsp._WEB_22dINF._templates._default._video__jsp._jspService(HttpServletRequest, > HttpServletResponse) 13 > com.caucho.jsp.JavaPage.service(ServletRequest, ServletResponse) 13 > com.caucho.jsp.Page.pageservice(HttpServletRequest, HttpServletResponse) > 13 > com.caucho.server.dispatch.PageFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.caucho.server.dispatch.ServletInvocation.service(ServletRequest, > ServletResponse) 13 > com.caucho.server.webapp.RequestDispatcherImpl.forward(ServletRequest, > ServletResponse, String, Invocation, DispatcherType) 13 > com.caucho.server.webapp.RequestDispatcherImpl.forward(ServletRequest, > ServletResponse) 13 > com.buysou.cms.pageactions.TemplateForwardResolution.execute(HttpServletRequest, > HttpServletResponse) 13 > com.buysou.cms.servlet.CmsPageFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 13 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.yinyuetai.servlet.UserMessageFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 13 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.yinyuetai.servlet.UserCredentialFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 13 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.yinyuetai.servlet.SiteInfoFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 13 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.buysou.cms.servlet.WrapRequestResponseFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 13 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.buysou.servlet.filters.encoding.EnhancedEncodingFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 13 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.caucho.server.webapp.WebAppFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.caucho.server.webapp.AccessLogFilterChain.doFilter(ServletRequest, > ServletResponse) 13 > com.caucho.server.dispatch.ServletInvocation.service(ServletRequest, > ServletResponse) 13 > > #===========handle jsp tag which requires bean creation=================== > # this call should be the creation of an @RequestScoped @PersistentContext > com.caucho.config.inject.InjectManager$ContextReferenceFactory.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 261 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 254 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 254 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 254 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 254 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 254 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 254 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 254 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 254 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 254 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 254 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 252 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 252 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 252 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 252 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 252 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 247 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 247 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 247 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 245 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 245 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 223 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 223 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 223 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 223 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 223 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 191 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 191 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 191 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 191 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 191 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 132 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 132 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 132 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 125 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 125 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 66 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 66 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 66 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 65 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 65 > com.caucho.config.inject.InjectManager.getReference(Bean, Type, > CreationalContext) 43 > # My BeanManager wrapper creating a bean instance by @Named > mdi.java.factory.MDIObjectFactory.buildBean(String) 35 > com.buysou.cms.jsptags.components.cms.BeanMethod.start(Writer) 31 > com.buysou.cms.components.ComponentTagSupport.doStartTag() 31 > _jsp._WEB_22dINF._templates._default._video__jsp._jspService(HttpServletRequest, > HttpServletResponse, PageContextImpl, ServletContext, HttpSession, > _video__jsp$TagState) 18 > _jsp._WEB_22dINF._templates._default._video__jsp._jspService(HttpServletRequest, > HttpServletResponse) 18 > com.caucho.jsp.JavaPage.service(ServletRequest, ServletResponse) 18 > com.caucho.jsp.Page.pageservice(HttpServletRequest, HttpServletResponse) > 18 > com.caucho.server.dispatch.PageFilterChain.doFilter(ServletRequest, > ServletResponse) 18 > com.caucho.server.dispatch.ServletInvocation.service(ServletRequest, > ServletResponse) 18 > com.caucho.server.webapp.RequestDispatcherImpl.forward(ServletRequest, > ServletResponse, String, Invocation, DispatcherType) 18 > com.caucho.server.webapp.RequestDispatcherImpl.forward(ServletRequest, > ServletResponse) 18 > com.buysou.cms.pageactions.TemplateForwardResolution.execute(HttpServletRequest, > HttpServletResponse) 18 > com.buysou.cms.servlet.CmsPageFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 18 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 18 > com.yinyuetai.servlet.UserMessageFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 18 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 18 > com.yinyuetai.servlet.UserCredentialFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 18 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 18 > com.yinyuetai.servlet.SiteInfoFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 18 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 18 > com.buysou.cms.servlet.WrapRequestResponseFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 18 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 18 > > #===========handle http page request which create action > beans================== > # this call should be the creation of an @RequestScoped @PersistentContext too > com.caucho.config.inject.InjectManager$ContextReferenceFactory.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 261 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 254 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 254 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 254 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 254 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 254 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 254 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 254 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 254 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 254 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 254 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 252 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 252 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 252 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 252 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 252 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 247 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 247 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 247 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 245 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 245 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 223 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 223 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 223 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 223 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 223 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 191 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 191 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 191 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 191 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 191 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 132 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 132 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 132 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 125 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 125 > com.caucho.config.inject.InjectionTargetBuilder$FieldInjectProgram.inject(Object, > CreationalContext) 66 > com.caucho.config.inject.CandiProducer.inject(Object, CreationalContext) > 66 > com.caucho.config.inject.InjectionTargetBuilder.inject(Object, > CreationalContext) 66 > com.caucho.config.inject.ManagedBeanImpl.createDependent(CreationalContext) > 65 > com.caucho.config.inject.InjectManager$DependentReferenceFactoryImpl.create(CreationalContextImpl, > CreationalContextImpl, InjectionPoint) 65 > com.caucho.config.inject.InjectManager.getReference(Bean, Type, > CreationalContext) 43 > # My BeanManager wrapper creating a PageAction instance by classname > mdi.java.factory.MDIObjectFactory.buildBean(Class) 8 > com.buysou.cms.servlet.CmsPageFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 8 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 8 > com.yinyuetai.servlet.UserMessageFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 8 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 8 > com.yinyuetai.servlet.UserCredentialFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 8 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 8 > com.yinyuetai.servlet.SiteInfoFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 8 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 8 > com.buysou.cms.servlet.WrapRequestResponseFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 8 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 8 > com.buysou.servlet.filters.encoding.EnhancedEncodingFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) 8 > com.caucho.server.dispatch.FilterFilterChain.doFilter(ServletRequest, > ServletResponse) 8 > com.caucho.server.webapp.WebAppFilterChain.doFilter(ServletRequest, > ServletResponse) 8 > com.caucho.server.webapp.AccessLogFilterChain.doFilter(ServletRequest, > ServletResponse) 8 > com.caucho.server.dispatch.ServletInvocation.service(ServletRequest, > ServletResponse) 8 > com.caucho.server.hmux.HmuxRequest.handleInvocation() 8 > com.caucho.server.hmux.HmuxRequest.handleRequestImpl() 8 > com.caucho.server.hmux.HmuxRequest.handleRequest() 8 > com.caucho.network.listen.TcpSocketLink.dispatchRequest() 8 > com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(boolean) 8 > com.caucho.network.listen.TcpSocketLink.handleRequests(boolean) 8 > > > Hope these help. > > -Wesley > > > _______________________________________________ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest > > _______________________________________________ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest