Мне удалось обойти эту проблему, так как создаваемые мною «мини-войны» могут совместно использовать lib на уровне загрузчика общих классов в tomcat. Хитрость заключается в том, чтобы использовать ApplicationListener
(расположенный в общем загрузчике классов), который выполняет следующее:
public class ApplicationListener implements ServletContextListener {
private static Map<String, ServletContext> contexts =
new HashMap<String,ServletContext>();
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();
if (context.getContextPath().length() > 0)
contexts.put(context.getContextPath(), context);
context.setAttribute("myapps", applications);
}
}
Когда создается Context
, оно регистрируется как ServletContext
на статической карте. Затем эта статическая карта распределяется между всеми контекстами через переменную Context
myapps
. В любое время, когда мне нужен доступ к другим контекстам, я могу сделать следующее:
ServletContext namedcontext =
((ServletContext) ServletContext.getAttribute("myapps")).get("/namedapp");
Надеюсь, это кому-нибудь поможет.