2013-11-18 4 views
0

Я пытаюсь получить доступ к контексту пакета OSGI в приложении Java для получения работающего сервиса.Доступ к контексту связки OSGI в приложении

ctx.getServiceReference(ReceiverService.class.getName()); 

Я пытался с этим:

BundleContext ctx = FrameworkUtil.getBundle(ReceiverService.class).getBundleContext(); 

но он возвращает нуль

Я инициализацию Knopflerfish в графическом режиме с предустановленными пучками, и я начинаю сверток SenderSevice и сверток ReceiveService. Я хочу получить доступ к ReceiveService для использования полученных объектов в приложении Java. Поэтому мне нужно получить доступ к контексту пакета ReceiveService.

ответ

1

Где загружен интерфейс ReceiveService? Он экспортируется из пакета? К сожалению, системный пакет не может импортировать пакеты из обычных пакетов.

Поскольку вы внедряете OSGi и обмениваетесь информацией об услугах между внешним приложением и внутренним каркасом, пакеты интерфейсов должны быть загружены внешним приложением и экспортированы с использованием свойства org.osgi.framework.system.packages.extra. Это свойство передается через карту, которую вы предоставляете FrameworkFactory.newFramework(). Затем обычные пакеты могут импортировать служебный интерфейс и публиковать службу.

Для доступа к BundleContext из внешнего приложения вы должны использовать метод getBundleContext() объекта Framework. Это возвращает BundleContext системного пакета.

+0

Спасибо за ваш ответ, тогда мне нужно вставить Osgi в мое приложение с FrameworkFactory.newFramework(). Если бы я использовал это, я зарядил новую структуру, есть ли способ зарядить другую конфигурацию Knopflerfish, или мне нужно установить все пакеты в новой структуре? – user2992151

+0

Я не понимаю вопроса. –

+0

Прости, я постараюсь выразить лучше. Теперь я запускаю knopflerfish в графическом режиме, поэтому я уже установил пакеты. Если я использую FrameworkFactory.newFramework(), у меня нет пакета. Есть ли способ зарядить конфигурацию другого Knopflerfish (графический режим), или мне нужно снова установить все пакеты в java-приложении? – user2992151

2

Возможно, вы используете инфраструктуру OSGi, встроенную в Java-приложение, - как вы начали эту структуру?

Стандартный путь будет

Framework framework = FrameworkFactory.newFramework(props); 

Тогда вы можете получить контекст системы пучка из экземпляра framework:

BundleContext ctx = framework.getBundleContext(); 

В вашем примере, ReceiverService, скорее всего, загружается загрузчиком классов приложений и а не загрузчиком классов, поэтому FrameworkUtil не может определить пакет, который загрузил этот класс.

+0

I init Knopflerfish в графическом режиме с предустановленными пакетами, и я запускаю пакет SenderSevice и набор ReceiveService. Я хочу получить доступ к ReceiveService для использования полученных объектов в приложении Java. Поэтому мне нужно получить доступ к контексту пакета ReceiveService. Это правильный путь? – user2992151

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