Fejlett Programoz�si Technik�k 2. - PowerPoint
Document Sample


Programrendszerek Fejlesztése
7/6
1
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 …
3
OSGi tagok
Nokia Corporation
Aplix Corporation
NTT
Deutsche Telekom
Oracle Corporation Ericsson Mobile Platforms AB
ProSyst Software GmbH GigaSpaces Technologies
Red Hat Harman/Becker Automotive Systems GmbH
Samsung Electronics Co., Ltd. Hitachi, Ltd.
SAP AG IBM Corporation
Siemens AG Industrial Technology Research Institute
Siemens Enterprise Communications IONA Technologies
Software AG LinkedIn
SpringSource Makewave
Sprint Mitsubishi Electric Corporation
Sun Microsystems, Inc. Motorola, Inc.
Telcordia Technologies, Inc. NEC Corporation
TIBCO Software In
4
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
5
A szoftver komplexitása
Service Oriented Programming
Productivity
Structured
Programming
Assembly
Complexity and Size
6
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 Service Contract
Az implementációk dinamikus provides
fellelése és csatolása Component
Szarződés alapú (interfész)
uses
A komponensek
újrahasznosíthatóak
7
Keretrendszer
Lehetővé teszi az alkalmazások
számára egy közös Java VM Application
The Application
Application
használatát Application
Application
Application
Blue- Application
Osztálybetöltés Speech XML
tooth Application
USB
Library
Izoláció/Biztonság OSGi
OSGi Web
JTAPI
OSGi 3D Math
Kommunikáció és OSGi Server
The Application
Java
Együttműködés az alkalmazások Java
Comm VM
Java Security TCP/IP
Mail
között VM
Ports
VM
System Class Libraries
Java
Életciklus menedzselése Imaging
Media
Java SQL
Distri-
FW VM
Java buted
JavaVM
Szabály mentes VM
VM
Crypto- Direc-
Operating System GUI
A szabályokat a csomagok UPnP System
Operating tories
graphy Operating System
határozzák meg Operating Java
System
Java
VM
Az API teljesen önmenedzselő VM
Operating System
Operating System
8
Rétegek
9
Rétegek közötti együttműködés
10
Futtató környezet
Az OSGi APIs a J2SE és J2ME CDC
csak egy részét használja
OSGi Minimum EE CLDC/
A legtöbb profillal megegyezik MIDP
A biztonság nem kötelező
OSGi
Min.
J2SE
CDC/FP
11
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
Digitális bizonyítvány alapú jogosultságkezelés
13
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) batyu
Az osztálybetöltés modularizált
batyu
A sima Java-ban a Class Path mint sorbarendezett lista
Védelem
A sima Java nem tud védelmet nyújtani batyu
batyu
Verziókezelés batyu
A sima Java nem tudja ugyanannak a csomagnak
különböző verzióit kezelni
batyu
batyu
14
Keretrendszer entitások
OSGi Keretrendszer
A Batyu
{}
B Batyu
{}
C Batyu = szolgáltatás, java interfész
{}
15
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
16
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 A Batyu
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
17
Hello World
A Leíró ( META-INF/MANIFEST.MF) is
varázslóval készíthető (pl.: Eclipse) META-INF/MANIFEST.MF
Notice: Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Activator(az életciklus Bundle-Name: Helloworld Plug-in
esményekre hívódik meg) Bundle-SymbolicName: helloworld
Bundle-Version: 1.0.0
Import-Package (függőségek) Bundle-Localization: plugin
Bundle-Activator: helloworld.Activator
Import-Package:
org.osgi.framework;version="1.3.0"
18
Hello World
A kód vázat is gyárthatjuk varázslóval
HelloWorld.java
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!!");
}
}
19
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
20
OSGi fügőség feloldás
Framework
org.osgi.framework
org.osgi.service.http
Bundle A
Export org.osgi.service.log A resolved
com.ibm.service.log
com.ibm.j9
Import org.osgi.service.http
javax.servlet.http
Bundle B
Export ericsson.osgi B resolved
javax.servlet
javax.servlet.http
org.osgi.service.log
Import org.osgi.service.http
org.osgi.service.log
21
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
p
Import-Package
q
r r
s
Require-Bundle
r
22
Osztálybetöltés
Boot osztály útvonal (java.*)
Keretrendszer osztály útvonal
Batyu tér
23
Példa
24
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
25
Együttműködési modell
OSGi Kertrendszer
Szolgáltatás
tár
Batyu Batyu
csomagko
csomagok
JAVA
Operációs rendszer
Hardver
26
Életciklus réteg
A Rendszer (System) batyu az
OSGi kererendszert reprezentálja
Egy API-t biztosít a batyuk
kezelésére
System bundle
Telepítés bundle M
Feloldás
Indítás
Leállítás Bundle
Lekérdezés X
X-v2
Frissítés
Telepítés törlése
A modul rétegen alapul Bundle
Bundle B
A
27
É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 INSTALLED STARTING
Stop: takarítás
Az akitvátor megkapja a batyu start
környezetet amely segítségével
hozzáfér a keretrendszer RESOLVED ACTIVE
erőforrásaihoz
stop
UNINSTALLED STOPPING
28
Entitások
Bundle
BundleContext
BundleActivator
BundleEvent
FrameworkEvent
BundleListener
Synchronous Bundle Listener
FrameworkListener
BundleException
SystemBundle
29
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
30
Szolgáltatások discover
bind register
A szolgáltatás egy a kerterendszerbe regisztrált
objektum
Java interfészként van regisztrálva service
A batyu szolgáltatásokat regisztrálhat
package org.osgi.service.log;
A batyu szolgáltatásokat használhat import
1..1 org.osgi.framework.ServiceReference;
public interface LogService {
0..1
public static final intLOG_ERROR= 1;
0..n public static final intLOG_WARNING= 2;
Dinamikus keresésel lehet szolgáltatásokat public static final intLOG_INFO= 3;
fellelni public static final intLOG_DEBUG= 4;
public void log(int level,
A szolgáltatások bármikor eltűnhetnek! 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);
}
31
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
32
Szolgáltatások manipulálása
A BundleContext segítségével
hozzáférhetünk a szolgáltatásokat
ServiceRegistration registerService(
manipuláló metódusokhoz String clss,
Object srvc,
A szolgáltatás regisztrációt a
Dictionary prprts)
ServiceRegistration objektumok kezelik
Segítségükkelmódosíthatjuk a ServiceReference[]
paraméteket, vagy eltávolíthatjuk a getServiceReferences(
szolgáltatást String clss,
String fltr)
A szolgáltatás referenciák segítségével
hozzáférhetünk a szolgáltatáshoz és Object getService(
annak tulajdonságaihoz is. ServiceReference reference)
A szolgáltatásokhoz a getService boolean ungetService(
metódussal férünk hozzá, az ServiceReference rfrnc);
ungetService metódussal tudjuk
elengedni
33
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
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 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
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 / Dependency Injection
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
}
}
IoC / Függőség inyektálás
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;
}
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.
Egyszerű Spring Bab
<bean id=“orderBean” class=“example.OrderBean”
init-method=“init”>
<property
name=“minimumAmountToProcess”>10</property>
<property name=“orderDAO”>
<ref bean=“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
Spring AOP
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, …)
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.
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;
}
}
Folytatás
<bean id="perfMonInterceptor"
class=
"com.meagle.service.interceptor.PerformanceMonitorDetailInterceptor"/>
<bean id="performanceAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="perfMonInterceptor"/>
</property>
<property name="patterns">
<list>
<value>.*find.*</value>
<value>.*save.*</value>
<value>.*update.*</value>
</list>
</property>
</bean>
AOP Szövés
A következő alkalmazás tartalma
Alkalmazás szerverek és ezek szolgáltatásai
EAR állományok
JMX
Példák:
Jboss, WebSphere
55
Get documents about "