2009-05-24 11 views
7

Czy ktoś może podać mi przykład korzystania z klas ramowych osgi? Nie mam pojęcia, jak korzystać z tych klas ...Jak uruchomić środowisko OSGi w zwykłym kodzie java?

BR,

Markus

+0

duplikat: http://stackoverflow.com/questions/4673406/programatically-start-osgi-equinox powiedziałbym, że związana pytanie zaakceptował odpowiedź jest również bardziej dopasowywanie jako odpowiedź na to pytanie, te wymienione na tej stronie. – hoijui

Odpowiedz

7

To zależy od tego, z której wersji OSGi korzystasz. Używam Eclipse Equinox i uruchamiam framework z poziomu zwykłej klasy java. Słoik środowiska Eclipse (o nazwie org.eclipse.osgi_longversion.jar) ma klasę o nazwie org.eclipse.core.runtime.adaptor.EclipseStarter. Spowoduje to uruchomienie systemu OSGi.

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

Potrzebujesz pewnych właściwości do skonfigurowania architektury. Możesz zobaczyć wszystkie udokumentowane właściwości here. Po wywołaniu uruchamiania otrzymany plik BundleContext jest kontekstem pakietu systemowego, dzięki czemu można instalować/uruchamiać/zatrzymywać pakiety z tego miejsca.

Jeśli ustawisz wszystkie właściwości, nie będziesz musiał przekazywać żadnych argumentów do uruchomienia().

Możesz pobrać cały Equinox i inne pakiety z Equinox website.

+1

Dzięki! Teraz mogłem uruchomić frameworka equinox z pewnymi pakietami z mojego kodu java :) Ale wciąż jestem trochę zdezorientowany: Jeśli użyję parametru -console do uruchomienia konsoli Equinox i zatrzymam pakiet systemowy, wątek nie kończy się, dopóki nie wyślę polecenia do konsoli. Mayber tam jakiś rodzaj pętli wewnątrz pakietu systemowego, który czeka na nowe polecenie?!? – Markus

+0

Zatrzymywanie pakietów, nawet pakietu systemowego, nie musi oznaczać zamknięcia aplikacji. Konsola, kiedy wydajesz "blisko", naprawdę zatrzymuje wszystkie pakiety, wyrejestrowuje usługi i programy obsługi itd., A następnie wywołuje System.exit (0). – omerkudat

+0

Czy są jakieś specjalne właściwości, które muszą być ustawione, aby móc korzystać z klasy EclipseStarter z wiersza poleceń? Obecnie mogę używać tej klasy tylko wtedy, gdy uruchamiam mój program bezpośrednio z IDE. Jeśli wyeksportuję go do pliku JAR, klasa startowa ładuje pakiet systemowy zamiast pakietu usług osgi ... dlatego nie jest możliwe zainstalowanie pakietu ... – Markus

2

W specyfikacji nie definiuje jak instancję, skonfigurować i uruchomić ramy OSGi . Dlatego uruchomienie OSGi ze zwykłego kodu Java jest zawsze specyficzne dla danej implementacji frameworków (Equinox, Felix, Knopplerfish, ...).

Jest dość łatwy do osadzenia w swojej aplikacji Apache Felix (open-source framework OSGi).

Aby uzyskać więcej informacji, patrz http://felix.apache.org/site/launching-and-embedding-apache-felix.html.

+0

Nie jestem pewien, czy naprawdę chcę użyć innej struktury OSGi obok Equinox. Szukam przykładu, który wyjaśnia, jak używać klasy org.eclipse.osgi.framework.internal.core.OSGi. Do tej pory znalazłem tylko niekompletny przykład na niemieckim forum: http://www.java-forum.org/plattformprogrammierung/81133-custom-open-services-gateway-initiative-launcher-mit-config-ini.html – Markus

+1

You nie powinien używać klas z wymienionego pakietu. Ten pakiet jest "wewnętrzny" i nie jest eksportowany z pakietu. Dostęp do rzeczy OSGi w równonoc jest zwykle wykonywany za pośrednictwem intefaces w org.osgi.framework. – jens

0

Niedawno stworzyłem prosty proof-of-concept, jak osadzić środowisko wykonawcze Equinox OSGi w Javie. Szczegółowe informacje na temat mojego projektu należy wykonać w Github https://github.com/sarxos/equinox-launcher

Powiązane problemy