ServiceLoader в дебрях classloaders
От: mkind Россия http://kishlaly.com
Дата: 09.07.13 12:09
Оценка:
Добрый день!
Жил был механизм подгрузки имплементаций одного интерфейса в пределах EARа, по классической схеме:

в текстовый файлик EAR/core.jar/META-INF/services/com.site.MyInterface записываются все реализации
в коде пишется ServiceLoader<MyInterface> loader = ServiceLoader.load(MyInterface .class)

Теперь EARов стало больше, у каждого есть своей перечень имплементаций, но не хочется в каждом дублировать MyInterface (и несколько сопутствующих классов), поэтому вынес общую часть из core.jar в отдельный separated.jar, который кладу в EAR/libs.
Но имплементации теперь не загружаются, т.е. ServiceLoader.load(MyInterface .class) пуст.

Что не так? Вся структура EARа осталась без изменений: по-прежнему есть файл EAR/core.jar/META-INF/services/com.site.MyInterface, все описанные в нём имплементации по-прежнему лежат в EAR/core.jar.
Есть подозрение в разных класспассах межде EAR/libs и EAR/core.jar, тогда как в даннам случае можно выйти из положения?
Knowledge itself is power
F.Bacon
serviceloader
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.