Я переношу несколько приложений с JBoss 4 на GlassFish 3.1.x. Каждое из этих приложений использует один и тот же API, который предоставляет общие классы и интерфейсы, используемые каждым из приложений. Назовем его CoreAPI.jar
.
CoreAPI.jar
помещается в каталог <domain>/lib
GlassFish и загружается обычным загрузчиком классов.
Теперь предположим, что каждое приложение расширяет класс (не абстрактный) из CoreAPI с именем Version
:
public class Version {
public String getVersion() { return null; }
}
Метод getVersion()
вызывается из самого API в нескольких местах, и каждое приложение, использующее API, отвечает за расширение класса и предоставление такой версии:
public class MyAppVersion extends Version {
private static final String VERSION = "1.0";
@Override
public String getVersion() { return VERSION; }
}
Когда я развертываю приложение в GlassFish, объединенное в WAR или EAR, каждый раз, когда API вызывает getVersion()
из родительского класса, я получаю java.lang.NullPointerException
— похоже, он не может найти подкласс.
Подкласс будет найден правильно, если CoreAPI.jar
связан с WAR и удален из каталога <domain>/lib
, но я не могу этого сделать, потому что многие приложения требуют его в качестве общей библиотеки.
Есть ли способ заставить общую библиотеку «видеть» подкласс в развернутом приложении?
Спасибо!
Пояснение: у меня НЕТ доступа для изменения CoreAPI
CoreAPI.jar
в несколько разных мест загрузчика классов. Все равно не повезло. К сожалению, я думаю, что "Нет" - правильный ответ на мой вопрос. Я предполагаю, что API нужно будет переписать. 25.05.2012