1 / 55

Programrendszerek Fejlesztése

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.

isha
Download Presentation

Programrendszerek Fejlesztése

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programrendszerek Fejlesztése 7/6

  2. 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

  3. 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 …

  4. 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

  5. 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

  6. Service Oriented Programming Structured Programming Assembly A szoftver komplexitása Productivity Complexity and Size

  7. 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

  8. 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ő

  9. Rétegek

  10. Rétegek közötti együttműködés

  11. 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.

  12. 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 • …

  13. Digitális bizonyítvány alapú jogosultságkezelés

  14. 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

  15. Keretrendszer entitások OSGi Keretrendszer A Batyu {} B Batyu {} C Batyu {} = szolgáltatás, java interfész

  16. 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

  17. 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 {}

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. Osztálybetöltés • Boot osztály útvonal (java.*) • Keretrendszer osztály útvonal • Batyu tér

  24. Példa

  25. 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

  26. Szolgáltatás tár csomagko csomagok Együttműködési modell OSGi Kertrendszer Batyu Batyu JAVA Operációs rendszer Hardver

  27. É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

  28. É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

  29. Entitások • Bundle • BundleContext • BundleActivator • BundleEvent • FrameworkEvent • BundleListener • Synchronous Bundle Listener • FrameworkListener • BundleException • SystemBundle

  30. 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

  31. 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); }

  32. 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

  33. 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);

  34. 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ú

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. Nem-IoC / Dependency Injection

  41. 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 } }

  42. IoC / Függőség inyektálás

  43. 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; }

  44. 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.

  45. 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; }}

  46. 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

  47. 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

  48. Spring AOP

  49. 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

  50. 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, …)

More Related