Может ли кто-нибудь дать мне пример того, как использовать классы рамки osgi? Я понятия не имею, как использовать эти классы ...Как запустить среду OSGi в обычном Java-коде?
BR,
Markus
Может ли кто-нибудь дать мне пример того, как использовать классы рамки osgi? Я понятия не имею, как использовать эти классы ...Как запустить среду OSGi в обычном Java-коде?
BR,
Markus
Это зависит от того, какую реализацию 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.
Спасибо! Теперь мне удалось запустить платформу equinox с некоторыми пакетами из моего java-кода :) Но я все еще немного смущен: если я использую параметр -console для запуска консоли Equinox и затем останавливаю системный пакет, поток не останавливается, пока я не отправлю команду на консоль. У меня есть какая-то петля внутри системного пакета, ожидающего новой команды?!? – Markus
Остановка пучков, даже системного пакета, не обязательно говорит приложению о завершении работы. Консоль, когда вы выпускаете «закрыть», то, что она действительно делает, это остановить все пакеты, отменить регистрацию сервисов и обработчиков и т. Д., А затем вызвать System.exit (0). – omerkudat
Существуют ли какие-либо специальные свойства, которые должны быть установлены для возможности использования класса EclipseStarter из командной строки? В настоящее время это возможно только для использования этого класса, если я запускаю свою программу непосредственно из среды IDE. Если я экспортирую его в файл jar, стартовый класс загрузит системный пакет вместо пакета служб osgi ... поэтому невозможно установить пакет ... – Markus
спецификация не определяет, как экземпляр, настроить и запустить рамки OSGi , Поэтому работа с базой OSGi из вашего обычного Java-кода всегда специфична для данной реализации фреймворка (Equinox, Felix, Knopplerfish, ...).
В ваше приложение легко встроить Apache Felix (OSGi с открытым исходным кодом).
Для получения дополнительной информации см. http://felix.apache.org/site/launching-and-embedding-apache-felix.html.
Я не уверен, хочу ли я использовать другую платформу 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
Вы не следует использовать классы из упомянутого вами пакета. Этот пакет является «внутренним» и не экспортируется из пакета. Доступ к объектам OSGi в равноденствии обычно выполняется через intefaces в org.osgi.framework. – jens
Посмотреть проект equinox-headless-service. У него есть код для запуска равноденствия.
В OSGi 4.1 это стандартизировано. Посмотрите на http://njbartlett.name/2011/03/07/embedding-osgi.html, в котором объясняется, как встраивать любой контейнер OSGi.
Недавно я создал простое доказательство того, как встроить среду выполнения Equinox OSGi в Java. Подробности, пожалуйста, следуйте моему проекту в Github https://github.com/sarxos/equinox-launcher
дубликат: http://stackoverflow.com/questions/4673406/programatically-start-osgi-equinox я бы сказал, что связанное на вопрос принятого ответа также более как ответ на этот вопрос, те, которые перечислены на этой странице. – hoijui