Что происходит, когда сервис OSGi, использующий JNI, не регистрируется во время использования? - PullRequest
2 голосов
/ 17 марта 2010

Как я понимаю, сервисы OSGi могут быть незарегистрированы в любое время, в том числе когда они используются.

Рассмотрим службу OSGi, которая внутренне выполняет длительный вызов JNI. И пока выполняется этот вызов JNI, служба не регистрируется OSGi.

Будет ли разрешен вызов JNI для завершения или завершения на полпути? Что, если бы это был обычный Java-вызов, не выполняемый jni? Будет ли разрешен этот вызов для завершения выполнения или OSGi прекратит все сразу и отменит регистрацию?

Какое поведение ожидается в таком случае? Зависит ли ожидаемое поведение от того, была ли служба загружена с помощью «трекера» или нет?

SG

1 Ответ

3 голосов
/ 17 марта 2010

Я думаю, что даже с "обычными" (не JNI) сервисами OSGi не остановит обработку, которая уже выполняется. Фактически, если пакет каким-то образом сохраняет ссылку на экземпляр службы после того, как он был незарегистрирован (что он не должен делать), он все равно может вызывать методы для этого объекта (будут ли они работать или нет, полностью зависит от реализация услуги).

В службах OSGi "волшебства" не происходит. Жизненный цикл пакета просто контролирует то, что регистрируется и незарегистрируется в реестре сервисов. Если у вас есть ссылка на реализацию службы, это просто старые вызовы методов Java.

Итак, чтобы ответить на ваш вопрос, если пакет (или служба) сам не выполнит какие-либо действия для прекращения текущей деятельности, длительный вызов завершится.

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