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

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

Я использую Esper 5.3 и после проверки манифеста пакета он не использует Dynamic-Import OSGi заголовок. В основе Esper лежат EPStatements, которые, как я понимаю, являются запросами 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.

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам