OSGI - статические вызовы методов через пакеты - PullRequest
3 голосов
/ 01 сентября 2009

У меня есть сторонний JAR, который я преобразовал в комплект OSGI с помощью bnd. Код, который мне нужно вызвать, чтобы использовать его из моего собственного пакета, выглядит примерно так:

ThirdParty.setRegKey(myRegKey);
ThirdParty thirdParty = new ThirdParty();
thirdParty.callMethod();

Что, кажется, вызывает у меня проблемы, так это первая строка - вызов статического метода. За пределами контейнера OSGI, используя стандартный JAR, это работает нормально. Однако в OSGI в строке 3 появляется сообщение об ошибке, что регистрационный ключ не был установлен.

Есть ли какие-либо проблемы со статическими вызовами методов в таких пакетах? Это похоже на то, как если бы статический контекст не распределялся между пакетами.

Ответы [ 2 ]

3 голосов
/ 02 сентября 2009

Вы отладили код? Поскольку вы не сообщаете нам, с какой сторонней библиотекой вы работаете, и мы не знаем всю вашу среду, это может быть setRegKey() или callMethod(), пытающиеся сделать что-то «умное», которое не работает внутри ОСГИ.

У диспетчера драйверов JDBC есть эта проблема, когда ваш пакет импортирует класс драйверов JDBC, но менеджер драйверов решает, что вызывающий поток из вашего пакета не должен «видеть» класс драйверов JDBC, поэтому он завершается неудачно при запуске внутри OSGi. 1005 *

2 голосов
/ 01 сентября 2009

Вам может понадобиться экспортировать / импортировать пакет, содержащий класс ThirdParty. В противном случае он попадает в разные загрузчики классов для разных пакетов, поэтому он действительно не используется совместно.

Настоящим способом OSGi было бы сделать это через какой-то сервис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...