Title: Programrendszerek Fejleszt
1Programrendszerek Fejlesztése
2Tartalom
- OSGI
- Bevezeto
- 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
3Az OSGi platform
- Egy Java keretrendszer távolról telepítheto
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üttmuködo
- 4.0 verzió www.osgi.org
4OSGi tagok
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
5Mié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évo szoftverek életciklusának
kezelése
6A szoftver komplexitása
Productivity
Complexity and Size
7Szolgá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 lehetosége
- Az implementációk dinamikus fellelése és
csatolása - Szarzodés alapú (interfész)
- A komponensek újrahasznosíthatóak
Service Contract
provides
Component
uses
8Keretrendszer
- Lehetové 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üttmukö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 önmenedzselo
9Rétegek
10Rétegek közötti együttmuködés
11Futtató 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ötelezo
CLDC/ MIDP
J2SE
CDC/FP
OSGi Min.
12Biztonsági réteg
- Tulajdonságai
- Opcionális
- Finomhangolható
- Menedzselheto
- 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
13Digitális bizonyítvány alapú jogosultságkezelés
14Modul réteg
- A szabványos Java környezet nem biztosítja a
megfelelo eszközöket a verziók kezelésére - Megoldás
- Specializált osztálybetöltok (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özo verzióit kezelni
batyu
batyu
batyu
batyu
batyu
batyu
batyu
15Keretrendszer entitások
OSGi Keretrendszer
A Batyu
B Batyu
C Batyu
szolgáltatás, java interfész
16Batyuk
- 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 megfelelo
szolgáltatásokat megtalálni - Lekérdezo nyelv
17Mi a Batyu?
- A Batyu tartalma (általában egy JAR fáljban)
- Leíró (Mainfest)
- Kód
- Eroforrások
- A Keretrendszer
- Olvassa a batyu leíróját
- Telepíti a kódot és az eroforrásokat
- Feloldja a függoségeket
- Futásidoben
- Meghívja a batyu aktiválót, hogy elindítsa a
batyut - Kezeli a java classpath-ot
- Kezeli a szolgáltatás függoségeket
- Meghívja a batyu aktivátort, hogy leállítsa a
batyut
A Batyu
18Hello World
- A Leíró ( META-INF/MANIFEST.MF) is varázslóval
készítheto (pl. Eclipse) - Notice
- Bundle-Activator (az életciklus esményekre
hívódik meg) - Import-Package (függoségek)
META-INF/MANIFEST.MF
- 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.frameworkversion"1.3.0"
19Hello 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!!")
20Osztályútvonal kezelése
- A Java alkalmazás csomagokba helyezett
osztályokból áll - A Java keretrendszer az osztályokat a különbözo
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öltok
hálózatát kezeli. - A leíró fejlécekkel paraméterezhetok
- A batyuk közötti függoségekre a keretrendszer
kezeli - Képes a batyuk szükség szerinti betöltésére
21OSGi fügosé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
22Csomag vagy Batyu függoségek?
- Az OSGi mindkét megoldást támogatja
- A Batyu függoség egyszeru 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
23Osztálybetöltés
- Boot osztály útvonal (java.)
- Keretrendszer osztály útvonal
- Batyu tér
24Példa
25Együttmuködési modell
- Az OSGi több mint Applet, MIDlet, Xlet futtaó
környezet - A Batyuk együttmuködési lehetosé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üttmuködést
- Függoségek, biztonság
26Együttmukö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
bundle M
System bundle
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
eroforrásaihoz
INSTALLED
STARTING
start
RESOLVED
ACTIVE
stop
UNINSTALLED
STOPPING
29Entitások
- Bundle
- BundleContext
- BundleActivator
- BundleEvent
- FrameworkEvent
- BundleListener
- Synchronous Bundle Listener
- FrameworkListener
- BundleException
- SystemBundle
30Szolgá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íto konfigurációval
- Nem hagyományos SOA
- VM-en belüli
31Szolgáltatások
discover
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 eltunhetnek!
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)
32Szolgáltatások
- A keretrendszer szolgáltatástára minden batyunak
elérheto - Különbözo 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
mukö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érdezo nyelv a megfelelo szolgáltatás
fellelésére - A batyuk frissíthetik a tulajdonságokat
33Szolgá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)
34Spring
- 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ú
35A Spring célja
- A J2EE-nek egyszerubbnek kell lennie
- Az OO tervezés fontosabb mint az implementációs
technológia pl. J2EE. - A kód tesztelhetosége kritikus (ebben segít a
spring) - A Spring nem versenyzik, hanem kiegészíti a
meglévo jó megoldásokat
36Spring
- Egy könnyusúlyú a web alkalmazások minden rétegét
megcímezo keretrendszer. - Megjelenítés réteg A Struts-hoz hasonló de
attól többet nyújtó MVC keretrendszer. - Business layer Könnyusúlyú IoC tároló AOP
támogatással (a beépített aspektusokat is
ideértve) - Perzisztenica réteg DAO minta a népszeru ORMs
és JDBC támogatására - Egyszerusíti a perzisztencia keretrendszereket
JDBC - Kiegészíto 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
37Spring (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
keretrendszertol
38Három fo pillér
- IoC konténer
- Setter és konstruktor alapú függoség injektálás
- Nem kötodik egy alkalmazásszerverhez
- Eloté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ívelo szolgáltatások biztosítására - Újrahasznosítható objektumok
- Integrálódik az IoC környezettel
- AspectJ támogatás
- Spring API
39Inversion of Control
- Függoség inyektálás
- A babok a konstruktor argumentumaik, vagy
tulajdonságaik segítségével definiálja
függoségeiket - A konténer futásidoben 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önnyu használni, újrahasznosítani
- Könnyu a tesztelés
40Nem-IoC / Dependency Injection
41Nem-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
-
-
42IoC / Függoség inyektálás
43IoC 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
-
44Spring 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éterezhetoen be lehet
állítani.
45Egyszeru Spring Bab
- ltbean idorderBean classexample.OrderBean
init-methodinitgt ltproperty
nameminimumAmountToProcessgt10lt/propertygt ltpro
perty nameorderDAOgt ltref beanorderDAOBean
/gt lt/propertygtlt/beangt - public class OrderBean implements
IOrderBean public void setMinimumAmountToPro
cess(double d) this. minimumAmountToProcess
d public void setOrderDAO(IOrderDAO
odao) this.orderDAO odao
46Spring 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özo babok hogyan kapcsolódnak - Tudja, hogy hogyan kezelje a singelton és
prototípus babokat - Az életciklus kezelo metódusokért is felelos
- A megfelelo babokba beinyektálja a függoségeket
- Injects dependencies into defined beans when
served - Segítségével mellozhetjük a singelton-ok és
factory-k használatát
47Spring 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 belso
üzenetküldés - Fájl alapú eroforrá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
48Spring AOP
49AOP
- Kiegészíti az OO programozást
- Az alapveto üzleti problémák vs. Az átmetszo
vállalati problémák - Az AOP komponensei
- Aspect a keresztülívelo problémák modulba
foglalásának alapja - Join point jól definiált pontok a program
folyamban - Pointcut join point szuro 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ásidoben a megfelelo
helyekre betoldja a megfelelo 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 elvehetoek
50Spring AOP
- Az aopalliance szövetség által definiált
interfészekre építo keretrendszer - Az aspektusok Java nyelvben vannak megvalósítva.
Nem kell pointcut lekérdezo nyelvet tanulni - A Spring aspektusok az IoC konténerben
paraméterezhetoek - A konténerbol kapott objektumok transzparens
módon szabhatóak - A Spring AOP sok kész aspektust biztosít
(tranzakció kezelés, naplózás, )
51Spring AOP
- Az alábbi tanácsokat támogatja
- Metódus elott
- 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 idoben vannak szove.
52Spring AOP körbe tanács példa
- public class PerformanceMonitorDetailInterceptor
implements MethodInterceptor - protected final Log logger LogFactory.getLog(ge
tClass()) - public Object invoke(MethodInvocation
invocation) throws Throwable - String name
- invocation.getMethod().getDeclaringClass().getN
ame() - "."
- invocation.getMethod().getName()
-
- StopWatch sw new StopWatch(name)
- sw.start(name)
-
- Object rval invocation.proceed()
- sw.stop()
- logger.info(sw.prettyPrint())
- return rval
-
53Folytatás
- ltbean id"perfMonInterceptor"
- class
- "com.meagle.service.interceptor.PerformanceMonito
rDetailInterceptor"/gt -
- ltbean id"performanceAdvisor"
- class"org.springframework.aop.support.RegexpMet
hodPointcutAdvisor"gt -
- ltproperty name"advice"gt
- ltref local"perfMonInterceptor"/gt
- lt/propertygt
- ltproperty name"patterns"gt
- ltlistgt
- ltvaluegt.find.lt/valuegt
- ltvaluegt.save.lt/valuegt
- ltvaluegt.update.lt/valuegt
- lt/listgt
- lt/propertygt
54AOP Szövés
55A következo alkalmazás tartalma
- Alkalmazás szerverek és ezek szolgáltatásai
- EAR állományok
- JMX
- Példák
- Jboss, WebSphere