I found why BaseClassLoaderDomain.unregisterClassLoader() is never called. It's
because WarClassLoaderDeployer overrides the superclass
removeClassLoader(DeploymentContext) and turns it into a no-op.
Tried commenting out the override; i.e. just using the superclass behavior. No joy.
Didn't seem to break war undeployments in any way, and in a debugger I can see the
BaseClassLoaderDomain.unregisterClassLoader() stuff happening nicely. But if I redeploy
the war and try to use it, the old invalid classloader still gets used:
| 2008-02-08 17:00:35,073 ERROR
[org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/http-scoped-field].[jsp]]
Servlet.service() for servlet jsp threw exception
| java.lang.IllegalStateException:
BaseClassLoader@17ebc6c{vfsfile:/home/bes/dev/jboss/trunk/testsuite/output/lib/http-field-pass.war}
classLoader is not connected to a domain (probably undeployed?) for class
sun.reflect.ConstructorAccessorImpl
| at
org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:579)
| at
org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:234)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
| at sun.misc.Unsafe.defineClass(Native Method)
| at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
| at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
| at java.security.AccessController.doPrivileged(Native Method)
| at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
| at
sun.reflect.MethodAccessorGenerator.generateConstructor(MethodAccessorGenerator.java:76)
| at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:30)
| at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
| at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
| at java.lang.Class.newInstance0(Class.java:350)
| at java.lang.Class.newInstance(Class.java:303)
| at org.jboss.aop.proxy.ClassProxyFactory.newInstance(ClassProxyFactory.java:103)
| at org.jboss.aop.proxy.ClassProxyFactory.newInstance(ClassProxyFactory.java:71)
| at org.jboss.aop.proxy.ClassProxyFactory.newInstance(ClassProxyFactory.java:66)
| at
org.jboss.cache.pojo.collection.CollectionInterceptorUtil.createProxy(CollectionInterceptorUtil.java:50)
| ....
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4128037#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...