OSGi BundleTracker: порядок отслеживаемых пакетов - PullRequest
2 голосов
/ 02 апреля 2012

Я отслеживаю пакеты OSGi следующим образом:

BundleTracker<Foo> bundleTracker = new BundleTracker<>(context, Bundle.ACTIVE, 
    new BundleTrackerCustomizer<Foo>(){

                @Override
                public Foo addingBundle(Bundle bundle, BundleEvent event) {
                    ...
                }

                @Override
                public void modifiedBundle(Bundle bundle, BundleEvent event, Foo foo) {
                    ...
                }

                @Override
                public void removedBundle(Bundle bundle, BundleEvent event, Foo foo) {
                    ...
                }
            });

Теперь, если пакет B имеет зависимость A и B запущен, то, как я понимаю, первый пакет A будет активирован.Это правильно?

Проблема в том, что я иногда получаю уведомление о некоторых пакетах, прежде чем я получаю уведомление об их зависимых пакетах.Итак, как я могу получить уведомление в порядке зависимости (если B зависит от A, то сначала получить уведомление об A, а затем о B)?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Зависимости кода (импортировать пакет или требовать пакет) между пакетами (в общем случае) не влияют на порядок начала пакетов.Существует некоторое взаимодействие между пакетами, использующими ленивую активацию.

Так что, как только A и B разрешены, запуск B не имеет отношения к запуску A.

Здесь важно отметить, что зависимости уровня модуля являютсяне влияют на порядок запуска пакетов.

2 голосов
/ 03 апреля 2012

Зависимости кода не влияют на активацию, поскольку все пакеты разрешаются атомарно. Поэтому, когда пакет активируется, вы уверены, что он зависит только от разрешенных пакетов. OSGi имеет уровень модуля (с зависимостями пакетов) и уровень обслуживания. Уровень модуля является статическим, а уровень обслуживания позволяет выражать динамические зависимости (с помощью DS).

Если вы боретесь с порядком старта, скорее всего, вы делаете это неправильно ...

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