Существует ли стандартный способ (т. Е. Определенный некоторыми спецификациями Java / J2EE / и т. Д.) Предоставить пользовательский загрузчик классов в контейнер сервлетов Java, который следует использовать для загрузки файла WAR?
НаВ новом проекте мы расширяем большой коммерческий программный пакет Java (Foo) с помощью веб-сервисов, что требует некоторой гибкости развертывания (как отдельных сервисов и т. д.).В частности, мы хотим избежать необходимости включать в каждый WAR-файл все Jar-файлы зависимости от программного обеспечения Foo, поскольку они многочисленны, велики и будут меняться с выпусками исправлений / исправлений по мере разработки.Точно так же крайне нежелательно копировать все зависимости в каталог lib каждого контейнера Servlet.
В идеале я хотел бы сообщить серверу приложений Java, что эти файлы WAR должны быть загружены с использованием пользовательскогоЗагрузчик классов, который я предоставлю, который автоматически включает в себя Jar для зависимости от программного обеспечения Foo.Примерно так (в Java-псевдокоде):
public class MyWarFileClassLoader extends ClassLoader {
protected URLClassLoader urlcl;
public MyWarFileClassLoader(File warFile) {
File installDir = System.getEnv("FOO_HOME");
List<File> fooEntries = new File(installDir, "jars").listFiles("*.jar");
fooEntries.add(new File(installDir, "resources"));
fooEntries.add(warFile);
this.urlcl = new URLClassLoader(fooEntries);
}
public Class<?> findClass(String name) {
return this.urlcl.findClass(name);
}
}
Если не существует стандартного способа сделать это, существует ли простой способ достижения одной и той же цели для нескольких файлов WAR,независимо от целевого контейнера сервлетов?
[Edit]
Другими словами: существует ли общая схема, позволяющая файлам WAR управлять своими собственными зависимостями во время выполнениявместо того, чтобы полагаться на конфигурацию контейнера сервлетов?Я мог бы, конечно, включить в манифест файла WAR атрибут Class-Path
, но тогда записи все еще «жестко закодированы» во время сборки, а не обнаружены автоматически во время выполнения.