OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha



Podobné dokumenty
NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Bakalářská práce. Rozšíření frameworku pro ověřování kompatibility softwarových komponent

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky. Herní aplikace pro. komponent na OS Android

RMI Remote Method Invocation

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

UJO Framework. revoluční architektura beans. verze

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky. komponent

Technologie JavaBeans

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Maven. Aplikační programování v Javě (BI-APJ) - 2 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

20. Projekt Domácí mediotéka

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Distribuované systémy a výpočty

Teoretické minimum z PJV

Spring framework 2.0. Roman Pichlík CZJUG

Abstraktní datové typy: zásobník

Komponenty v.net. Obsah přednášky

Enterprise Java Beans 3.0

Vesmír jménem Eclipse

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Programování v jazyku C# II. 9.kapitola

Modulární architektura restauračního systému. Alexandr Makarič

RMI - Distribuované objekty v Javě

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Programování v Javě I. Únor 2009

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Programování v Javě I. Leden 2008

Platformy NetBean a Eclipse. Úvod

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Jini (pronounced GEE-nee) Cvičení 8 - DS 2006

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Principy objektově orientovaného programování

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Michal Podzimek

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky. GUI pro testování komponentových aplikací

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

typová konverze typová inference

Programátorská příručka

1. Programování proti rozhraní

Modelování existujících OSGi komponent

7 Jazyk UML (Unified Modeling Language)

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

WPA - Konfigurace Java EE aplikace (Maven, struktura war arch. kontejnerem Tomcat 8

Začínáme s vývojem pro Android

Návrhové vzory Tvorba objektů

Algoritmizace a programování

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Vyuºití dynamického modulárního systému OSGi pro tvorbu modulárních geoinformatických aplikací. Bc. Zora Ho ej²ová

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Java Managenent Extension JMX

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Čipové karty úvod, Ing. Jiří Buček. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze

Úvod do programovacích jazyků (Java)

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

HMI * nad webovými technologiemi

7 Jazyk UML (Unified Modeling Language)

Platformy NetBean a Eclipse. Úvod

Java a XML. 10/26/09 1/7 Java a XML

boolean hasnext() Object next() void remove() Kolekce

Java - řazení objektů

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Java a Caché IV: Manipulace s objekty

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programovací jazyk Java

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Abstraktní třída a rozhraní

Reflexe RTTI Runtime Type Identification

1. Téma 12 - Textové soubory a výjimky

GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Iterator & for cyklus

Remote Method Invocation RMI

DPKOM_06 Dědičnost entit a zpětná volání posluchači

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

knihovna programátora

KAPITOLA 10. Implementace mezinárodní podpory a lokalizace. V této kapitole:

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

KTE / ZPE Informační technologie

Projekty pro výuku programování v jazyce Java

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

JAVA JavaBeans Java, letní semestr

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

Seminář Java IV p.1/38

8 Třídy, objekty, metody, předávání argumentů metod

Návrh softwarových systém. Návrh softwarových systémů

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky DIPLOMOVÁ PRÁCE

Java Enum Java, zimní semestr ,2017 1

Transkript:

OSGi Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Úvod OSGi (The Open Services Gateway Initiative) definuje architekturu pro vývoj a deplojment modulárních aplikací a knihoven.

Vlastnosti OSGi OSGi umožňuje rozdělit aplikaci do mnoha modulů, a tak jednoduše udržovat jejich vzájemné závislosti. Vývoj v OSGi znamená: vyvíjet jednotlivé aplikace s použitím OSGi API, deployovat aplikaci (tj. množinu modulů) do OSGi kontejneru. OSGi specifikace definuje: množinu služeb, které musí implementovat OSGi kontejner, kontrakt mezi kontejnerem a aplikací. Z pohledu vývojáře má OSGi následující výhody: moduly mohou být instalovány, deinstalovány, startovány a ukončovány dynamicky bez restartu kontejneru, aplikace může obsahovat více verzí jednoho modulu současně.

Open source OSGi kontejnery Aplikace, která splňuje specifikaci OSGi může být deployována s libovolným OSGi kontejnerem. V současnosti existují populární open source OSGi kontejenery: Equinox (referenční implementace) používaná v Eclipse, Apache Felix - používaná v NetBeans, Knopflerfish.

Bundle HelloWorld V OSGi technologii se software skládá z bundlů Bundle obsahuje.class soubory a další zdroje (resource) Bundle musí vždy obsahovat: třídu aktivátor (implementaci rozhraní BundleActivator), manifest. import org.osgi.framework.bundleactivator; import org.osgi.framework.bundlecontext; public class Activator implements BundleActivator { public void start(bundlecontext context) System.out.println("Hello world"); public void stop(bundlecontext context) Sytem.out.println("Goodbye World");

Bundle aktivátor Třída implementující BundleActivator obsahuje public konstruktor bez parametrů, metodu start, kterou volá kontejner při startu aplikace (využívá se např. pro vytvoření spojení s databází). Parametrem metody je objekt BundleContext, který umožňuje komunikaci mezi bundlem a kontejenrem metoda stop, volaná kontejnerem při uzavírání bundlu.

Bundle manifest Kvalifikované jméno aktivátoru je uvedeno v manifestu (souboru MANIFEST.MF): Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: HelloWorld Plug-in Bundle-SymbolicName: com.javaworld.sample.helloworld Bundle-Version: 1.0.0 Bundle-Activator: com.javaworld.sample.helloworld.activator Bundle-Vendor: JAVAWORLD Bundle-Localization: plugin Import-Package: org.osgi.framework;version="1.3.0"

Příklad HelloService HelloService.java package com.javaworld.sample.service; public interface HelloService { public String sayhello(); HelloServiceImpl.java package com.javaworld.sample.service.impl; public class HelloServiceImpl implements HelloService { public String sayhello() { System.out.println( "InsideHelloServiceImpl.sayHello()"); return "Say Hello";

Viditelnost Manifest bundlu HelloWorld:... Import-Package: com.javaworld.sample.service; org.osgi.framework Export-Package: com.javaworld.sample.service Manifest bundlu HelloService:... Import-Package: org.osgi.framework Export-Package: com.javaworld.sample.service Import-Package resp. Export-Package je seznam balíků, které chce bundle importovat resp. exportovat. Rozhraní HelloService je nyní přístupné, avšak ne jeho implementace HelloServiceImpl (třída HelloServiceImpl je interní třída bundle HelloService, ke které nemá přístup žádný jiný bundle).

Viditelnost tříd OSGi kontejner zakrývá interní třídy bundlu, protože každý bundle má svůj vlastní zavaděč tříd. Bundle má přístup ke třídám: zaváděným primárním (bootstrap) zavaděčem (balíky java.*), třídám OSGi frameworku (existuje pro ně speciální zavaděč), třídám v JAR souboru bundlu, třídám v importovaných balících. Omezená viditelnost tříd umožňuje bezpečně měnit implementace interních tříd (např. HelloServiceImpl).

Service-oriented aplikace Bundle může exportovat službu, která může být konzumována jiným bundlem nezávislým na implemetaci služby. Poskytovatel služby registruje jako službu POJO (Plain Old Java Object), který implemetuje rozhraní služby. Konzument vyhledává službu podle implementovaných rozhraní. Registrace služby se provádí metodou BundleContext. registerservice jejíž parametry jsou: jméno rozhraní, skutečný objekt implementující službu, vlastnosti (properties) služby - slouží např. k rozlišení stejných služeb (tj. služeb se stejným rozhraním) poskytovaných více bundly

HelloServiceActivator public class HelloServiceActivator implements BundleActivator { ServiceRegistration helloserviceregistration; public void start(bundlecontext context) HelloService helloservice = new HelloServiceImpl(); helloserviceregistration = context.registerservice( HelloService.class.getName(), helloservice, null); // žádné vlastnosti public void stop(bundlecontext context) helloserviceregistration.unregister();

Import služby public class Activator implements BundleActivator { ServiceReference helloservicereference; public void start(bundlecontext context) helloservicereference = context.getservicereference( HelloService.class.getName()); HelloService helloservice = (HelloService)context.getService( helloservicereference); System.out.println(helloService.sayHello()); public void stop(bundlecontext context) context.ungetservice(helloservicereference);

Sledování služeb Registrace a deregistrace služeb může být sledována pomocí následníka třídy ServiceTracker, která obsahuje methody: addingservice - volána při registraci služby, removedservice -volána při deregistraci služby. Konstruktor třídy musí předat jméno rozhraní služby konstruktoru nadtřídy: public class HelloServiceTracker extends ServiceTracker { public HelloServiceTracker(BundleContext context) { super(context, HelloService.class.getName(), null); public Object addingservice( ServiceReference reference){... return super.addingservice(reference);

Aktivátor používající ServiceTracker public class Activator implements BundleActivator { HelloServiceTracker helloservicetracker; public void start(bundlecontext context) helloservicetracker = new HelloServiceTracker(context); helloservicetracker.open(); HelloService helloservice = (HelloService)helloServiceTracker.getService(); System.out.println(helloService.sayHello()); public void stop(bundlecontext context) helloservicetracker.close();