Java – Warnings and Errors at Tomcat 6 startup

javastartuptomcat

I'm new to Tomcat, and have been tasked with migrating a Tomcat 5 / Java 1.4 application in Tomcat 6 / Java 6.

On tomcat 6 startup in Eclipse I keep getting multiple warnings like :

No rules found matching 'Server/GlobalNamingResources/ResourceParams/parameter/value'.
6 août 2012 14:49:32 org.apache.tomcat.util.digester.Digester endElement
(50 times or so…)

Then

[SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:MyProject' did not find a matching property.
6 août 2012 14:49:32 org.apache.tomcat.util.digester.SetPropertiesRule begin

Then

The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\METIER\MES\java\jdk1.6.0_11\bin;
[+ multiple different paths]
6 août 2012 14:49:32 org.apache.coyote.http11.Http11Protocol init

Then

Could not get url for /javax/servlet/jsp/resources/jsp_2_1.xsd
6 août 2012 14:49:32 org.apache.catalina.startup.DigesterFactory register

Then, unsurprisingly, an exception on the webApp load()

GRAVE: La servlet /SdcReaderService a généré une exception "load()"
org.apache.commons.logging.LogConfigurationException: Class org.apache.commons.logging.impl.Log4JLogger does not implement Log
at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:412)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:525)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:272)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:246)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:395)
at org.apache.jasper.servlet.JspServlet.(JspServlet.java:58)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1104)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
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)
6 août 2012 14:49:32 org.apache.tomcat.util.modeler.Registry registerComponent
GRAVE: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/SdcReaderService,J2EEApplication=none,J2EEServer=none
6 août 2012 14:49:32 org.apache.catalina.core.ApplicationContext log
INFO: La servlet jsp est marqué comme indisponible
6 août 2012 14:49:32 org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: La servlet a généré une exception "load()"
java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.servlet.JspServlet
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1104)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
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)
6 août 2012 14:49:32 org.apache.tomcat.util.modeler.Registry registerComponent
GRAVE: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/,J2EEApplication=none,J2EEServer=none
6 août 2012 14:49:32 org.apache.catalina.core.ApplicationContext log
INFO: La servlet jsp est marqué comme indisponible
6 août 2012 14:49:32 org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: La servlet /PlmIterableObjectServiceReader a généré une exception "load()"
java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.servlet.JspServlet
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1104)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
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)
6 août 2012 14:49:32 org.apache.tomcat.util.modeler.Registry registerComponent
GRAVE: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/PlmIterableObjectServiceReader,J2EEApplication=none,J2EEServer=none
6 août 2012 14:49:33 org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "com.rolex.j2ee.MyProject.util.MyProjectServletCtxListener" is already configured for this context. The duplicate definition has been ignored.
6 août 2012 14:49:33 org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "com.rolex.j2ee.MyProject.util.SessionListener" is already configured for this context. The duplicate definition has been ignored.
6 août 2012 14:49:33 org.apache.catalina.core.ApplicationContext log
INFO: La servlet jsp est marqué comme indisponible
6 août 2012 14:49:33 org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: La servlet /MyProject a généré une exception "load()"
java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.servlet.JspServlet
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1104)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
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)
6 août 2012 14:49:33 org.apache.tomcat.util.modeler.Registry registerComponent
GRAVE: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/MyProject,J2EEApplication=none,J2EEServer=none

I guess the problem comes from the configuration files of Tomcat, but I don't understand exactly what is the cause of each of the warnings/errors above. For instance, in the server.xml file, the global naming ressources seems correctly defined, so should I look for a missing resource Parameter block, or for some kind of syntax error in the file, or a missing .jar, or … ?

Any suggestion welcome !

Best Answer

The basic problem here is that you can't simply take a Tomcat 5.5 server.xml file, drop it into Tomcat 6, and expect it to work without any changes. You need to read the Migration Guide among other things. The best strategy is to start with the server.xml that ships with Tomcat and make whatever modifications you need to configure it as you had the previous version configured. That usually means <Connector> and <Resource> definitions. Note that you should not be defining <Context> elements in server.xml any longer.

One more note: if you are upgrading to a different major version of Tomcat, why not go all the way up to Tomcat 7.0?

No rules found matching 'Server/GlobalNamingResources/ResourceParams/parameter/value

<Resource> elements no longer take sub-elements called <parameter>, etc. Instead, convert all your parameters to attributes of the <Resource> element.

[SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' ...

<Context> does not support the "source" attribute: Eclipse is adding this and it shouldn't be there. Note that this is only a warning: Tomcat (and your webapp) will start up just fine in spite of this message.

The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found ...

You haven't compiled Tomcat's native library, but you have configured the AprLifecycleListener, which attempts to load this library. If you want to use APR, go get it and compile it. If you don't want it or need it, disable the AprLifecycleListener (or just ignore the warning message, which doesn't hurt anything). Using APR is a very good idea if you are using Tomcat for SSL termination because APR is much higher performance for SSL than Java's JSSE, plus APR supports FIPS mode if you need that sort of thing. The APR connector scales much better than the BIO connector, too, even if you aren't using SSL.

Could not get url for /javax/servlet/jsp/resources/jsp_2_1.xsd ...

I'm not sure I can help you with that one. Without the full stack trace or other information (like what file mentions that URL), we can't help.

Related Topic