Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaSára Lukácsné Megváltozta több, mint 10 éve
2
Programrendszerek Fejlesztése 7/67/6 1
3
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
4
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 …
5
OSGi tagok 4 Nokia Corporation NTT Oracle Corporation ProSyst Software GmbH Red Hat Samsung Electronics Co., Ltd. SAP AG Siemens AG Siemens Enterprise Communications Software AG SpringSource Sprint Sun Microsystems, Inc. Telcordia Technologies, Inc. TIBCO Software In Aplix Corporation Deutsche Telekom Ericsson Mobile Platforms AB GigaSpaces Technologies Harman/Becker Automotive Systems GmbH Hitachi, Ltd. IBM Corporation Industrial Technology Research Institute IONA Technologies LinkedIn Makewave Mitsubishi Electric Corporation Motorola, Inc. NEC Corporation
6
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
7
6 A szoftver komplexitása Productivity Complexity and Size Assembly Structured Programming Service Oriented Programming
8
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 Component provides uses
9
8 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ő Operating System JavaVM JavaVM The Application Crypto-graphyUPnPDirec-tories Imaging Mail MediaFWSQL GUI Distri-buted CommPortsSecurityTCP/IP JTAPI3DWebServerMath SpeechBlue-toothXMLUSB Operating System JavaVM JavaVM JavaVM JavaVM JavaVM JavaVM JavaVM System Class Libraries OSGi OSGi OSGi OSGi Application Application Application Application Application Application Application Library
10
9 Rétegek
11
Rétegek közötti együttműködés 10
12
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.
13
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 … 12
14
Digitális bizonyítvány alapú jogosultságkezelés 13
15
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
16
15 Keretrendszer entitások OSGi Keretrendszer A Batyu {} = szolgáltatás, java interfész B Batyu {} C Batyu {}
17
16 Batyuk A batyu egy 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
18
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 {}
19
18 Hello World 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" META-INF/MANIFEST.MF
20
19 Hello World 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!!"); } } HelloWorld.java
21
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
22
21 OSGi fügőség feloldás Bundle A Export org.osgi.service.log com.ibm.service.log com.ibm.j9 Import org.osgi.service.http javax.servlet.http Framework org.osgi.framework org.osgi.service.http 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 A resolved
23
22 Csomag vagy Batyu 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 r r s r q p Require-Bundle Import-Package
24
Osztálybetöltés Boot osztály útvonal (java.*) Keretrendszer osztály útvonal Batyu tér 23
25
Példa 24
26
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
27
26 Együttműködési modell Batyu JAVA Operációs rendszer Hardver OSGi Kertrendszer Szolgáltatás tár csomagko csomagok
28
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 Bundle X Bundle X-v2 Bundle B bundle M Bundle A System bundle
29
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 RESOLVED UNINSTALLED ACTIVE STOPPING STARTING start stop
30
Entitások Bundle BundleContext BundleActivator BundleEvent FrameworkEvent BundleListener Synchronous Bundle Listener FrameworkListener BundleException SystemBundle 29
31
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
32
31 Szolgáltatások 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! service bind register discover package org.osgi.service.log; import org.osgi.framework.ServiceReference; public interface LogService { public static final intLOG_ERROR= 1; public static final intLOG_WARNING= 2; public static final intLOG_INFO= 3; public static final intLOG_DEBUG= 4; public void log(int level, String message); public void log(int level, String message, Throwable exception); public void log(ServiceReference sr, int level, String message); public void log(ServiceReference sr, int level, String message, Throwable exception); }
33
32 Szolgáltatások A keretrendszer szolgá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
34
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);
35
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ú 34
36
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
37
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
38
Spring (folytatás) A Spring egy hordozható, viszonylag kényszer mentes keretrendszer. 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
39
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
40
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
41
Nem-IoC / Dependency Injection
42
Nem-IoC Szolgáltatás Objektum public class OrderServiceImpl implements IOrderService { 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 }
43
IoC / Függőség inyektálás
44
IoC Szolgáltatás objektum public class OrderSpringService implements IOrderService { 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; }
45
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ó tartalmazza az implementációt a kódunknak az interfészekhez kell szólnia. A bab viselkedése: Singleton vagy prototí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.
46
Egyszerű Spring Bab 10 public class OrderBean implements IOrderBean{ … public void setMinimumAmountToProcess(double d){ this. minimumAmountToProcess = d; } public void setOrderDAO(IOrderDAO odao){ this.orderDAO = odao; } }
47
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
48
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
49
Spring AOP
50
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
51
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, …)
52
Spring AOP Az alábbi tanácsokat támogatja: Metódus előtt A metódus visszatérése után throws tanács Körül tanács Az interceptorokat és a tanácsokat láncolhatjuk precedencia alapján Az aspektusok futás időben vannak szőve.
53
Spring AOP körbe tanács példa public class PerformanceMonitorDetailInterceptor implements MethodInterceptor { protected final Log logger = LogFactory.getLog(getClass()); public Object invoke(MethodInvocation invocation) throws Throwable { String name = invocation.getMethod().getDeclaringClass().getName() + "." + invocation.getMethod().getName(); StopWatch sw = new StopWatch(name); sw.start(name); Object rval = invocation.proceed(); sw.stop(); logger.info(sw.prettyPrint()); return rval; }
54
Folytatás <bean id="perfMonInterceptor" class= "com.meagle.service.interceptor.PerformanceMonitorDetailInterceptor"/> <bean id="performanceAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">.*find.*.*save.*.*update.*
55
AOP Szövés
56
A következő alkalmazás tartalma Alkalmazás szerverek és ezek szolgáltatásai EAR állományok JMX Példák: Jboss, WebSphere 55
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.