Wprowadzenie do OSGi i Spring Dynamic Modules (Spring-DM)
Transkrypt
Wprowadzenie do OSGi i Spring Dynamic Modules (Spring-DM)
Wprowadzenie do OSGi i Spring Dynamic Modules (Spring-DM) Jacek Laskowski http://www.JacekLaskowski.pl Java Developers Day 2008 – Kraków, 16.10.2008, wersja 1 Prelegent, to kto? ● Entuzjasta Java EE 5 i OSGi ● Założyciel i lider Warszawa JUG ● Uczestnik wielu projektów otwartych, m.in. Spring-DM ● ● ● ● Członek zespołów Apache Geronimo, Apache OpenEJB, Apache ServiceMix, Apache ActiveMQ i in. Członek zespołu NetBeans DreamTeam Prowadzi Notatnik Projektanta Java EE http://www.JacekLaskowski.pl/ Służbowo: konsultant oprogramowania WebSphere w IBM OSGi ogólnie ● ● ● OSGi – Specyfikacja modułów dla Javy OSGi Alliance ciałem rozwijającym standard OSGi – http://www.osgi.org Początkowo specyfikacja dla urządzeń wbudowanych, później mobilnych, a obecnie również dla korporacyjnych ● Środowisko uruchomieniowe pakunków OSGi ● „Ulepszona ładowarka klas” ● „Środowisko do zarządzania zależnościami (wersjonowanie)” OSGi historycznie JSR 277 Java Module System OSGi R4.1 Październik 2006 Czerwiec 2007 JSR 291 OSGi Open Services Gateway Initiative JSR 8 22 listopad 1999 Open Services Gateway Specification 22 maj 1999 – 10 maj 1999 OSGi Alliance Marzec 1999 Dynamic Component Support for Java SE Sierpień 2007 OSGi technicznie ● OSGi – Szkielet modułów dla Javy ● Podstawowy byt OSGi – pakunek ● Deklaracja wymagań – pakunek to plik jar z nagłówkami w META-INF/MANIFEST.MF ● Wersjonowanie – deklarowanie wersji ● Deklarowane przestrzenie klas pakunków ● Środowisko pojedynczego JVM ● Platforma zorientowana na usługi – odseparowanie dostawcy od klienta z użyciem Rejestru Usług (SOA?) OSGi wizualnie http://www.osgi.org/About/Technology#Framework Metadane OSGi ● ● ● Bundle-SymbolicName – *obowiązkowy* identyfikator pakunku, najczęściej RDNC Export-Package – pakiety udostępniane przez pakunek Import-Package – pakiety wymagane przez pakunek ● Bundle-Name – nazwa pakunku ● Bundle-Activator – aktywator pakunku ● ● Bundle-Classpath – ścieżka dodatkowych bibliotek klas Bundle-ManifestVersion – wersja OSGi Tworzenie metadanych OSGi ● ● ● Manualnie – w końcu to jedynie edycja META-INF/MANIFEST.MF Automatyczne – Bnd – http://www.aqute.biz/Code/Bnd – Wtyczka Apache Felix Bundle dla Apache Maven 2 http://felix.apache.org/site/maven-bundle-plugin-bnd.htm Metafizyczne – wiara w istnienie już przygotowanych pakunków dla popularnych projektów – OSGi Bundle Repository (ORB) – Eclipse Orbit – SpringSource Enterprise Bundle Repository Dostępne platformy OSGi ● ● ● ● ● Apache Felix – http://felix.apache.org – OSGi R4.0 Eclipse Equinox – http://eclipse.org/equinox – OSGi R4.1 (częściowo OSGi R4.2) Knopflerfish – http://knopflerfish.org – OSGi R4.0 Concierge – http://concierge.sourceforge.net OSGi R3 Narzędzie „nakładka” – pax-runner http://wiki.ops4j.org/confluence/display/ops4j/Pax+Run ner Niuanse OSGi a Java EE ● Uruchomienie pakunku jako aplikacji korporacyjnej możliwe, ale: – Kontener w OSGi udostępnia wymagane biblioteki, a pakunek musi zadeklarować chęć ich wykorzystania Import-Package: javax.servlet,javax.servlet.http,javax.servlet.resources Bundle-Classpath: .,WEB-INF/classes,WEBINF/lib/some.jar,WEB-INF/lib/lib.jar – Kontener – pakunek(i) OSGi lub uruchamia wbudowane środowisko OSGi Spring Dynamic Modules ● ● ● Spring Dynamic Modules for OSGi Service Platforms (Spring-DM) http://www.springframework.org/osgi Połączenie cech Spring Framework i OSGi Uproszczenie tworzenia i uruchamiania aplikacji springowych w środowisku OSGi – Pakunki springowe – Rozgłaszanie usług springowych – Integracja z kontenerami webowymi ● Znajomość Spring Framework zalecana ● Wersja produkcyjna – 1.2.0 M1 Spring-DM i Spring Framework ● ● Tworzenie pakunków będącymi de facto ziarnami springowymi Brak zależności od pakietów OSGi – Można „związać się” z ziarnem bundleContext ● Nagłówek Spring-Context w MANIFEST.MF ● Konfiguracja pakunków w „beans.xml” osgi:service – osgi:reference – osgi:listener „beans.xml” w META-INF/spring/*.xml – ● Spring-DM w beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"> <bean id="weatherService" class="org.springframework.osgi.samples.weather.service.WeatherServiceImpl"> <property name="weatherDao"> <osgi:reference interface="org.springframework.osgi.samples.weather.dao.WeatherDao"/> </property> </bean> <osgi:service ref="weatherService"> <osgi:interfaces> <value>org.springframework.osgi.samples.weather.service.WeatherService</value> </osgi:interfaces> <osgi:service-properties> <entry key="foo" value="bar"/> <entry key="baz" value="myprop"/> </osgi:service-properties> </osgi:service> </beans> Spring-DM wizualnie http://static.springframework.org/osgi/docs/current/reference/html/app-deploy.html Praktycznie o OSGi i Spring-DM ● Przykłady dostępne na stronach Apache Felix http://felix.apache.org/site/apache-felix-osgi-tutorial.html ● ● Przykłady dystrybuowane w ramach Spring-DM katalog src/samples Zobaczmy kilka w działaniu... Lektura o OSGi i Spring-DM ● Spring Dynamic Modules Reference Guide http://static.springframework.org/osgi/docs/current/reference/html/ ● Getting Started with OSGi http://neilbartlett.name/blog/osgi-articles/ ● Pro Spring Dynamic Modules for OSGi™ Service Platforms http://www.apress.com/book/view/1430216123 ● Tutorial for Spring Dynamic Modules (DM) for OSGi™ Service Platforms http://springosgi.googlepages.com/ ● Hello, OSGi, Part 1: Bundles for beginners http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html ● ...i wiele, wiele innych. Pytania? Słucham? Zapraszam na http://www.JacekLaskowski.pl