Использование Esper в рамках OSGi

Я хочу использовать Esper в среде OSGi, однако я не уверен, как механизм загрузки классов в OSGi позволит мне достичь того, что мне нужно, или даже как Esper можно использовать в OSGi из-за этого.

Я использую Esper 5.3, и при проверке манифеста пакета он не использует заголовок Dynamic-Import OSGi. В основе Esper лежат EPSStatements, которые я понимаю как SQL-запросы, работающие с POJO.

Что я изо всех сил пытаюсь понять, так это то, как пакет Esper, который не использует динамический импорт и не знает, какие POJO он может использовать для работы в будущем, получает к ним доступ.

Например, если я попытаюсь создать EPStatement:

select * com.example.Pojo

Если класс com.example.Pojo находится в другом пакете ядра Esper, то единственный способ Pojo может быть загружен с помощью его ClassLoader. Это может быть сделано:

Thread.currentThread().setContextClassLoader(com.example.Pojo.class.getClassLoader);

Но разве это не просто загружает Pojo в пространство классов пакета, содержащего сам Pojo? Как пакет Esper может получить к нему доступ, как это потребуется при создании приведенного выше примера EPStatement.


person D-Dᴙum    schedule 27.01.2016    source источник


Ответы (1)


Вы можете использовать "addEventType(String eventTypeName, Class eventClass)" из "epAdministrator.getConfiguration()" для регистрации типа. Таким образом, вы можете контролировать, откуда берется класс.

При попытке найти класс по имени, Эспер всегда использует "Thread.currentThread().getContextClassLoader();". Ваш код может использовать "setContextClassLoader" для установки собственного загрузчика классов. И код, вероятно, должен установить его обратно.

Вы можете просто изменить манифест, поставляемый с банкой Esper, и включить в него все, что вам нравится.

Вы можете использовать пакеты «друг».

person user3613754    schedule 28.01.2016
comment
Спасибо за предложения. Я также экспериментировал, создав отдельный пакет для загрузки классов. Он уведомляется о новых классах, добавленных в систему через службу (по моему определению), и переключается на загрузчик пакета, предлагающего POJO. Пакет загрузчика импортирует все экспорты Esper, поэтому я смог создать оператор таким образом. Мне просто нужно прояснить для себя, откуда виден класс и т. Д. После загрузки таким образом. - person D-Dᴙum; 28.01.2016