Лучший способ завершить работу Контейнера OSGi (конкретно равноденствие)

Я ищу лучшую практику при закрытии контейнера OSGi.

В настоящее время мы используем маленькое приложение для средства запуска, которое называет EclipseStarter.startup () и устанавливает некоторые базовые пакеты. После этого средство запуска завершается.

Когда тестовый GUI (работающий как пакет) закрывается, он называет System.exit (0) для завершения работу контейнера, но должно быть более изящное решение, чем это.

Спасибо

19
задан James Carr 16 December 2009 в 17:53
поделиться

3 ответа

Пожалуйста, не используйте System.exit (0) для завершения работы платформы OSGi. Вы должны это сделать, остановив пакет с идентификатором 0, системный пакет. Таким образом, вы даете всем пакетам возможность завершиться упорядоченным образом (например, для освобождения ресурсов и т. Д.).

Спецификация OSGi определяет следующее (Базовая спецификация, R4.x, 4.2.6 Остановка платформы).

Завершение работы может быть инициировано остановкой системного [...] пакета или вызовом метода остановки для объекта инфраструктуры.

В этой главе дается подробное описание того, что происходит при завершении работы платформы.

Системный комплект соотв. объект фреймворка также определен (глава 4.6. Системный пакет):

Системный комплект напоминает объект фреймворка при запуске фреймворка, но реализации не обязаны использовать один и тот же объект для объекта инфраструктуры и системного пакета. Однако оба объекта должны иметь идентификатор пакета 0, одно и то же местоположение и символическое имя пакета.

Спецификация OSGi доступна бесплатно на веб-сайте OSGi Alliance ( http://www.osgi.org/Specifications/HomePage ).

22
ответ дан 30 November 2019 в 03:52
поделиться

Я также использую Equinox во встроенном контексте приложения, вызываю stop () в System Bundle, а затем использую EclipseStarter.shutdown (). Возможно, вам придется остановить все свои пакеты.

Я никогда особо не беспокоился об отключении пакета в моем приложении, поскольку нет сохраненного состояния.

4
ответ дан 30 November 2019 в 03:52
поделиться

Стандартного способа сделать это пока нет. OSGI сделает эту часть своего стандартного api в следующем выпуске, но я предполагаю, что пройдет некоторое время, прежде чем все контейнеры OSGI будут реализовывать это. Используйте пока специфичный для контейнера код, но держитесь подальше от System.exit ().

С уважением,

Лин Тоелен

-1
ответ дан 30 November 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: