550 likes | 759 Views
Programrendszerek Fejlesztése. 7 / 6. Tartalom. OSGI Bevezető A cél környezet kezelése OSGI alapok Komponensek Szolgáltatások Spring Spring a középrétegben Spring Inversion of Control + AOP Objektumok összedrótozása Spring adatbázis komponensek. Az OSGi platform.
E N D
Tartalom • OSGI • Bevezető • A cél környezet kezelése • OSGI alapok • Komponensek • Szolgáltatások • Spring • Spring a középrétegben • Spring Inversion of Control + AOP • Objektumok összedrótozása • Spring adatbázis komponensek
Az OSGi platform • Egy Java™ keretrendszer távolról telepíthető szolgáltatások és alkalmazások kezelésére: • Megbízhatóság • Széles skálájú elosztás • Eszközök széles spektruma • Együttműködő • 4.0 verziówww.osgi.org …
OSGi tagok Nokia CorporationNTTOracle CorporationProSyst Software GmbHRed HatSamsung Electronics Co., Ltd.SAP AGSiemens AGSiemens Enterprise CommunicationsSoftware AGSpringSourceSprintSun Microsystems, Inc.Telcordia Technologies, Inc.TIBCO Software In Aplix CorporationDeutsche TelekomEricsson Mobile Platforms ABGigaSpaces TechnologiesHarman/Becker Automotive Systems GmbHHitachi, Ltd.IBM CorporationIndustrialTechnology Research InstituteIONA TechnologiesLinkedInMakewaveMitsubishi Electric CorporationMotorola, Inc.NEC Corporation
Miért használjuk az OSGi szolgáltatás platformot? • Milyen problémát próbál a keretrendszer megoldani? • Egységes szoftver piac: • Korlátozott bináris szoftver portabilitás • A heterogén szoftver rendszerek fejlesztése komplex feladat • Konfigurációk kezelése, testreszabás, ... • Az eszközön lévő szoftverek életciklusának kezelése
Service Oriented Programming Structured Programming Assembly A szoftver komplexitása Productivity Complexity and Size
Szolgáltatás orientált architektúra • Különítsük el a megegyezést az implementációtól • Alternatív implementációk lehetősége • Az implementációk dinamikus fellelése és csatolása • Szarződés alapú (interfész) • A komponensek újrahasznosíthatóak Service Contract provides Component uses
The Application The Application Application Application Application Application Speech Application Blue- tooth XML USB Application Application OSGi Library OSGi OSGi JTAPI 3D Web Server Math OSGi Java VM Java VM Mail Comm Ports Security TCP/IP Java VM System Class Libraries Java VM Imaging Media FW SQL Distri- buted Java VM Java VM Java VM Operating System Crypto- graphy UPnP Direc- tories GUI Operating System Operating System Operating System Java VM Java VM Operating System Operating System Keretrendszer • Lehetővé teszi az alkalmazások számára egy közös Java VM használatát • Osztálybetöltés • Izoláció/Biztonság • Kommunikáció és Együttműködés az alkalmazások között • Életciklus menedzselése • Szabály mentes • A szabályokat a csomagok határozzák meg • Az API teljesen önmenedzselő
Futtató környezet • Az OSGi APIs a J2SE és J2ME CDC csak egy részét használja • OSGi Minimum EE • A legtöbb profillal megegyezik • A biztonság nem kötelező CLDC/ MIDP J2SE CDC/FP OSGi Min.
Biztonsági réteg • Tulajdonságai • Opcionális • Finomhangolható • Menedzselhető • A Java biztonsági architektúrára épül • Kód azonosítás • Lokáció alapján • Aláíró alapján • Opcionális biztonság • checkPermission • …
Modul réteg • A szabványos Java környezet nem biztosítja a megfelelő eszközöket a verziók kezelésére • Megoldás • Specializált osztálybetöltők (Jboss, NetbEans, …) • OSGi • Az alkalmazás könyvtárakat batyuba kötni (bundle) • Az osztálybetöltés modularizált • A sima Java-ban a Class Path mint sorbarendezett lista • Védelem • A sima Java nem tud védelmet nyújtani • Verziókezelés • A sima Java nem tudja ugyanannak a csomagnak különböző verzióit kezelni batyu batyu batyu batyu batyu batyu batyu
Keretrendszer entitások OSGi Keretrendszer A Batyu {} B Batyu {} C Batyu {} = szolgáltatás, java interfész
Batyuk • A batyuegy alkalmazás • Mint a Windows EXE fájl • Egy jar fájl • A batyu regisztrálhat szolgáltatásokat • A szolgáltatás Java interfésszel van specifikálva és több batyu is megvalósíthatja • A szolgáltatások a batyu életciklusától függenek • Keresések segítségével lehet a megfelelő szolgáltatásokat megtalálni • Lekérdező nyelv
Mi a Batyu? • A Batyu tartalma (általában egy JAR fáljban): • Leíró (Mainfest) • Kód • Erőforrások • A Keretrendszer: • Olvassa a batyu leíróját • Telepíti a kódot és az erőforrásokat • Feloldja a függőségeket • Futásidőben: • Meghívja a batyu aktiválót, hogy elindítsa a batyut • Kezeli a java classpath-ot • Kezeli a szolgáltatás függőségeket • Meghívja a batyu aktivátort, hogy leállítsa a batyut A Batyu {}
A Leíró ( META-INF/MANIFEST.MF) is varázslóval készíthető (pl.: Eclipse) Notice: Bundle-Activator (az életciklus esményekre hívódik meg) Import-Package (függőségek) Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Helloworld Plug-in Bundle-SymbolicName: helloworld Bundle-Version: 1.0.0 Bundle-Localization: plugin Bundle-Activator: helloworld.Activator Import-Package: org.osgi.framework;version="1.3.0" Hello World META-INF/MANIFEST.MF
A kód vázat is gyárthatjuk varázslóval package helloworld public class HelloWorld implements BundleActivator { public void start( BundleContext context) throws Exception{ System.out.println( "Hello world!!"); } public void stop( BundleContext context) throws Exception { System.out.println( "Goodbye world!!"); } } Hello World HelloWorld.java
Osztályútvonal kezelése • A Java alkalmazás csomagokba helyezett osztályokból áll • A Java keretrendszer az osztályokat a különböző jar fáljokból tölti be • Ezek általában a CLASSPATH környezeti változóban vannak specifikálva • Az OSGi keretrendszer az osztálybetöltők hálózatát kezeli. • A leíró fejlécekkel paraméterezhetők • A batyuk közötti függőségekre a keretrendszer kezeli • Képes a batyuk szükség szerinti betöltésére
OSGi fügőség feloldás Framework org.osgi.framework org.osgi.service.http Bundle A Export org.osgi.service.log com.ibm.service.log com.ibm.j9 Import org.osgi.service.http javax.servlet.http A resolved Bundle B Export ericsson.osgi javax.servlet javax.servlet.http org.osgi.service.log Import org.osgi.service.http org.osgi.service.log B resolved
Csomag vagyBatyu függőségek? • Az OSGi mindkét megoldást támogatja • A Batyu függőség egyszerű de olyan csomagokat is importál amikre nincs szükség, nehézkesebb a verziózás p Import-Package q r r s Require-Bundle r
Osztálybetöltés • Boot osztály útvonal (java.*) • Keretrendszer osztály útvonal • Batyu tér
Együttműködési modell • Az OSGi több mint Applet, MIDlet, Xlet futtaó környezet • A Batyuk együttműködési lehetőségei: • Szolgáltatás objektumok • Csomag megosztás • A dinamikus szolgáltatás tár segítségével a batyu meg tudja keresni és nyomon tudja követni a számára szükséges szolgáltatásokat • A keretrendszer kezeli ezt az együttműködést • Függőségek, biztonság
Szolgáltatás tár csomagko csomagok Együttműködési modell OSGi Kertrendszer Batyu Batyu JAVA Operációs rendszer Hardver
Életciklus réteg • A Rendszer (System) batyu az OSGi kererendszert reprezentálja • Egy API-t biztosít a batyuk kezelésére • Telepítés • Feloldás • Indítás • Leállítás • Lekérdezés • Frissítés • Telepítés törlése • A modul rétegen alapul System bundle bundle M Bundle X Bundle X-v2 Bundle B Bundle A
Életciklus réteg • A batyut a Bundle Activator osztály segítségével indtíják • A leíró fejlécében hivatkozunk erre az osztályra • Az interfész metódusai • Start: Inicializál és azonnal visszatér • Stop: takarítás • Az akitvátor megkapja a batyu környezetet amely segítségével hozzáfér a keretrendszer erőforrásaihoz INSTALLED STARTING start RESOLVED ACTIVE stop UNINSTALLED STOPPING
Entitások • Bundle • BundleContext • BundleActivator • BundleEvent • FrameworkEvent • BundleListener • Synchronous Bundle Listener • FrameworkListener • BundleException • SystemBundle
Szolgáltatás réteg • VM-en belüli szolgáltatás modell • Szolgáltatások felderítése, állapotuk figyelése • Csatlakozás szolgáltatásokhoz • programból, • Alapértelmezett szabályokkal • Telepítő konfigurációval • Nem hagyományos SOA • VM-en belüli
discover Szolgáltatások service register bind • A szolgáltatás egy a kerterendszerbe regisztrált objektum • Java interfészként van regisztrálva • A batyu szolgáltatásokat regisztrálhat • A batyu szolgáltatásokat használhat • 1..1 • 0..1 • 0..n • Dinamikus keresésel lehet szolgáltatásokat fellelni • A szolgáltatások bármikor eltűnhetnek! package org.osgi.service.log; import org.osgi.framework.ServiceReference; publicinterface LogService { publicstaticfinalintLOG_ERROR= 1; publicstaticfinalintLOG_WARNING= 2; publicstaticfinalintLOG_INFO= 3; publicstaticfinalintLOG_DEBUG= 4; publicvoid log(int level, String message); publicvoid log(int level, String message, Throwable exception); publicvoid log(ServiceReference sr, int level, String message); publicvoid log(ServiceReference sr, int level, String message, Throwable exception); }
Szolgáltatások • A keretrendszerszolgáltatástára minden batyunak elérhető • Különböző gyártó által létrehozott batyuk azonos interfészt is megvalósíthatnak • A felhasználónak nem látható az implementáció • Az operátor lecserélheti az egyes batyukat a működés megzavarása nélkül • Az OSGi definiál egy köteg szabványos szolgáltatást • A szolgáltatással kapcsolatos eseményekre felíratkozhatunk • A szolgáltatásoknak egyedi ID-je van • Jogosultságkezelés • Az Operátor kezeli • A szolgáltatásoknak tulajdonságai vannak • Lekérdező nyelv a megfelelő szolgáltatás fellelésére • A batyuk frissíthetik a tulajdonságokat
Szolgáltatások manipulálása • A BundleContext segítségével hozzáférhetünk a szolgáltatásokat manipuláló metódusokhoz • A szolgáltatás regisztrációt a ServiceRegistration objektumok kezelik • Segítségükkel módosíthatjuk a paraméteket, vagy eltávolíthatjuk a szolgáltatást • A szolgáltatás referenciák segítségével hozzáférhetünk a szolgáltatáshoz és annak tulajdonságaihoz is. • A szolgáltatásokhoz a getService metódussal férünk hozzá, az ungetService metódussal tudjuk elengedni ServiceRegistration registerService( String clss, Object srvc, Dictionary prprts) ServiceReference[] getServiceReferences( String clss, String fltr) Object getService( ServiceReference reference) boolean ungetService( ServiceReference rfrnc);
Spring • Rétegelt Java/J2EE alkalmazás keretrendszer Rod Johnoson kódja alapján („Expert One-one-One J2EE Design and Development” Wrox, 2002) • Nyílt forrású
A Spring célja • A J2EE-nek egyszerűbbnek kell lennie • Az OO tervezés fontosabb mint az implementációs technológia pl.: J2EE. • A kód tesztelhetősége kritikus (ebben segít a spring) • A Spring nem versenyzik, hanem kiegészíti a meglévő jó megoldásokat
Spring • Egy könnyűsúlyú a web alkalmazások minden rétegét megcímező keretrendszer. • Megjelenítés réteg – A Struts-hoz hasonló de attól többet nyújtó MVC keretrendszer. • Business layer – Könnyűsúlyú IoC tároló AOP támogatással (a beépített aspektusokat is ideértve) • Perzisztenica réteg – DAO minta a népszerű ORMs és JDBC támogatására • Egyszerűsíti a perzisztencia keretrendszereket JDBC • Kiegészítő: Nem helyettesíti a perzisztencia kerterndszereket • Segít a középréteg szervezésében • Csökkenti a kód mennyiségét, gyorsítja a fejlesztést
Spring (folytatás) • A Spring egy hordozható, viszonylag kényszer menteskeretrendszer. • POJO alapú • A programozó az újrahasznosításra koncentrálhat • Beépített szolgáltatások (aspektusok) pl.: tranzakció kezelés • A legtöbb üzleti objektum független a spring keretrendszertől
Három fő pillér • IoC konténer • Setter és konstruktor alapú függőség injektálás • Nem kötődik egy alkalmazásszerverhez • Előtérbe helyezi az OO tervezést. • A konténer által kezelt babok újrahasznosíthatóak, el vannak választva az üzleti logikától • AOP • Dynamic AOP Proxy objektumot használ az objektumokon átívelő szolgáltatások biztosítására • Újrahasznosítható objektumok • Integrálódik az IoC környezettel • AspectJ támogatás • Spring API
Inversion of Control • Függőség inyektálás • A babok a konstruktor argumentumaik, vagy tulajdonságaik segítségével definiálja függőségeiket • A konténer futásidőben biztosítja a beinyektálást • “Nem szólj az idegenekhez”, „Ne, hívj, én hívlak” • Elválasztja az objektumok fellelését, létrehozását az üzleti logikától • Könnyű használni, újrahasznosítani • Könnyű a tesztelés
Nem-IoC Szolgáltatás Objektum publicclassOrderServiceImpl implementsIOrderService{ public Order saveOrder(Order order) throws OrderException{ try{ // 1. Create a Session/Connection object // 2. Start a transaction // 3. Lookup and invoke one of the methods in a // DAO and pass the Session/Connection object. // 4. Commit transaction }catch(Exception e){ // handle e, rollback transaction, //cleanup, // throw e }finally{ //Release resources and handle more exceptions } }
IoC Szolgáltatás objektum publicclassOrderSpringService implementsIOrderService{ IOrderDAO orderDAO; public Order saveOrder(Order order) throws OrderException{ // perform some business logic… return orderDAO.saveNewOrder(order); } public void setOrderDAO(IOrderDAO orderDAO) { this.orderDAO = orderDAO; }
Spring bab definició • A bab osztály a BeanFactory által leírt osztály aktuális implementációja • Bab minták – DAO, DataSource, Transaction Manager, Persistence Managers, Service objects, etc • A Spring konfiguráció tartalmazzaaz implementációt a kódunknak az interfészekhez kell szólnia. • A bab viselkedése: • Singleton vagyprototípus • Automatikus huzalozás • Inicilaizáló és destruktor metódusok • init-method • destroy-method • A babok tulajdonságait paraméterezhetően be lehet állítani.
Egyszerű Spring Bab • <beanid=“orderBean” class=“example.OrderBean” init-method=“init”> <propertyname=“minimumAmountToProcess”>10</property> <propertyname=“orderDAO”> <refbean=“orderDAOBean”/> </property></bean> • public class OrderBean implements IOrderBean{ …public void setMinimumAmountToProcess(double d){this. minimumAmountToProcess = d; }public void setOrderDAO(IOrderDAO odao){this.orderDAO = odao; }}
Spring BeanFactory • BeanFactory a Spring keretrendszer alapja • Könnysúlyú tároló amely betölti és menedzseli a babokat • Delaratívan lehet konfigurálni XML állományok segítségével, itt mondjuk meg azt is, hogy a különböző babok hogyan kapcsolódnak • Tudja, hogy hogyan kezelje a singelton és prototípus babokat • Az életciklus kezelő metódusokért is felelős • A megfelelő babokba beinyektálja a függőségeket • Injects dependencies into defined beans when served • Segítségével mellőzhetjük a singelton-ok és factory-k használatát
Spring ApplicationContext • A Spring ApplicationContext segítségével hozáférhetünk a BeanFactory-ban konfigurált objektumokhoz • Az ApplicationContext kiterjeszti a BeanFactory-t • Olyan szolgáltatásokat biztosít mint a belső üzenetküldés • Fájl alapú erőforrások általános kezelése is egy szolgáltatása • Néhány mód a konfigurációra: • XMLWebApplicationContext – Web alkalmazáshoz konfiguráljuk. • ClassPathXMLApplicationContext – önnáló XML alkalmazás kontextus • FileSystemXmlApplicationContext • Nem kell Service Locator-okat írnunk
AOP • Kiegészíti az OO programozást • Az alapvető üzleti problémák vs. Az átmetsző vállalati problémák • Az AOP komponensei • Aspect – a keresztülívelő problémák modulba foglalásának alapja • Join point – jól definiált pontok a program folyamban • Pointcut –join point szűrő a betoldás futásánák meghatározására • Advice – egy küdrész ami a pointcut által meghatározott részen fut • Weaving – Fordítás, vagy futásidőben a megfelelő helyekre betoldja a megfelelő kódot. • Az EJB-ben található deklaratív megoldások egy alternatívája • Aspektusok a kód változtatása nélkül hozzáadhatóak és elvehetőek
Spring AOP • Az aopalliance szövetség által definiált interfészekre építő keretrendszer • Az aspektusok Java nyelvben vannak megvalósítva. Nem kell pointcut lekérdező nyelvet tanulni • A Spring aspektusok az IoC konténerben paraméterezhetőek • A konténerből kapott objektumok transzparens módon szabhatóak • A Spring AOP sok kész aspektust biztosít (tranzakció kezelés, naplózás, …)