Ошибка загрузчика классов EAR и EJB
Я разрабатываю клиент, который использует библиотеку Overthere 2.3.1. С локальной машиной клиент работает отлично. Но когда я пытаюсь вызвать тот же код, включенный в EJB 3.0, у меня возникает исключение, что загружены не все необходимые классы.
Я просмотрел источник и обнаружил, что класс содержит сканер аннотаций протокола ( https://github.com/hierynomus/scannit) с жестко закодированным именем класса:
Scannit scannit = new Scannit(Configuration.config()
.scan("com.xebialabs")
.with(new AbstractScanner[] { new TypeAnnotationScanner() }));
Команда
Thread.currentThread().getContextClassLoader().getResources("com/xebialabs")
возвращает ноль.
Похоже, EJB работает в отдельном загрузчике классов, который не имеет доступа ко всем банкам.
EJB упакован в EAR со следующей структурой:
EAR
--META-INF
----sda-dd.xml
----SAP_MANIFEST.MF
----MANIFEST.MF
----application-j2ee-engine.xml
--ejb.jar
--extlibs.jars
Файл MANIFEST.MF не содержит ссылок на внешние библиотеки в CLASS-PATH. Проект EAR успешно развернут на сервере приложений.
EJB.jar также содержит META-INF/MANIFEST.MF со значением "Class-Path: ." по умолчанию.
Я уже пробовал поиграться с CLASS-PATH в файлах манифеста, но безуспешно.
Может ли кто-нибудь помочь мне, как построить проект со всеми внешними библиотеками, которые будут загружаться во время работы EJB? Что я пропустил с ресурсами и загрузчиками классов?