Saturday, January 26, 2008

Fixing Common Tomcat 5.5 Problems on Ubuntu 7.10

I've been playing with moving some of my webapps on to an Ubuntu 7.10 environment containing the official Ubuntu Tomcat 5.5 packages (tomcat5.5, tomcat5.5-admin, tomcat5.5-webapps). I had a couple of problems getting my webapps to run.

When I initially deployed the application, I received errors like the following in Tomcat's catalina-*.log (/var/lib/tomcat5.5/logs):

25-Jan-2008 8:29:09 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
25-Jan-2008 8:29:09 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/appname] startup failed due to previous errors


The application was outputting additional error messages to the console, which were being captured in /var/log/daemon.log on my system. This application uses Spring, and was logging huge stack traces including the following:

Jan 25 20:29:09 hostname jsvc.exec[32335]: ERROR - ContextLoader.initWebApplicationContext(206) | Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext-hibernate.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor': Cannot create inner bean '(inner bean)' of type [org.springframework.transaction.interceptor.TransactionInterceptor] while setting bean property 'transactionInterceptor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creatin
...
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) ^Iat java.security.AccessController.doPrivileged(Native Method) ^Iat javax.security.auth.Subject.doAsPrivileged(Subject.java:517) ^Iat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) ^Iat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162) ^Iat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:262) ^Iat org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192) ^Iat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171) ^Iat java.security.AccessController.doPrivileged(Native Method)


I was able to work around this problem by disabling Tomcat security in /etc/default/tomcat5.5:

TOMCAT5_SECURITY=no


After making this change and restarting Tomcat, my application again failed to start, but this time with a different error in catalina-*.log:

25-Jan-2008 8:51:55 PM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
25-Jan-2008 8:51:55 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/appname] startup failed due to previous errors


The following was in /var/log/daemon.log:

Jan 25 20:51:55 hostname jsvc.exec[2025]: ERROR - StandardContext.filterStart(3639) | Exception starting filter struts javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found ^Iat javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:119) ^Iat com.opensymphony.xwork2.util.DomHelper$DOMBuilder.(DomHelper.java:167) ^Iat com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115) ^Iat com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:830) ^Iat com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:131) ^Iat com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:100) ^Iat com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:130) ^Iat com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(Configurati
...



After consulting a Java forum thread, I removed the /usr/share/tomcat5.5/common/endorsed/xml-apis.jar symlink and restarted Tomcat. After making this change, my application started and functioned correctly.

No comments: