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
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
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.
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
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
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
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.
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
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
Zobacz projekt equinox-headless-service. Ma kod uruchamiający równonoc.
W OSGi 4.1 jest to ustandaryzowane. Spójrz na http://njbartlett.name/2011/03/07/embedding-osgi.html, który wyjaśnia, jak osadzić dowolny kontener OSGi.
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
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