2013-12-04 3 views
1

В моем проекте имеется пакет OSGi, который предоставляет интерфейс com.xyx.EventProvider в качестве децилятивной службы.Доступ к сервисам из пакетов фрагментов OSGi

Существует еще один сторонний комплект org.eclipse.equinox.http.jetty, к которому я присоединил фрагментный комплект com.xyz.jetty.customizer.

Этот комплект фрагментов должен получить доступ к сервису, открытому через интерфейс com.xyx.EventProvider.

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

Есть ли способ в OSGi для достижения этого?

+0

Вы пробовали FrameworkUtil.getBundle()? Никогда не использовал его сам, но это похоже на способ сделать это. –

ответ

1

Я всегда ненавижу предлагать использовать FrameworkUtil.getBundle().getBundleContext(), потому что это такой хак, но в этом случае это единственное решение.

Вам нужно будет пройти в классе, который определяется пакетом хостов, поскольку фрагменты не могут иметь BundleContext (то есть вызов getBundleContext будет возвращать null).

+0

Наличие BundleContext - это один из способов получить ссылку на услугу, о которой я мог думать. Есть ли другой способ получить ссылку на службу в пакете фрагментов (децилятивным способом или программным)? – atulb

+0

Если бы был другой способ, я бы не предложил вышеупомянутое решение, потому что это действительно хак. По крайней мере, я не могу думать об одном. Например, вы не можете использовать DS, потому что заголовок Service-Component игнорируется в фрагменте. –

Смежные вопросы