Вопрос о жизненном цикле пакета osgi - PullRequest
5 голосов
/ 16 июля 2011

Я пытаюсь узнать, как работает OSGI.Я написал свой первый пакет hello-world, который дает некоторый вывод на консоль при выполнении метода start класса активатора bundle.Теперь я прочитал о ленивом стартовом механизме и установил этот флаг в своем манифесте пакета.Затем я запустил консоль равноденствия, установил пакет и запустил его.но теперь я ожидал, что мой пакет будет помечен как «стартовый».но вместо этого он уже вызывает метод start и помечается как активный.я понял что-то не так с ленивым механизмом запуска ???

Ответы [ 2 ]

8 голосов
/ 16 июля 2011

Флаг отложенного запуска используется, когда у вас есть другие пакеты, которые зависят от вашего пакета и классов в вашем пакете.

Допустим, у вас есть два пакета A и B, где

  • A экспортирует класс C
  • B зависит от A
  • B содержит класс D, который ссылается на C

Что происходит, когда пакетB активирован?

Без флага lazy-load, пакет A загружается и активируется первым.

С флагом lazy-loadпакет A не загружается и не активируется до тех пор, пока класс D не будет ссылаться на класс C.

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

Наоборот, этот флаг также затрудняет рассуждение о времени выполнения дляметоды в B, так как это может быть перехвачено с загрузкойая активация пакетов в любое время ....

3 голосов
/ 16 июля 2011

Вы сказали, что вы уже запустили свой пакет после установки - если вы запускаете свой пакет вручную, он активируется независимо от политики отложенной активации.

В соответствии с спецификацией OSGi следующееверно для активации:

Ленивая политика активации указывает, что после запуска пакет не должен активироваться, пока из него не будет загружен класс;либо во время обычной загрузки класса, либо с помощью метода Bundle loadClass.Загрузка ресурса не вызывает активацию.Это изменение политики активной активации по умолчанию отражается в состоянии пакета и его событий.Когда пакет запускается с использованием политики отложенной активации, необходимо выполнить следующие шаги:

  • Для пакета создается контекст пакета.
  • Состояние пакета перемещается в STARTING.состояние.
  • Событие LAZY_ACTIVATION вызывается.
  • Система ожидает загрузки класса из пакета.
  • Запускается нормальное событие STARTING.
  • Пакет активирован.
  • Состояние пакета перемещено в АКТИВНО.
  • Событие STARTED инициируется.

Если активация не удалась из-за Активатора пакетаМетод start вызвал исключение, пакет должен быть остановлен без вызова метода остановки Bundle Activator.Эти шаги изображены на блок-схеме на рисунке 4.29.Эта блок-схема также показывает разницу в политике активации обычной активной и ленивой активации.

Обновление : поскольку я не могу сказать, какую версию спецификации я открыл вКогда я написал ответ (однако, я полагаю, это было либо 4.2, либо 4.3), я проверил текущую спецификацию v5.0, и в разделе 4.4.6.2 содержится фактическое, семантически эквивалентное место.

...