Ostatnio, jeśli mówi się o OSGi to raczej w jego wydaniu korporacyjnym, której celem jest połączenie ze standardami spod sztandaru Java EE, tj. Enterprise OSGi. Pisałem o tym niejednokrotnie na blogu. Niejednokrotnie mówiłem o tym na konferencjach oraz "popełniłem" jeden artykuł w temacie - Enterprise OSGi runtime setup with Apache Aries Blueprint.
Teraz jednak okazuje się, że sprawa jest jeszcze bardziej prosta niż mi się poprzednio wydawało. Nie trzeba specjalnych kwalifikacji do zestawienia środowiska Enterprise OSGi. Wystarczy Apache Karaf i sprawa staje się niezwykle trywialna (jeśli założyć, że nauczenie się jego specyficznych poleceń wpasowuje się w to określenie).
Instalacja Karaf sprowadza się do rozpakowania odpowiedniej dystrybucji. Prościzna.
Uruchamiamy Karaf poleceniem bin/karaf. Są inne sposoby i zainteresowanych odsyłam do "producenta".
jacek:~/apps/karaf $ ./bin/karaf __ __ ____ / //_/____ __________ _/ __/ / ,< / __ `/ ___/ __ `/ /_ / /| |/ /_/ / / / /_/ / __/ /_/ |_|\__,_/_/ \__,_/_/ Apache Karaf (2.2.4) Hit 'Jak instruuje początkowy ekran, wystarczy skorzystać z tabulacji i/lub polecenia help, aby dowiedzieć się wiele o poszczególnych poleceniach. Dodatkowo, w większości (wszystkich?) przypadków sama nazwa polecenia powinna wyjaśnić przeznaczenie.' for a list of available commands and '[cmd] --help' for help on a specific command. Hit ' ' or 'osgi:shutdown' to shutdown Karaf.
Weźmy chociażby polecenie features:list (nie zapominamy o tabulacji po pierwszych literach!)
karaf@root> features: features:addurl features:info features:install features:list features:listrepositories features:listurl features:listversions features:refreshurl features:removerepository features:removeurl features:uninstall karaf@root> features:list features:list features:listrepositories features:listurl features:listversions karaf@root> features:list State Version Name Repository Description [uninstalled] [2.2.4 ] karaf-framework karaf-2.2.4 [uninstalled] [2.5.6.SEC02 ] spring karaf-2.2.4 [uninstalled] [2.5.6.SEC02 ] spring-web karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-aspects karaf-2.2.4 [uninstalled] [1.2.1 ] spring-dm karaf-2.2.4 [uninstalled] [1.2.1 ] spring-dm-web karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-instrument karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-jdbc karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-jms karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-struts karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-test karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-orm karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-oxm karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-tx karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-web karaf-2.2.4 [uninstalled] [3.0.6.RELEASE ] spring-web-portlet karaf-2.2.4 [uninstalled] [2.2.4 ] wrapper karaf-2.2.4 [uninstalled] [2.2.4 ] obr karaf-2.2.4 [installed ] [2.2.4 ] config karaf-2.2.4 [uninstalled] [7.4.5.v20110725] jetty karaf-2.2.4 [uninstalled] [2.2.4 ] http karaf-2.2.4 [uninstalled] [2.2.4 ] war karaf-2.2.4 [uninstalled] [2.2.4 ] kar karaf-2.2.4 [uninstalled] [2.2.4 ] webconsole-base karaf-2.2.4 [uninstalled] [2.2.4 ] webconsole karaf-2.2.4 [installed ] [2.2.4 ] ssh karaf-2.2.4 [installed ] [2.2.4 ] management karaf-2.2.4 [uninstalled] [2.2.4 ] eventadmin karaf-2.2.4 [uninstalled] [2.2.4 ] jasypt-encryption karaf-2.2.4 [uninstalled] [0.3 ] transaction karaf-enterprise-2.2.4 OSGi Transaction Manager [uninstalled] [0.3 ] jpa karaf-enterprise-2.2.4 OSGi Persistence Container [uninstalled] [0.3 ] jndi karaf-enterprise-2.2.4 OSGi Service Registry JNDI access [uninstalled] [0.3 ] application-without-isolation karaf-enterprise-2.2.4Jak rozumiem istotę features w Karaf to nic innego jak zestawy funkcjonalne - zbiór pakunków, które razem tworzą pewną funkcjonalną całość. Prześwietlmy sam karaf-framework (ponownie nie zapominamy o tabulacji!)
karaf@root> features: features:addurl features:info features:install features:list features:listrepositories features:listurl features:listversions features:refreshurl features:removerepository features:removeurl features:uninstall karaf@root> features:in features:info features:install karaf@root> features:info kar kar karaf-framework karaf@root> features:info karaf-framework Description of karaf-framework 2.2.4 feature ---------------------------------------------------------------- Feature has no configuration Feature has no configuration files Feature has no dependencies. Feature contains followed bundles: mvn:org.ops4j.pax.url/pax-url-mvn/1.2.8 mvn:org.ops4j.pax.url/pax-url-wrap/1.2.8 mvn:org.ops4j.pax.logging/pax-logging-api/1.6.3 mvn:org.ops4j.pax.logging/pax-logging-service/1.6.3 mvn:org.apache.felix/org.apache.felix.configadmin/1.2.8 mvn:org.apache.felix/org.apache.felix.fileinstall/3.1.10 mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.asm/3.3_2 mvn:org.apache.aries/org.apache.aries.util/0.3 mvn:org.apache.aries.proxy/org.apache.aries.proxy/0.3 mvn:org.apache.aries.blueprint/org.apache.aries.blueprint/0.3.1 mvn:org.apache.karaf.shell/org.apache.karaf.shell.console/2.2.4 mvn:org.apache.karaf.shell/org.apache.karaf.shell.osgi/2.2.4 mvn:org.apache.karaf.shell/org.apache.karaf.shell.log/2.2.4 mvn:org.apache.karaf.shell/org.apache.karaf.shell.packages/2.2.4 mvn:org.apache.karaf.shell/org.apache.karaf.shell.commands/2.2.4 mvn:org.apache.karaf.shell/org.apache.karaf.shell.dev/2.2.4 mvn:org.apache.karaf.jaas/org.apache.karaf.jaas.config/2.2.4 mvn:org.apache.karaf.jaas/org.apache.karaf.jaas.modules/2.2.4 mvn:org.apache.karaf.jaas/org.apache.karaf.jaas.command/2.2.4 mvn:org.apache.karaf.features/org.apache.karaf.features.core/2.2.4 mvn:org.apache.karaf.features/org.apache.karaf.features.command/2.2.4 mvn:org.apache.karaf.features/org.apache.karaf.features.management/2.2.4 mvn:org.apache.karaf.management/org.apache.karaf.management.server/2.2.4 mvn:org.apache.aries.jmx/org.apache.aries.jmx/0.3 mvn:org.apache.aries.jmx/org.apache.aries.jmx.blueprint/0.3I od razu wiadomo z czego składa się taka kompletna funkcjonalnie całość. Bystre oko dostrzeże tam Apache Aries Blueprint (mvn:org.apache.aries.blueprint/org.apache.aries.blueprint/0.3.1).
Nie pozostaje nic innego jak sprawdzić działanie Aries Blueprint z przykładowym projektem z...Aries Blueprint. Korzystamy z pomocy Karaf, aby zainstalować pakunek z repozytorium mavenowego - wystarczy skorzystać z polecenia install i odpowiedniego adresu z mvn na przodzie.
karaf@root> install -s mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.sample/0.3.1 Bundle start Bundle ID: 49 karaf@root> ======== Initializing Foo ========= Service registration notification: 5 -1 707063160: Hello FooBar org.apache.felix.framework.BundleContextImpl@5e6276e5 [a list element, 5] PLN Fri Apr 17 00:00:00 CEST 2009 {osgi.service.blueprint.compname=foo, key=value}Działa! I nie trzeba było wiele. Wystarczy Karaf. Spróbuj sam, a przekonasz się, że "zaawansowane" nie musi oznaczać "niedostępne".
Teraz skoro środowisko jest już zestawione, nie ma już wymówek na brak wiedzy do poznania Enterprise OSGi z kontenerem OSGi Blueprint w roli głównej. Jeśli Spring Framework daje Ci wiele radości, to w połączeniu z OSGi może być jej jeszcze więcej.
Czy pracujesz już z Karaf? A może również i Aries albo Spring-DM? Jakie wrażenia? Jest coś ciekawego, co powaliło Cię na kolana? Chętnie wsłuchałbym się w głos praktyka.
Hej Jacek,
OdpowiedzUsuńCieszę się że Karaf Ci się spodobał. Pisałem o nim raz na swoim blogu (zmigrowanym) - http://dywicki.pl/2010/12/apache-karaf-commands-rediscovered.
Czy używam i pracuję z Karafem? Tak.
Czy z Ariesem? Tak.
Ze Spring-dm? Unikam.
Wrażenia? Nie wyobrażam sobie pracy z OSGi bez Karafa.
Co mnie powaliło na kolana? Po pierwsze - toporność konsoli Equinoxa. ;) Praca z Karafem jest o tyle prostsza że polecenia są łatwe do zapamiętania i nie mają milionów switchy. Funkcjonuje grep, więc można sobie odfiltrować wyniki.
Druga sprawa, bardzo istotna z mojego punktu widzenia - mogę instalować rzeczy z repozytoriów mavena.
Trzecia, mogę uruchomić aplikację webową.
Czwarta, nowe polecenia w konsol to też usługi OSGi.
Piąta, można połączyć się ssh do działającego Karafa (domyślnie port 8101 karaf/karaf).
Wymieniać dalej? :)
Druga sprawa do załatwienia przez pax-url z obsługą protokołu mvn.
OdpowiedzUsuńCo oznacza, że możesz uruchomić aplikację webową? Zakładam, że skoro możesz na karaf to i na equinox + zestaw pakunków OSGi.
Nowe polecenia w Equinox są również pakunkami.
Piąta sprawa już pewnie nietrywialna - do Equinoxa dostajemy się via telnet. O ssh nie słyszałem.
Praca z karafem upraszcza, ale to jedynie (?) udoskonalona powłoka dla pracy z pakunkami + gotowy zestaw pakunków, które można używać.
Więcej o karaf niebawem. Możesz spodziewać się wyłącznie krytycznego spojrzenia :)
Jacek, masz rację mówiąc że jest tam gdzieś pax-url-mvn, bo Karaf to predefiniowany zestaw bibliotek które realizują różne funkcjonalności. Po co męczyć się samemu nad złożeniem środowiska, skoro już ktoś o to się troszczy? To jest cel karafa. :)
OdpowiedzUsuńZespół od pax-* ma wkład w rozwój Karafa (dwóch commiterów paxa jest PMC Karafa).
Aplikacja webowa?
features:install war
i kopiujesz swój plik war do katalogu deploy.
Chcesz więcej?
dev:watch bundle-id
Jak zrobisz install z mavena to wówczas bundle-id zostanie automatycznie zaktualizowany.
Gdybyś potrzebował na przykład kilku equinoxów i w prosty sposóļ zsynchronizować replikację stanu między nimi (np. instalacja tych samych bundli) przyjrzyj się Cellarowi. :) To podprojekt Karafa.
Karaf z pewnością zyskuje na popularności dzięki temu, że ServiceMix wykorzystuje go jako OSGi runtime, co zresztą z przyczyn historycznych jest dosyć zrozumiałe. Swoją drogą, w porównaniu do Equinox'a, praca z Karaf'em jest o niebo przyjemniejsza - wspomniana wcześniej konsola Equinox'a raczej nie powala możliwościami.
OdpowiedzUsuńBartek, Karaf != OSGi runtime. To jedynie powłoka upraszczająca (ale równocześnie ukrywająca) środowisko uruchomieniowe, którym może być Felix (domyślnie), Equinox i in. Z resztą zgadzam się.
OdpowiedzUsuńDo czego stosujesz Karafa? Czasami brakuje mi inspiracji i poszukuję ich u czytelników.
Cześć Jacku, w tej chwili eksperymentuję trochę z ServiceMix/Fuse ESB - Karaf sprawia, że można skupić się bardziej na tworzeniu rozwiązania niż na problemach z zestawieniem środowiska.
OdpowiedzUsuńKaraf znacznie upraszcza etap testów systemowych w ciągłej integracji. U nas działa to tak, że w jenkinsie mamy dwa joby - pierwszy do zbudowania komponentów w formacie bundle-jar i wysłania ich do lokalnego repozytorium mavena, drugi do zainstalowania komponentów (w postaci osgi features) na instancji karafa i przeprowadzenia testów systemowych. Dzięki karafowi ten ostatni proces jest ograniczony do kilkunastu linijek skryptów.
OdpowiedzUsuń