Tomcat 6 not loading jars from WEB-INF/lib
Asked Answered
D

2

8

I'm trying to track down a configuration issue in my tomcat environment. Our production servers are running a tomcat installation and reading the war from a shared NFS mount.

However, when I try the same war with a stand-alone box (with their configuration), I get the error posted below.

Whats interesting, is that if I unzip all the jars in WEB-INF/lib into WEB-INF/classes, this error goes away.

So, it seems like something is preventing the app from loading the WEB-INF/lib path, but I can't for the life of me find any tomcat settings that would cause this, because it is detecting the apps and configuration, just not the included jars.

Any ideas?

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Dec 20, 2011 4:20:38 PM org.apache.catalina.core.StandardContext listenerStart SEVERE: Error configuring application listener of class org.springframework.security.web.session.HttpSessionEventPublisher java.lang.ClassNotFoundException: org.springframework.security.web.session.HttpSessionEventPublisher at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

Deangelis answered 20/12, 2011 at 21:25 Comment(3)
Are your jars referenced via symlinks? Tomcat will not follow symlinks by default.Lisbethlisbon
Nope, the main webapp is symlinked to a deploy folder, but even if i put the whole app in, I still get this error.Deangelis
I meant the jars in WEB-INF/lib. I was bitten enough by this error to be very carefour about configuring Tomcat correctly...Lisbethlisbon
D
3

So, I still don't have a reason for why this is happening, but I was finally able to get it working. Normally, we use 'unzip' to unpack the war into the deploy directory. I switched it to use 'jar' and everything magically works.

I have no idea why this would be. I tried every other permutation (checking our deployment folder, symlinks, permissions, ownerships, etc), and this was the only thing that made a difference, even diffing the two unpacked folders showed they were the same, with the same permissions, but one worked and one didn't

Also of note: the production deploys have been using 'unzip' for years. I really can't figure this one out, but I'm glad I can at least work on something else.

Deangelis answered 22/12, 2011 at 20:7 Comment(0)
A
2

One thing to look into, the ClassNotFoundException does not always mean the listed class (in your case org.springframework.web.context.ContextLoaderListener) was not found, it could mean that class could not be loaded.

If that particular class fails to load for any reason, say it has a static block that references another class that isn't found, the class loader reports failure to load as "ClassNotFoundException".

Make sure that your WEB-INF/lib directory does not contain classes/jars that also exist in the Tomcat default libraries. This can sometimes cause the load failures if there are multiple versions. By unzipping the jars into the classes directory you may be moving classes in the path order which is why it could be working.

Anemography answered 21/12, 2011 at 15:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.