Подтвердить что ты не робот

Программно запустить OSGi (равноденствие)?

Я хотел бы иметь возможность легко запустить OSGi framework (желательно Equinox) и загрузить все пакеты, перечисленные в моем pom из java main.

Возможно ли это? Если да, то как?

Кажется, что инструменты pax будут делать это, но я не могу найти никакой документации, указывающей на это. Я знаю, что могу запустить Equinox так:

BundleContext context = EclipseStarter.startup( ( new String[] { "-console" } ), null );

Но я бы хотел сделать больше - как я сказал: загрузите больше пакетов, возможно, начните некоторые службы и т.д.

4b9b3361

Ответ 1

Любая инфраструктура OSGi (R4.1 или новее) может быть запущена программно с помощью API FrameworkFactory:

ServiceLoader<FrameworkFactory> ffs = ServiceLoader.load(FrameworkFactory.class);
FrameworkFactory ff = ffs.iterator().next();
Map<String,Object> config = new HashMap<String,Object>();
// add some params to config ...
Framework fwk = ff.newFramework(config);
fwk.start();

Рамка OSGi теперь запущена. Поскольку Framework extends Bundle вы можете вызвать getBundleContext и вызвать все обычные методы API для управления пакетами, регистрации служб и т.д. Например

BundleContext bc = fwk.getBundleContext();
bc.installBundle("file:/path/to/bundle.jar");
bc.registerService(MyService.class.getName(), new MyServiceImpl(), null);
// ...

Наконец, вы должны просто ждать завершения работы фреймворка:

fwk.stop();
fwk.waitForStop(0);

Чтобы повторить, этот подход работает для любой OSGi-структуры, включая Equinox и Felix, просто поместив JAR-структуру в путь к классам.

Ответ 2

Этот поток может быть немного устаревшим, но в любом случае...

Pax имеет отличную поддержку URL-адресов maven, у него даже есть обработчик url ​​для переноса, который позволяет вам динамически конвертировать банку non-osgi в хорошие аккуратные пакеты.

http://wiki.ops4j.org/display/paxurl/Mvn+Protocol

    <dependency>
        <groupId>org.ops4j.pax.url</groupId>
        <artifactId>pax-url-wrap</artifactId>
        <version>1.2.5</version>        
    </dependency>
    <dependency>
        <groupId>org.ops4j.pax.url</groupId>
        <artifactId>pax-url-mvn</artifactId>
        <version>1.2.5</version>        
    </dependency>

Тогда команда будет следующей:

install -s mvn:groupId:artifactId:version:classifier

Примечание: сценарий курица-яйцо - вам нужно установить их с помощью обработчика файла: url или поместить его в каталог autodeploy.

У Karaf все это встроено в дистрибутив, так что, возможно, посмотрите на источник ракеты Karaf?

2-я нота: развертывание моментальных снимков разрешено путем добавления @snapshots к URL-адресу репо, управление конфигурацией осуществляется с помощью ConfigAdmin

Что касается управления всеми вашими зависимостями, определенными POM, посмотрите на функции Karaf - есть плагин, который позволит генерировать XML файл функций, который затем может быть использован для развертывания всего вашего приложения: http://karaf.apache.org/manual/2.1.99-SNAPSHOT/developers-guide/features-maven-plugin.html

Кроме того, этот артефакт XML может быть развернут на ваш OBR, поэтому вы можете использовать настройку Felix/Equinox/Karaf в ваниле, добавить обработчик url ​​mvn и настроить с помощью mvn repo вашей компании, а затем предоставить все приложение =)

Ответ 3

Изменить: реализовано, что вы хотите начать с java. Мне стыдно за то, что вы недостаточно внимательно читаете

Посмотрите эту ссылку. http://www.eclipsezone.com/eclipse/forums/t93976.rhtml

По существу

public static void main(String args[]) throws Exception {
  String[] equinoxArgs = {"-console","1234","-noExit"};
  BundleContext context = EclipseStarter.startup(equinoxArgs,null);
  Bundle bundle = context.installBundle(
    "http://www.eclipsezone.com/files/jsig/bundles/HelloWorld.jar");
  bundle.start();
}

Изменить: Maven

Кажется, что https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1 содержит службу обработчиков UGL OSGi, которая может принимать URL-адреса следующего формата и загружать из них пакеты (mvn://repo/bundle_path)