[JBoss JIRA] Assigned: (WELD-76) OOME on servlet container redeployment
by Pete Muir (JIRA)
[ https://jira.jboss.org/jira/browse/WELD-76?page=com.atlassian.jira.plugin... ]
Pete Muir reassigned WELD-76:
-----------------------------
Assignee: Shane Bryzak
> OOME on servlet container redeployment
> --------------------------------------
>
> Key: WELD-76
> URL: https://jira.jboss.org/jira/browse/WELD-76
> Project: Weld
> Issue Type: Bug
> Reporter: Christian Bauer
> Assignee: Shane Bryzak
> Priority: Critical
> Fix For: 1.0.1.CR1
>
>
> Redeploying /examples/wicket/numberguess (no code changes, just repeated deploy/undeploy cycles) to Jetty, running from within IntelliJ but in a separate VM.
> With default max heap size (JConsole reports 84 MB) after 3 redeployment cycles or with Xmx256m after about 10 cycles, the VM simply hangs at 100% CPU load with a full heap and the log:
> [Timer-1] 07:57:54,804 DEBUG [org.jboss.webbeans.bootstrap.AbstractBeanDeployer] Bean: Built-in implicit javax.inject.Instance bean
> [Timer-1] 07:57:54,805 DEBUG [org.jboss.webbeans.bootstrap.AbstractBeanDeployer] Bean: org.jboss.webbeans.bean-web-module-NewManagedBean-org.jboss.webbeans.wicket.BeanManagerLookup
> [Timer-1] 07:57:54,806 DEBUG [org.jboss.webbeans.bootstrap.AbstractBeanDeployer] Bean: org.jboss.webbeans.bean-web-module-NewManagedBean-org.jboss.webbeans.conversation.NumericConversationIdGenerator
> [Timer-1] 07:57:55,879 DEBUG [org.jboss.webbeans.bootstrap.AbstractBeanDeployer] Bean: org.jboss.webbeans.bean-web-module-NewManagedBean-org.teleal.hub.bookmarks.ui.HelloWorld
> [Timer-1] 07:57:55,881 DEBUG [org.jboss.webbeans.bootstrap.WebBeansBootstrap] Web Beans initialized. Validating beans.
> (Had to stop the process with KILL signal.)
> Sometimes it doesn't hang and I get this instead:
> java.lang.OutOfMemoryError: Java heap space
> at java.util.jar.Attributes.read(Attributes.java:377)
> at java.util.jar.Manifest.read(Manifest.java:182)
> at java.util.jar.Manifest.<init>(Manifest.java:52)
> at java.util.jar.JarFile.getManifestFromReference(JarFile.java:165)
> at java.util.jar.JarFile.getManifest(JarFile.java:146)
> at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:693)
> at java.net.URLClassLoader.defineClass(URLClassLoader.java:221)
> at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
> at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:392)
> at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363)
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
> at java.lang.Class.getDeclaredFields0(Native Method)
> at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
> at java.lang.Class.getDeclaredFields(Class.java:1743)
> at org.jboss.webbeans.introspector.jlr.WBClassImpl.<init>(WBClassImpl.java:210)
> at org.jboss.webbeans.introspector.jlr.WBClassImpl.of(WBClassImpl.java:130)
> at org.jboss.webbeans.resources.ClassTransformer$1.call(ClassTransformer.java:59)
> at org.jboss.webbeans.resources.ClassTransformer$1.call(ClassTransformer.java:55)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> at org.jboss.webbeans.util.collections.ConcurrentCache.putIfAbsent(ConcurrentCache.java:125)
> at org.jboss.webbeans.resources.ClassTransformer.loadClass(ClassTransformer.java:54)
> at org.jboss.webbeans.introspector.jlr.WBClassImpl.<init>(WBClassImpl.java:146)
> at org.jboss.webbeans.introspector.jlr.WBClassImpl.of(WBClassImpl.java:130)
> at org.jboss.webbeans.resources.ClassTransformer$1.call(ClassTransformer.java:59)
> at org.jboss.webbeans.resources.ClassTransformer$1.call(ClassTransformer.java:55)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> at org.jboss.webbeans.util.collections.ConcurrentCache.putIfAbsent(ConcurrentCache.java:125)
> With Xmx1024m, after about 20 cycles:
> java.lang.OutOfMemoryError: PermGen space
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
> at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
> at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
> at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:392)
> at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363)
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
> at org.apache.wicket.settings.Settings.<init>(Settings.java:139)
> at org.apache.wicket.Application.getSettings(Application.java:874)
> at org.apache.wicket.Application.getPageSettings(Application.java:545)
> at org.apache.wicket.Application.internalInit(Application.java:972)
> at org.apache.wicket.protocol.http.WebApplication.internalInit(WebApplication.java:551)
> at org.jboss.webbeans.wicket.WebBeansApplication.internalInit(WebBeansApplication.java:71)
> at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:693)
> at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
> at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
> at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:658)
> at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
> at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
> at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
> at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
> at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
> at org.mortbay.jetty.deployer.ContextDeployer.deploy(ContextDeployer.java:268)
> at org.mortbay.jetty.deployer.ContextDeployer.redeploy(ContextDeployer.java:287)
> at org.mortbay.jetty.deployer.ContextDeployer.access$100(ContextDeployer.java:67)
> at org.mortbay.jetty.deployer.ContextDeployer$ScannerListener.fileChanged(ContextDeployer.java:99)
> at org.mortbay.util.Scanner.reportChange(Scanner.java:464)
> at org.mortbay.util.Scanner.reportDifferences(Scanner.java:330)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
14 years, 6 months
[JBoss JIRA] Commented: (WELDX-44) Fix war:inplace target for Tomcat for numberguess example
by Dan Allen (JIRA)
[ https://jira.jboss.org/jira/browse/WELDX-44?page=com.atlassian.jira.plugi... ]
Dan Allen commented on WELDX-44:
--------------------------------
This is actual a problem with the Weld servlet extension on Tomcat <= 6.0.18 (the tomcat-maven-plugin uses Tomcat 6.0.16). The example works fine on Tomcat 6.0.20.
What it comes down to is the order in which the listeners are called. In Tomcat 6.0.16, the JSF listener (com.sun.faces.ConfigureListener) is called first and the Weld Listener called second. The opposite is true for Tomcat 6.0.18.
Now, why does this matter? Really it is an impl detail of Mojarra. Mojarra creates a composite EL resolver once in Application.getELResolver(), then uses the cached version from that point forward. Application.getELResolver() gets invoked by the JSF listener.
When Application.getELResolver() creates the composite EL resolver, it calls through the WeldApplication (registered in faces-config.xml) to get the "application" el resolver Application.getApplicationELResolver(), which should be WeldELResolver. However, the problem is, WeldApplication does not register the WeldELResolver until the BeanManager is present in the servlet context. But at that point, it's too late, the composite EL resolver has already been created. Hence the ordering problem of the listeners.
So WeldApplication is going to have to register the WeldELResolver even if the BeanManager is not there...either that, or instead of using addELResolver(), it is going to have to register it with the composite el resolver manually.
> Fix war:inplace target for Tomcat for numberguess example
> ---------------------------------------------------------
>
> Key: WELDX-44
> URL: https://jira.jboss.org/jira/browse/WELDX-44
> Project: Weld Extensions
> Issue Type: Feature Request
> Components: Servlet Containers
> Reporter: Pete Muir
> Assignee: Dan Allen
> Fix For: Servlet Containers 1.0.0.CR3
>
>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
14 years, 6 months