Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem.

Hasonló előadás


Az előadások a következő témára: "UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem."— Előadás másolata:

1 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem Informatikai Tanszékcsoport Szoftverfejlesztés Tanszék

2 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Tartalom  EJB  CDI ■Szolgáltatások ■Szkópok ■Injektálás ■Minősítő jelölések ■EL nevek ■Producer metódusok ■Alternatívák ■Specializáció ■Eseménykezelés ■Interceptorok ■Dekorátorok ■Sztereotípiák Programrendszerek fejlesztése

3 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programrendszerek fejlesztése

4 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS EJB rendszer  Bean fejlesztő ■Telepíthető adott funkciót ellátó komponenesket gyárt  Alkalmazás szintetizáló ■Ő látja át az adott problémát és tervezi meg hozzá az alkalkalmazást  EJB telepítő ■Biztonsági, integrációs kérdések (LDAP, tűzfal, …)  Rendszer Adminisztrátor ■Rendszer menedzsment, monitorozás, …  Alkalmazás szerver gyártó  Fejlesztő eszköz gyártók Programrendszerek fejlesztése

5 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Erőforrás hozzáférés  A JEE komponensek sok fajta erőforráshoz férhetnek hozzá ( , LDAP, fájl, …)  A JNDI feladata a név szolgáltatás biztosítása a komponensek számára Programrendszerek fejlesztése

6 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS JNDI  Java Naming and Directory Interface  A J2EE legfontosabb összetevője (a J2SEE –nek is része)  Feladata: ■Objektumok referenciáinak tárolása kereshető formában ■Együttműködés a címtár alapú rendszerekkel (amelyek tudják az információt hierarchikusan kezelni)  Felépítése: ■JNDI API ■Elnevezés menedzser ■JDNI SPI ■Szolgáltatók (Service Provider) –LDAP –COS –RMI –DNS NIS Fájl Rendszer Windows Reg. Novell Fájl R Programrendszerek fejlesztése

7 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Elnevezés, Címtár  Elnevezés (Naming): ■LDAP, DNS, COS, … ■Kötés – binding ■Referenciák, Címek ■Konteksztus (Context) (név-objektum kötés halmaz) ■Névterek, Elnevezési rendszerek – konteksztusok halmaza  Címtár (directory): ■Az objektumok rendelkeznek tulajdonságokkal is ■Tulajdonság azonosító ■Címtár szolgáltatás ■Directory Schema ■Keresések, … Programrendszerek fejlesztése

8 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS JNDI csomagok  javax.naming ■Kontesztus (Context) –Kezdő kontesztkus (Initial Context) –list, lisBindings, bind, reBind, unBind –Al kontesztus - subContext ■Nevek (Name, CompositeName ) –String, Name ■Kötések ■Referenciák  javax.naming.directory ■Attribútumok lekérdezése ■DirContext, getAttributes(), modifyAttributes(), search()  javax.naming.event  javax.naming.ldap (Teljesebb LDAP) ■LDAP v3 ■LdapContext  javax.naming.spi Programrendszerek fejlesztése

9 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kötés, Konteksztus Kötés:  bind, rebind, unbind, rename Fruit fruit = new Fruit("orange"); ctx.bind("favorite", fruit); Fruit fruit = new Fruit("lemon"); ctx.rebind("favorite", fruit); ctx.unbind("favorite"); ctx.rename("report.txt", "old_report.txt"); Al kontesztus:  createSubcontext, destroySubcontext ctx.createSubcontext("new"); ctx.destroySubcontext("new"); Programrendszerek fejlesztése

10 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Erőforrás injektálás  A konténer automatikusan beinyektálja a megfelelően annotált mezőbe/tulajdonságba ■Inicializáláskor (mező/tulajdonság) ■Futás időben (osztály alapú) ■Név (name) ■Típus (type) ■Azonosítás típusa (authenticationType) ■Megosztható (shareable) ■Csatolás neve (mappedName) ■Leírás (dessc) Programrendszerek fejlesztése

11 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Elosztott rendszerek  Gyakran kliens-szerver  Problémák: ■A távoli objektum megtalálása ■Bájt kód betöltése ■Kommunikáció –Socket használat –RPC használat –RMI –Corba –RMI IIOP –SOAP –XML RPC Programrendszerek fejlesztése

12 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS RMI  Remote Method Invocation  Objektum orientált RPC ■Teljes objektumokat tudunk átküldeni, nem csak előre definiált típusokat  Java specifikus  Elosztott szemétgyűjtő  Biztonságos  Egyszerű (nincs IDL)  URl szerű: rmi://host:port/objektumnév Programrendszerek fejlesztése

13 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Különbségek  Elosztott vs. Normál Java alkalmazás ■Távoli objektum hivatkozása használható ■A Cast ugyanúgy működik ■instanceOf is ■A távoli objektumoknál az interfésszel kommunikálunk nem a megvalósító osztállyal ■A távoli eljárás hívások eredménye és paraméterei érték szerint adódnak át ■A távoli objektum hivatkozásként adódik át ■Külön hibakezelés kell Programrendszerek fejlesztése

14 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Felépítése  Java.RMI.remote interfész ■Ezt kell bővítenünk ■Minden metódusnál specifikálni kell a java.rmi.RemoteException kivételt ■A távoli eljárás deklarálásánál a benne szerepelő objektumokat interfészekkel kell megadnunk  RemoteException ■Kommunikációs hiba ■Paraméter átalakítás hiba ■Protokol hiba  RemoteObject ■java.lang.Object  java.rmi.server.UnicastRemoteObject  java.rmi.activation.Activatable Programrendszerek fejlesztése

15 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Működése  Hagyományos RPC megoldás: ■Csonkok (stubs) elrejtik a hálózati protokollokat és a serializációt –Kliens oldali reprezentáció vagy proxy –Ugyanazt az interfészt valósítja meg mint a távoli osztály –Egy csonk metódus hívás: »Kapcsolatot kezdeményez a távoli JVM-mel »Átalakítja és átviszi a paramétereket (marshalls) »Megvárja az eredményt !!!!!! »Kiolvassa és visszaalakítja a paramétereket (unmarshalls) »Visszaadja az eredményt a hívónak ■Vázak (skeletons) a szerver oldali ragasztó (Java2 ben nem kötelező) –Szerver oldali reprezentáció: »Kiolvassa a paramétereket és visszaalakítja őket (unmarshals) »Meghívja a megfelelő objektum megfelelő metódusát »Átalakítja és átküldi az eredményt (marshals) Programrendszerek fejlesztése

16 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Használata  Távoli interfész deklarálás public interface WeatherService extends Remote { public List getWeatherInformation() throws RemoteException;}  Osztály megvalósítás public class WeatherServiceImpl extends UnicastRemoteObject implements WeatherService { public WeatherServiceImpl() throws RemoteException { super();updateWeatherConditions();} public List getWeatherInformation(){} public static void main( String args[] ) throws Exception {WeatherService service = new WeatherServiceImpl(); String serverObjectName = "rmi://localhost/WeatherService"; Naming.rebind( serverObjectName, service );}  Kliens megvalósítás String remoteName = "rmi://" + server + "/WeatherService"; WeatherService weatherService =( WeatherService ) Naming.lookup( remoteName ); List weatherInformation = weatherService.getWeatherInformation();  Fordítás ■Javac ■Rmic -> csonk osztályok (rmic –v1.2 -> vázat is gyárt)  Futtatás ■rmiregistry ■Java Server ■Java Kliens Programrendszerek fejlesztése

17 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Paraméter átadás  Serializable (menthető) objektumok (java.io.Serializable)  Távoli objektumok (nem exportált) ■Érték szerint adódik át (serialization)  Távoli objektumok (exportált) ■Referencia szerint adódik át (csonk)  Referencia integritás  Osztály kommentár (Annotation) ■Az osztály elérési útvonala is átküldődik  Paraméter átvitel ■java.rmi.Remote megvalósító osztály –Exportált: csonk adódik vissza –Nem exportált: az objektum adódik vissza ■Egyéb osztály: –Nem exportált: az objektum adódik vissza Programrendszerek fejlesztése

18 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Enterprise Java Beans  EJB: ■Szerver oldali komponens ■Java interfészek halmaza ■Specifikáció mely leírja a komponensek és az alkalmazásszerverek együttműködését  Érvek EJB mellett ■Sokan támogatják ■Nyílt szabvány, elvileg gyártó független ■Gyors alkalmazás fejlesztés ■Platform független Programrendszerek fejlesztése

19 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS EJB Programrendszerek fejlesztése

20 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS EJB típusok  Viszony Bab (Session Bean) ■Az üzleti folyamat modellezésére szolgál ■Munkafolyamat, árazás, hitel kártya engedélyező, …  Entitás Bab (Entity Bean) (CSAK < =EJB2.0) ■Az üzleti adatot modellezik ■Termék, egyed, rendelés, …  Entitások - JPA (Java Persistence API) (CSAK >= EJB 3.0)  Üzenet vezérelt Bab (Message Driven Bean) ■Hasonló mint a viszony bab, csak üzenetekkel lehet kommunikálni vele Programrendszerek fejlesztése

21 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS EJB példa Programrendszerek fejlesztése

22 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 22 Az EJB objektum  Nem kapcsolódunk közvetlenül az EJB-hez  Az EJB tároló elfogja a hívást és delegálja a Bab példánynak (Instance Pooling)  EJB objektum ragasztóként funkcionál, Ragasztó Eszköztár  A tárló generálja (tárolónként más-más lehet)  Implicit MiddleWare  Kivételek (transzparent fail- over): ■Alkalmazás szintű ■Rendszer szintű Programrendszerek fejlesztése

23 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Mitől EJB az EJB?  EJB 2.0 ■javax.ejb.EnterpriseBean interfész ■Üres interfész, csak a neve a fontos ■A java.io.Serializable interfészt bővíti ■Az alábbi interfészek származnak belőle: –javax.ejb.EntityBean –javax.ejb.SessionBean –javax.ejb.MessageDrivenBean  EJB 3.0 ) Programrendszerek fejlesztése

24 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Entitás kezelés  EJB 1,2.0 ■Entitás bab  EJB 3.0, 3.1 ■Entitás – JPA ■= Hibernate Programrendszerek fejlesztése

25 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Entitás (>=EJB 3.0) Programrendszerek fejlesztése

26 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Viszony bab (Session Bean)  Üzleti folyamatot valósít meg  Nem mentődnek el a tartós tároló helyre: ■Rövid életűek (a kliens kód hívása alatt élnek) ■Általában nem élik túl a szerver leállásokat  Három típusa van: ■Állapot mentes (Stateless) –Egy metódus hívásig él –Nem őrzi meg állapotát –Minden egyede egyenlő, újrahasznosítható, készletezhető ■Állapottal rendelkező (Statefull) –Több egymást követő kérést tranzakciót képes kiszolgálni –Megőrzi az állapotát (a viszony idejére) –Készletezés: passivation, activation (erőforrások menedzselése) ■Singelton –Egy van belőle, megőrzi az állapotát Programrendszerek fejlesztése

27 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Életciklusok Programrendszerek fejlesztése

28 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM public class DiscountRateBean private EntityManager entityManager; private Rate private void init() { rate = entityManager.find(Rate.class, 1); private void destroy() { entityManager.merge(rate); } public synchronized void setRate(Rate rate) { this.rate = rate; } public synchronized Rate getRate() { return rate; } Programrendszerek fejlesztése

29 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Teljes működés Programrendszerek fejlesztése

30 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Üzenet vezérelt bab (Message driven bean)  Az előző komponensek RMI-IIOP-ot használtak kommunikációra  Hátrányai: ■A kliensnek várnia kell a válaszra (nem engedélyezetett a szál kezelés !!) ■Nem megbízható ■Egyszerre csak egy egyeddel kommunikál  Message Oriented MiddleWare ■MSMQ, IBM MQSeries, … cég függő ■JMS szabványos igyekszik lenni (API/SPI) Programrendszerek fejlesztése

31 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 31 JMS API  Messaging Domains: ■Publish/subscribe ■Point-to-Point Programrendszerek fejlesztése

32 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Üzenet vezérelt bab  Teljesen el van különítve a többi komponenstől ■Nincs home, remote, local, localhome interfész  Egy üzleti metódusuk van ■onMessage() menet közben deríti ki mit is kapott (instanceof)  Nincs visszatérési értékük  Nem tudnak kivételt küldeni a küldőnek  Állapotmentesek  Tartós vagy nem tartós listatagok ■Tartós – minden üzenetet megkap akkor is ha nem aktív ■Nem tartós csak azokat kapja meg amikor aktív volt  javax.jms.MessageListener ■onMessage()  javax.ejb.MessageDrivenBean ■ejbRemove ■setMessageDrivenContext Programrendszerek fejlesztése

33 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Példa: Bean Programrendszerek fejlesztése

34 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Tranzakció kezelés  A tranzakciók használata bevált megoldás az adat integritás megőrzése érdekében ■Hibák, komplex helyzetek ■Több felhasználó kezelése  A folyamatokat munka egységekbe tudjuk osztani  Hogyan oldjuk ezt meg amennyiben nem adatbázisban végezzük el a megfelelő műveleteket  EJB két típust támogat ■Bab által kezelt tranzakciók ■Konténer által kezelt tranzakciók Programrendszerek fejlesztése

35 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Konténer által kezelt tranzakció kezelés  A konténer szabja meg a tranzakció határokat  Viszony és üzenet babbal tudjuk használni  Egyszerűsíti a fejlesztést mert alapesetben nem kell vele foglalkoznunk  Tipikus eset ■A tároló adott bab metódus meghívásával egy új tranzakciót kezd amit befejez amint a metódus visszatért ■Minden metódus egy-egy külön tranzakció  Nem lehet egyszerre használni a bab által kezelt tranzakció kezeléssel  Metódus szinten specifikálhatjuk a tranzakció igényeket Programrendszerek fejlesztése

36 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Tranzakció hatóköre Programrendszerek fejlesztése

37 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Példa Programrendszerek fejlesztése

38 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Bab által kezelt tranzakció kezelés  Akkor szokták használni a ha a tranzakció határokat kézben szeretnénk tartani  Az előzőnél egy metódus egy tranzakcióhoz tartozhat  JDBC vagy JTA tranzakciókezelést lehet használni Programrendszerek fejlesztése

39 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programrendszerek fejlesztése

40 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS SEAM JSF JSF vs. Seam JSF Page POJO Facade Session EJB Entity EJB Session EJB Entity EJB Managed Bean Automatically wrapped in Managed Bean Programrendszerek fejlesztése

41 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS JSF életciklus Programrendszerek fejlesztése

42 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Seam életciklus Programrendszerek fejlesztése

43 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS SEAM 3.0  EJB komponensek JSF Bean-ekként való használatának támogatása  Annotációk használata a kontextusok változóinak manipulálására  Javított kontextus modell + két új kontextus: ■Conversation ■Business Process  Interfész munkafolyamat-motorok könnyű integrálásához  JPA integrálása  Annotációk biztosítása JSF metaadatok számára  JSR-227 támogatás biztosítása Programrendszerek fejlesztése

44 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Példa: Navigáció faces-config.xml vagy pages.xml  Navigációs szabályok  Init akciók használata navigálás előtt  Request paraméterek kezelése  EL kifejezések használata pageflow Programrendszerek fejlesztése

45 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Megoldás Web Beans JSR-299 specifikáció Egyesíti a JSF Managed Bean komponens modellt az EJB komponens modellel Egyszerűsített programozási modellt ad web alapú alkalmazások fejlesztéséhez Nincs szükség a Java EE környezet mély ismeretére Javított kontextus modell Programrendszerek fejlesztése

46 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Mi egy Web Bean?  Komponens típusai: ■Bármilyen Java osztály ■EJB session és singleton bean-ek ■Feloldó metódusok ■JMS komponensek ■Távoli komponensek  Alap építőelemek: ■Telepítési típusok ■API típusok ■Kötési típusok ■Elnevezések ■Implementálások Programrendszerek fejlesztése

47 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Web Beans céljai  EJB komponensek JSF Bean-ekként való használatának támogatása  Annotációk használata a kontextusok változóinak manipulálására  Javított kontextus modell + két új kontextus: ■Conversation ■Business Process  Interfész munkafolyamat-motorok könnyű integrálásához  JPA integrálása  Annotációk biztosítása JSF metaadatok számára  JSR-227 támogatás biztosítása Programrendszerek fejlesztése

48 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Adaptálás meglévő rendszerekhez Létező EJB3 session bean-ekből Web Bean-ek készítése annotációkkal Létező JSF managed bean-ekből Web Bean-ek készítése annotációkkal Új Web Bean komponensekbe meglevő EJB3 session bean-ek injektálása annotációval vagy JNDI-ből Új EJB-ben létező Web Bean komponensek használata injektálással vagy interceptorral Programrendszerek fejlesztése

49 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Web Beans újdonságai A Web Beans lényege a laza csatolás –Szerver és kliens oldal elválasztása jól definiált API-k és kötési típusok alkalmazásával Az implementáció felüldefiniálható telepítési időben –Az együttműködő komponensek életciklusainak elkülönítése Komponensek életciklusának automatikus menedzsmentje Stateful komponensek szolgáltatásokként való használata –Ortogonális nézetek leválasztása a programkódtól Interceptorok használata (logging, security, transactions) –Az üzenetek küldőinek és fogadóinak szétválasztása Event-ke használata A Web Beans egyesíti a web réteget és az üzleti réteget –Egy komponens elérheti a request scope adatait és használhat tranzakciós erőforrást is egyben Programrendszerek fejlesztése

50 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Login Page Login name: public class LoginAction private EntityManager em private String username = “”; } taglib uri=“http://java.sun.com/jsf/html” prefix=”h”%> taglib uri=“http://java.sun.com/jsf/core” prefix=”f”%>

51 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Contexts and Dependency Injection  Feladata a különböző rétegek együttműködésének elősegítése  Alapelve: Laza Csatolás  Alapvető szolgáltatásai: ■Kontextusok támogatása –Az állapottartó komponenseket kontextusokhoz köthetjük ■Függőségek injektálása –Komponenseket tudunk típusosan egy alkalmazásba injektálni –Telepítés időben dönthetünk az implementációról Programrendszerek fejlesztése

52 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Contexts and Dependency Injection  CDI – JSR 299  Programozási model  Öröklődés és specializáció  Függőség injektálás és EL  Szkópok, kontextusok  Életciklusok  Dekorátorok  Interceptorok és kötések  Események Programrendszerek fejlesztése

53 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS CDI szolgáltatások  EL segítségével elérhetőek a komponensek  Dekorálhatjuk az injektált objektumokat  A komponensekhez interceptorokat rendelhetünk  Esemény kezelő model  Új szkóp Programrendszerek fejlesztése

54 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS CDI Bab  A CDI által meghatározott kontextusok mentén menedzseli az életútját  Egy CDI bab az alábbi tulajdonságokkal rendelkezik: ■Típus ■Minősítések (Qualifier) ■Szkóp ■EL név (opcionális) ■Interceptor kötések (opcionális) ■Implementáció Programrendszerek fejlesztése

55 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Minősítő jelölések  Egy babnak különböző implementációi lehetnek  Ezeket jelölni tudjuk a minősítő jelölésekkel  Ha nincs semmi Programrendszerek fejlesztése

56 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Babok mint injektálható objektumok  Szinte bármilyen Java osztály  Viszony babok  Java EE erőforrások  Perzisztencia kontextusok  Producer mezők  A producer metódusok által visszaadott objektumok  Web szolgáltatás referenciák  Hivatkozások távoli EJB-re Programrendszerek fejlesztése

57 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Babok injektálása  A konténer az anotáció szerint példányosítja és injektálja a megadott objektumot Programrendszerek fejlesztése

58 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Szkópok használata  Az objektum láthatóságát élettartamát adja meg  Használható szkópok (sajátokat is lehet definiálni): ■Request ■Session ■Application ■Dependent ■Conversation Programrendszerek fejlesztése

59 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS A conversation szkóp Hasonló a session hatókörhöz, állapotokat tart és rendel felhasználókhoz a rendszerben több request-en keresztül a következő két különbséggel: –A életciklusának határait az alkalmazás kezeli –Az állapotot egy adott böngészőhöz rendeli Egy conversation egy feladatot reprezentál a felhasználó szemszögéből, több feladat esetén több conversation keletkezik A conversation hatókör minden JSF request esetén aktív és legtöbb esetben a request végén véget is ér. Több requesten keresztül tartó conversation-t hosszú futású (long-running) conversation-nek nevezzük Programrendszerek fejlesztése

60 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Függő pseudo-scope A négy beépített hatókör mellett a Web Bean specifikál egy default Minden Web Bean, amely nem definiálja a hatókörét, ebbe a hatókörbe sorolandó Egy függő Web Bean-re való hivatkozás (injektálás) esetén mindig létrejön egy példány a függő bean-ből, valahányszor az injektáló példányosítva van A függő Web Bean-ek példányai sosem lesznek megosztva komponensek között, egy ilyen példány a példányosító Web Bean-től „függ” Az életciklusa is tőle függ, akkor lesz megszüntetve, amikor a példányosító megszűnik Programrendszerek fejlesztése

61 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS EL nevek használata  Ha nem adjuk meg akkor az osztály neve Programrendszerek fejlesztése

62 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Producer metódusok  Lehetővé teszik nem babok, vagy speciális inicializálási igényű objektumok injektálását Programrendszerek fejlesztése

63 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Alternatívák használata  Amennyiben fejlesztési időben egy bab több verziója is szükséges  Ha nincs megjelölve Programrendszerek fejlesztése

64 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Specializáció  Hasonló mint az alternatíva, de azt akarjuk, hogy mindég cserélje le: Programrendszerek fejlesztése

65 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Producer mező  Hasonló mint a producer metódus, csak ez egy mező Programrendszerek fejlesztése

66 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Eseménykezelés  Események segítségével a fordításidőbeli függőségek figyelembe vétele nélkül lehet kommunikálni: laza csatolás  Egy bab definiálhat egy eseményt egy másik elküldheti egy harmadik pedig fogadhatja azt  Esemény ■Java objektum ■Lehet minősítő jelölése Programrendszerek fejlesztése

67 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Megfigyelő - Observer  Observer metódus az esemény elkapására  Lehet feltételes  Lehet tranzakcionális  Akkor értesíti az eseményről ha a típusa és az összes minősítő megjelölése megegyezik Programrendszerek fejlesztése

68 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Események létrehozása Programrendszerek fejlesztése

69 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Interceptorok  A keresztülívelő, ortogonális problémák kezelésére  Minden menedzselt objektumra használható Programrendszerek fejlesztése

70 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Dekorátorok  Szerepük az üzleti tervezési minták megvalósítása  Egy dekorátor egy vagy több dekorált osztályt egészít ki új képességekkel Programrendszerek fejlesztése

71 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Sztereotípusok  Egy olyan annotáció amely más annotációkat helyettesít  Egyfajta annotáció csoportképzés Programrendszerek fejlesztése

72 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Egy egyszerű példa: Komponens class Hello { public String hello(String name) { return "hello " + name; egy beépített stereotípus Programrendszerek fejlesztése

73 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Egy egyszerű példa: Kliens class Printer Hello hello; public void hello() { System.out.println(hello.hello("world")); egy beépített kötési típus Programrendszerek fejlesztése

74 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Egy egyszerű példa: Konstruktor injektálás class Printer { private Hello hello; public Printer(Hello hello) {this.hello=hello;} public void hello() { System.out.println(hello.hello("world")); } A konstruktorok paraméterei default injektálódnak Programrendszerek fejlesztése

75 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Egy egyszerű példa: Initializer használata class Printer { private Hello void initPrinter(Hello hello) {this.hello=hello;} public void hello() { System.out.println(hello.hello("world")); } Példányosítás utáni callback a paraméterek injektálására Programrendszerek fejlesztése

76 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Komponensek class Hello { public String hello(String name) { return "hello " + name; } Alapértelmezetten a komponensek nem elérhetőek EL kifejezésekben. Ha nem adunk meg nevet, egy default név rendelődik hozzá Programrendszerek fejlesztése

77 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS JSF oldalak Web Bean metódus hívása EL kifejezéssel Programrendszerek fejlesztése

78 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kötési típusok A kötési típus egy annotáció, amely lehetővé teszi a kliens számára, hogy több implementáció közül választhasson egy API-ból futási időben –String alapú nevek használata feloldásnál az alapértelmezett kötési típus Programrendszerek fejlesztése

79 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kötési típus definiálása és Casual class Hi extends Hello { public String hello(String name){ return "hi " + name; } class Printer Hello hello; public void hello(){ System.out.println( hello.hello("JBoss Compass") ); } kötési típus specifikálása A Hello komponens injektálása és implementáció elkérése Programrendszerek fejlesztése

80 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Telepítési típusok A telepítési típus egy annotáció, amely Web Bean- ként azonosít egy osztályt –Telepítési típusok engedélyezhetőek és tilthatóak, ezzel biztosítva komponensek egész csoportjainak engedélyezését és tiltását telepítési időben –Van egy precedencia sorrendje a telepítési típusoknak, így segítve a futtatási környezetet, hogy különböző implementációk között választhasson egy API-ból –A telepítési típusok lecserélik az XML alapú konfigurációkat Az alapértelmezett telepítési típus: Production Programrendszerek fejlesztése

81 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Telepítési típus definiálása, Espanol class Hola extends Hello { public String hello(String name){ return "hola " + name; } javax.webbeans.Standard javax.webbeans.Production org.jboss.i18n.Espanol Ugyanaz az API, különböző implementáció A felsorolás sorrendje fontos! Csak az itt felsorol telepítési típusok lesznek elérhetőek az alkalmazásban Programrendszerek fejlesztése

82 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Perzisztencia  Processz szintű -> zárolás, versenyhelyzet detektálás  Tranzakció szintű -> Laza betöltés problémája  EJB3 komponens szintű -> komponensek közötti átadás  Konverzáció szintű szkóp Programrendszerek fejlesztése

83 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Hatókörök és kontextusok A hatókörök meghatározzák egy Web Bean példányainak életciklusát Összekapcsolják a klienst, és az adott klienshez tartozó példányokat Bővíthető kontextus modell, új annotációk készítésével Beépített hatókörök: Programrendszerek fejlesztése

84 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programrendszerek fejlesztése

85 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Tartalom  EJB  CDI ■Szolgáltatások ■Szkópok ■Injektálás ■Minősítő jelölések ■EL nevek ■Producer metódusok ■Alternatívák ■Specializáció ■Eseménykezelés ■Interceptorok ■Dekorátorok ■Sztereotípiák Programrendszerek fejlesztése


Letölteni ppt "UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem."

Hasonló előadás


Google Hirdetések