Ok, more things I don’t like about Apache Tomcat😉 We have a web application which wants to be installed into the root context. But that means that the normal /manager webapp would either show up in it’s `directory-space’ or we would not be able to use it at all 🙁 We have an Apache web server in front of the Tomcat so we could try to filter certain paths, but that creates extra interdependencies which I would like to avoid in `security critical’ areas.
The normal setup, which works for things like zapcat or Jolokia, is to create a new service in the same server, which listens on a different port and use that. Unfortunately, the default ManagerServlet class can not handle such a setup.
So I took the org.apache.catalina.manager.ManagerServlet as base and extended it so that it understands two additional request parameter service & host. If just one of them is used, the other uses a sensible default. I could not really sub-class the original class, because the changes were all over the place 🙁
So with a server.xml specifying two services “Catalina, listening on 8080” and “Management, listening on 8081”, I can list the deployed applications on both from the “Management” service:
root@box:/tmp# curl 'http://root:root@box:8081/manager/list OK - Listed applications for virtual host localhost /manager:running:0:manager /j4p:running:0:j4p /host-manager:running:0:host-manager root@box:/tmp# curl 'http://root:root@box:8081/manager/list?service=Catalina OK - Listed applications for virtual host localhost /:running:0:ROOT root@box:/tmp# curl 'http://root:root@box:8081/manager/list?service=Management OK - Listed applications for virtual host localhost /manager:running:0:manager /j4p:running:0:j4p /host-manager:running:0:host-manager
That works the same way for deploy & undeploy as well 😉 So now my root context application is happy and all the `management apps’ can be accessed on a different port with different access parameters 😉
The source & class for Tomcat 6.0.35 is here, in this little mw-manager.jar. After reading the source 😉 , just drop it into your tomcat lib directory, adapt your manager-application’s web.xml to use the AllManagerServlet instead of the default ManagerServlet, and have fun 😉
The manager application allows to control the tomcat installation. So please be careful!! While I think, the little new servlet works for me, make sure it does the things you expect!! Or use it as example for your own excursions into the Tomcat code 😉
As always, have fun exploring 😉