2009-05-24 3 views
7

Может ли кто-нибудь дать мне пример того, как использовать классы рамки osgi? Я понятия не имею, как использовать эти классы ...Как запустить среду OSGi в обычном Java-коде?

BR,

Markus

+0

дубликат: http://stackoverflow.com/questions/4673406/programatically-start-osgi-equinox я бы сказал, что связанное на вопрос принятого ответа также более как ответ на этот вопрос, те, которые перечислены на этой странице. – hoijui

ответ

7

Это зависит от того, какую реализацию OSGi вы используете. Я использую Eclipse Equinox и запускаю фреймворк из обычного класса Java. Ящик Eclipse (называемый org.eclipse.osgi_longversion.jar) имеет класс org.eclipse.core.runtime.adaptor.EclipseStarter. Это загрузит вашу инфраструктуру OSGi.

Properties props = new Properties(); 
// add some properties to config the framework 
EclipseStarter.setInitialProperties(props); 
BundleContext context = EclipseStarter.startup(new String[]{},null); 

Для настройки рамки необходимы некоторые свойства. Вы можете увидеть все документированные свойства here. После того, как вы вызываете startup, BundleContext, который вы получаете, представляет собой контекст System Bundle, поэтому вы можете установить/запустить/остановить пакеты отсюда.

Если вы установили все свойства, вам не придется передавать какие-либо аргументы в startup().

Вы можете скачать все Equinox и другие пакеты из Equinox website.

+1

Спасибо! Теперь мне удалось запустить платформу equinox с некоторыми пакетами из моего java-кода :) Но я все еще немного смущен: если я использую параметр -console для запуска консоли Equinox и затем останавливаю системный пакет, поток не останавливается, пока я не отправлю команду на консоль. У меня есть какая-то петля внутри системного пакета, ожидающего новой команды?!? – Markus

+0

Остановка пучков, даже системного пакета, не обязательно говорит приложению о завершении работы. Консоль, когда вы выпускаете «закрыть», то, что она действительно делает, это остановить все пакеты, отменить регистрацию сервисов и обработчиков и т. Д., А затем вызвать System.exit (0). – omerkudat

+0

Существуют ли какие-либо специальные свойства, которые должны быть установлены для возможности использования класса EclipseStarter из командной строки? В настоящее время это возможно только для использования этого класса, если я запускаю свою программу непосредственно из среды IDE. Если я экспортирую его в файл jar, стартовый класс загрузит системный пакет вместо пакета служб osgi ... поэтому невозможно установить пакет ... – Markus

2

спецификация не определяет, как экземпляр, настроить и запустить рамки OSGi , Поэтому работа с базой OSGi из вашего обычного Java-кода всегда специфична для данной реализации фреймворка (Equinox, Felix, Knopplerfish, ...).

В ваше приложение легко встроить Apache Felix (OSGi с открытым исходным кодом).

Для получения дополнительной информации см. http://felix.apache.org/site/launching-and-embedding-apache-felix.html.

+0

Я не уверен, хочу ли я использовать другую платформу OSGi рядом с Equinox. Я ищу пример, объясняющий, как использовать класс org.eclipse.osgi.framework.internal.core.OSGi. До сих пор я нашел неполный пример на немецком форуме: http://www.java-forum.org/plattformprogrammierung/81133-custom-open-services-gateway-initiative-launcher-mit-config-ini.html – Markus

+1

Вы не следует использовать классы из упомянутого вами пакета. Этот пакет является «внутренним» и не экспортируется из пакета. Доступ к объектам OSGi в равноденствии обычно выполняется через intefaces в org.osgi.framework. – jens

0

Недавно я создал простое доказательство того, как встроить среду выполнения Equinox OSGi в Java. Подробности, пожалуйста, следуйте моему проекту в Github https://github.com/sarxos/equinox-launcher