Specifically, if we have an original .war file deployed in a application server, can one deploy a .war which provides different implementations of classes in the original file without having to modify the base code to support this?
Edit. I’ve formulated the problem wrongly, it’s actually simpler I think. We want to expose actions from two distinct WARs in the same base path, rather than a different path for each WAR. Can it be done at the container configuration level?, or do you recommend employing something like URL rewriting?
Not easily. Generally, a deployed WAR becomes a discrete webapp within a Java EE server, and it gets its own classloader. Your second deployment will get another classloader, and although they will definitely share some ancestry, it won’t be possible to reimplement things from the other WAR – your second deployment won’t be able to ‘see’ it, because of the way the classloaders are chained together.
It is possible to rewrite running classes using a Java agent, although this is nontrivial. You can transform (rewrite incoming) classes and you should be able to rewrite live (instantiated) classes, although the problem there is that there may be objects on the heap using the old and new code.
Class rewriting is how Eclipse’s Hot Code Replace works, and also how JRebel’s fast redployment solution functions.
You might be able to use an AOP system like AspectJ if you really want to pursue this – but it sounds like you’re trying to solve a build or deploy problem, rather than a problem where AOP would be a more fitting solution.