Tomcat 5
From Briki
Contents
- 1 Setup apache2 to connect to Tomcat 5/6
- 2 Webapp locations
- 3 Other locations
- 4 Changing tomcat user
- 5 Tidying up /etc/init.d/tomcat5 output
- 6 Fixing tomcat-users.xml.new error
- 7 Changing to use log4j logging
- 8 org.apache.jasper.JasperException: Unable to compile class for JSP
- 9 No Host matches server name error
- 10 org.w3c.dom.DOMException: NOT_SUPPORTED_ERR error
- 11 java.security.AccessControlException errors
- 12 Azureus and Cocoon 2.1.9 via Tomcat 5.5
Setup apache2 to connect to Tomcat 5/6
- Uncomment the AJP connector on port 8009 in /etc/tomcat?/server.xml:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- Enable the necessary apache2 modules:
sudo a2enmod proxy_ajp sudo a2enmod rewrite
- Allow access to the proxy for all hosts by changing Deny from all to Allow from all in /etc/apache2/mods-enabled/proxy.conf. Ensure that ProxyRequests if off, unless you want to become an open proxy for anyone.
- Create /etc/apache2/conf.default/tomcat (or add to /etc/apache2/sites-enabled/000-default) with the contents:
# Tomcat Root RedirectMatch permanent ^/tomcat$ /tomcat/ <Location /tomcat/> ProxyPass ajp://localhost:8009/ ProxyPassReverse ajp://localhost:8009/ ProxyPassReverseCookiePath /tomcat/ ajp://localhost:8009/ </Location>
- Ensure, if other redirects are added in future, that they appear above the tomcat redirect to avoid path overrides
Webapp locations
- /var/lib/tomcat5/webapps/ - user webapps, plus ROOT, examples, docs etc.
- /var/lib/tomcat5/server/webapps/ - builtin admin and manager webapps
Other locations
- /var/lib/tomcat5/common/lib/ - external libraries used by both tomcat itself and webapps
- /var/lib/tomcat5/shared/lib/ - external libraries used by webapps, but not tomcat
Changing tomcat user
- Set TOMCAT_USER in /etc/tomcat5/tomcat5.conf
- See Fixing tomcat-users.xml.new error below
- chown tomcat:tomcat /usr/share/tomcat5/conf/jk2.properties
- chown tomcat:tomcat /usr/share/tomcat5/work/
Tidying up /etc/init.d/tomcat5 output
- In /etc/init.d/tomcat5
- Remove if statement around . /etc/init.d/rc.d/functions
- Change echo "waiting for processes to exit" to echo -n "."
- Add success after start and stop commands
- In /usr/bin/dtomcat5
- Comment out Using... lines
- In /usr/share/tomcat5/bin/relink
- Reorder find arguments to put -type d after mindepth and maxdepth arguments
Fixing tomcat-users.xml.new error
Error is javax.naming.NamingException: /usr/share/tomcat5/conf/tomcat-users.xml.new (Permission denied)
- chown tomcat:tomcat /etc/tomcat5 (NB. /usr/share/tomcat5/conf is a symlink to /etc/tomcat5)
Changing to use log4j logging
- Ensure log4j.jar and commons-logging.jar (or symlinks to them) are present is /usr/share/tomcat5/common/lib
- Create file /usr/share/tomcat5/common/classes/log4j.properties with contents:
log4j.rootLogger=INFO, FileAppender log4j.appender.FileAppender=org.apache.log4j.RollingFileAppender log4j.appender.FileAppender.File=/var/log/tomcat5/tomcat.log log4j.appender.FileAppender.layout=org.apache.log4j.PatternLayout # Print the date in ISO 8601 format log4j.appender.FileAppender.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.appender.FileAppender.MaxFileSize=1MB log4j.appender.FileAppender.MaxBackupIndex=4 #log4j.logger.org.apache=DEBUG
- Comment out Logger section in /usr/share/tomcat5/conf/server.xml
- Create empty file /var/log/tomcat5/tomcat.log (tomcat complains without this, for some reason)
org.apache.jasper.JasperException: Unable to compile class for JSP
- chown tomcat:tomcat /usr/share/tomcat5/work/ (trailing slash is important)
- Restart tomcat
No Host matches server name error
- Ensure /var/lib/tomcat5/webapps/ROOT is present - if not (and you're on Mandriva), you probably forgot to install the tomcat5-webapps and tomcat5-admin-webapps packages.
org.w3c.dom.DOMException: NOT_SUPPORTED_ERR error
- For some reason, this occurred the first time cruisecontrol was run - restarting tomcat fixed it.
java.security.AccessControlException errors
- Ensure CATALINA_OPTS contains -Djava.security.debug=access,failure in /etc/init.d/tomcat5
- Restart tomcat and recreate the error
- Run /usr/local/bin/catscan < /var/log/tomcat5/catalina_date.log to generate the required additions to /etc/tomcat5/policy.d/
- Add the relevant permissions to a new, appropriately named file in /etc/tomcat5/policy.d/
- Restart tomcat and retest
- Rinse and repeat, until all errors gone
Azureus and Cocoon 2.1.9 via Tomcat 5.5
Setting up cocoon
- Download the cocoon tar and untar.
- Run ./build.sh webapp
- cp -a build/webapp /usr/share/tomcat5/webapps/cocoon
- Ensure the contents of /usr/share/tomcat5/webapps/cocoon are owned by root:root, except for the following, which should be owned by tomcat:root:
- WEB-INF/db
- WEB-INF/logs
- Create the directory /usr/share/tomcat5/webapps/cocoon/slide, owned by tomcat5:root
- Create /etc/tomcat5/policy.d/30cocoon.policy, with contents:
grant codeBase "file:${catalina.home}/webapps/cocoon/-" { permission java.io.FilePermission "/usr/lib/j2sdk1.5-sun/jre/lib/slide.properties", "read"; permission java.io.FilePermission "/etc/tomcat5/policy.d", "read"; permission java.io.FilePermission "/etc/tomcat5/policy.d/slide", "read,write"; permission java.io.FilePermission "/etc/tomcat5/policy.d/slide/-", "read,write"; permission java.io.FilePermission "${catalina.home}/temp/-", "read,write,delete"; permission java.io.FilePermission "${catalina.home}/.cocoon/*", "read"; permission java.io.FilePermission "${catalina.home}/webapps/cocoon/slide", "read,write"; permission java.io.FilePermission "${catalina.home}/webapps/cocoon/slide/-", "read,write,delete"; permission java.io.FilePermission "${catalina.home}/webapps/cocoon/WEB-INF/db/-", "write"; permission java.io.FilePermission "${catalina.home}/webapps/cocoon/WEB-INF/logs", "write"; permission java.io.FilePermission "${catalina.home}/webapps/cocoon/WEB-INF/logs/-", "write"; permission java.lang.RuntimePermission "createClassLoader"; permission java.lang.RuntimePermission "getClassLoader"; permission java.lang.RuntimePermission "shutdownHooks"; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; permission java.net.SocketPermission "java.sun.com:80", "connect,resolve"; permission java.util.PropertyPermission "*", "read,write"; };
- Add the following lines to /etc/apache2/conf.d/tomcat:
JkMount /cocoon ajp13_worker JkMount /cocoon/* ajp13_worker
- Restart tomcat5 and apache2, and check logs in /var/log/tomcat5 for errors.
- Assuming no stack traces in logs, you should be able to open the cocoon homepage at http://mysite/cocoon/
Adding Azureus
- Turn on statistics logging in Azureus.
- Download azureus.common.xml and azureus.xsl from http://azureus.sourceforge.net/faq.php
- Place downloaded files in /usr/share/tomcat5/webapps/cocoon/azureus
- Edit azureus.common.xml to set the azureus server location to the logging statistics file.
- Add a line to /etc/tomcat5/policy.d/30cocoon.policy giving file read permission to the azureus stats file.
- Create /usr/share/tomcat5/webapps/cocoon/azureus/sitemap.xmap with the contents:
<?xml version="1.0"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <map:generators default="file"> <map:generator name="file" src="org.apache.cocoon.generation.FileGenerator"/> </map:generators> <map:transformers> <map:transformer name="xslt" src="org.apache.cocoon.transformation.TraxTransformer"> <!-- This is a parameter to the transformer component --> <use-request-parameters>false</use-request-parameters> </map:transformer> </map:transformers> <map:serializers default="html"> <map:serializer name="html" mime-type="text/html" src="org.apache.cocoon.serialization.HTMLSerializer"> <doctype-public>-//W3C//DTD HTML 4.0 Transitional//EN</doctype-public> <doctype-system>http://www.w3.org/TR/REC-html40/loose.dtd</doctype-system> <omit-xml-declaration>true</omit-xml-declaration> <encoding>UTF-8</encoding> <indent>1</indent> </map:serializer> </map:serializers> </map:components> <map:pipelines> <map:pipeline type="noncaching"> <map:generate type="file" src="azureus.cocoon.xml" /> <map:transform type="xslt" src="azureus.xsl" /> <map:serialize type="html" /> </map:pipeline> </map:pipelines> </map:sitemap>
- Restart tomcat5 and apache2, and check you can see azureus stats at http://mysite/cocoon/azureus/
- Sit back with a beer, and revel in the fact that you didn't have to spend 6 hours working out this stuff from scratch!