-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Austin,

On 3/22/15 10:11 PM, Austin Jones wrote:
> After a bit of debugging, I found the issue.  The stack traces
> below are on 8.0.12-src.
> 
> The bug occurs at this stack:
> 
>> StandardContext.reload() line: 3779 
>> HostConfig.reload(HostConfig$DeployedApplication) line: 1306 
>> HostConfig.checkResources(HostConfig$DeployedApplication) line:
>> 1238 HostConfig.check(String) line: 1493
> 
> 
> HostConfig.checkResources(DeployedApplication) runs through the
> branch:
> 
>> if (app.hasDescriptor && resource.getName().toLowerCase( 
>> Locale.ENGLISH).endsWith(".war")) { ... }
> 
> 
> It calls ExpandWar.delete( docBaseFile ), which is the unpacked
> webapp directory.
> 
> Then, checkResources calls reload(app) - which invokes the context 
> listener.
> 
> The ClassLoader eventually gets down to this stack:
> 
>> DirResourceSet.getResource(String) line: 100
> 
> StandardRoot.getResourceInternal(String, boolean) line: 280
>> Cache.getResource(String, boolean) line: 65 
>> StandardRoot.getResource(String, boolean, boolean) line: 216 
>> StandardRoot.getClassLoaderResource(String) line: 225 
>> WebappClassLoader.findResourceInternal(String, String) line:
>> 2556 WebappClassLoader.findClassInternal(String) line: 2410 
>> WebappClassLoader.findClass(String) line: 880 
>> WebappClassLoader.loadClass(String, boolean) line: 1290 
>> WebappClassLoader.loadClass(String) line: 1173 
>> TestcaseContextListener.contextDestroyed(ServletContextEvent)
>> line: 23 StandardContext.listenerStop() line: 4792 
>> StandardContext.stopInternal() line: 5392 
>> StandardContext(LifecycleBase).stop() line: 232 
>> StandardContext.reload() line: 3768 
>> HostConfig.reload(HostConfig$DeployedApplication) line: 1306 
>> HostConfig.checkResources(HostConfig$DeployedApplication) line:
>> 1238 HostConfig.check(String) line: 1493
> 
> 
> Unfortunately, checkResources just deleted the base directory.
> The ClassLoader is looking for 
> /WEB-INF/classes/com/avadyne/ThisClassNotFound.class, but that path
> no longer exists.  Most of the functions in the stack return null, 
> and findClassInternal(String) throws the ClassNotFoundError at line
> 906.
> 
> OK, how should this be fixed?  Should the ClassLoader fall back to
> the compressed WAR?  Should the DocBase be deleted after the
> context is stopped?

If MyClass had been loaded at initialization time (like your sample
code shows), it should not have needed to be loaded back off the disk
for shutdown.

Is it possible that MyClass is referencing another class
(MyOtherClass) during shutdown that was never referenced during startup?

- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org

iQIcBAEBCAAGBQJVECDbAAoJEBzwKT+lPKRYWvUP/1EI5C6OzLOpo7kfknDZuoOK
bjZiGsVjijiIbaFvVIJnhzXuwE6AW+xGeYOk+VlhxmnkPE2CFk/IH4ACRhN8unqr
THWn7XS6OqFP2pixIkZoD0JPqlGXJmOSuJuHm/9LhsxCemMV0ZiZo9pFbQrgDDyt
gpHGC7JNRPzLuf6b9xXIKdsDaKIPgeUCUF4TFlkD8t88214hVGszi8Iqa8oUuYuM
VKHlufsmzQajjHRkNEZvc8yMOhCP/LJdhsX4GWjW1zcun/4fLHFWKU5eMQkHb5CK
VXCS/XsTw8vnuTbI/CQ5QiloOWeong6uK1RtDoKg73quvBNXdjn8kApV01nPMNnr
HWaCZJvtlcmjmfDDnI6NJilTR3y4K1zHR0uYuE6EtqxT4s0lkuBq5752Bq9KcNSo
WzVKtxsxDkl+Kx60iqHFEu4/VJF4FahB4DHNOwnHXDOGrdpSGj4JrN4PrAd79ZEI
5dZEhg4bozEpoenXQ9Qs5KRKNUzJpC9ZIems5OgbFpHjiHqizc+dR9/kH9DdaVk+
AcLI3JtCO5OBrxLyJ1qqnrsIpREJ/qnLpvO4+iX/ImOX+eCTOEmdUoDecjZDeUeP
dMarqycbwLLZKABseAIRA8ut2XnpAaGf0NLPI5SWdMDp2uPbSG1+PIIjxeUFeLX5
fQ6a+Q79kJAbgnwzrCvA
=g8G/
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to