Search code examples
javajakarta-eetomcatclassloader

How to create a "leech" Tomcat application which uses libraries of another


I'm familiar with Tomcat's traditional class loading system:

    Bootstrap
        |
     System
        |
     Common
     /     \
Webapp1   Webapp2 ...

I'm looking to write a tester web application for an existing web application deployed on Tomcat 6. Ideally, with a context-param indicating the context path of the application to be tested (lets call it subject), it would then directly load the libraries from the subject before its own. So the tree I'm hoping to obtain is (not for the faint of heart, you've been warned):

    Bootstrap
        |
     System
        |
     Common
     /     \
Subject   Webapp2 ...
   |
Tester

I could probably obtain the same effect copying libraries over, but it isn't an elegant solution seeing how that would require that both Subject and Tester have been expanded from their war files by Tomcat already.

My question is this: Assuming Subject is already present and that it works independently of Tester, is there a way this can be accomplished by simply adding the war file in the webapp directory and starting Tomcat (ideally without modifying the Tomcat configuration, but understandably that may not be possible)? And my follow-up question is, are there any disadvantages to this technique (security or otherwise) that I should be aware of?

I appreciate any feedback as I'm trying to decide whether or not this is a feasible idea or if I'm creating Frankenstein's monster.

Note: I should probably add that Subject is not just any generic application but a specific one that our company implemented, hence while Subject should work independently from Tester, that doesn't mean I can't modify Subject if it would assist in this endeavor.


Solution

  • I think your're creating a Frankenstein's monster. You could archive this by implementing a custom class loader, but this would at least require knowledge about where subject is extracted by tomcat. Besides that, you most likely will run into problems when subject is redeployed. What kind of tests are you wishing to perform? Maybe there is a more simplistic and robust approach to what you are planning to do.