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 2014. 07. 15.2Programrendszerek fejlesztése

3 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 2014. 07. 15.3Programrendszerek 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 2014. 07. 15.4Programrendszerek 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á (email, LDAP, fájl, …)  A JNDI feladata a név szolgáltatás biztosítása a komponensek számára 2014. 07. 15.5Programrendszerek 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. 2014. 07. 15.6Programrendszerek 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, … 2014. 07. 15.7Programrendszerek 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 2014. 07. 15.8Programrendszerek 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"); 2014. 07. 15.9Programrendszerek 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ú)  @Resource ■Név (name) ■Típus (type) ■Azonosítás típusa (authenticationType) ■Megosztható (shareable) ■Csatolás neve (mappedName) ■Leírás (dessc) 2014. 07. 15.10Programrendszerek 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 2014. 07. 15.11Programrendszerek 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 2014. 07. 15.12Programrendszerek 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 2014. 07. 15.13Programrendszerek 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 2014. 07. 15.14Programrendszerek 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) 2014. 07. 15.15Programrendszerek 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 2014. 07. 15.16Programrendszerek 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 2014. 07. 15.17Programrendszerek 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 2014. 07. 15.18Programrendszerek fejlesztése

19 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS EJB 2014. 07. 15.19Programrendszerek 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 2014. 07. 15.20Programrendszerek fejlesztése

21 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS EJB példa 2014. 07. 15.21Programrendszerek 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ű 2014. 07. 15.22Programrendszerek 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 ■POJO (@Stateless, interfészek @Remote, @Local ) 2014. 07. 15.23Programrendszerek 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 3.0 2014. 07. 15.24Programrendszerek fejlesztése

25 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Entitás (>=EJB 3.0) 2014. 07. 15.25Programrendszerek 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 2014. 07. 15.26Programrendszerek fejlesztése

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

28 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Példa @Singleton @ConcurrencyManagement(BEAN) public class DiscountRateBean { @PersistenceContext private EntityManager entityManager; private Rate rate; @PostConstruct private void init() { rate = entityManager.find(Rate.class, 1); } @PreDestroy private void destroy() { entityManager.merge(rate); } public synchronized void setRate(Rate rate) { this.rate = rate; } public synchronized Rate getRate() { return rate; } 2014. 07. 15.28Programrendszerek fejlesztése

29 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Teljes működés 2014. 07. 15.29Programrendszerek 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) 2014. 07. 15.30Programrendszerek fejlesztése

31 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 31 JMS API  Messaging Domains: ■Publish/subscribe ■Point-to-Point 2014. 07. 15.31Programrendszerek 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 2014. 07. 15.32Programrendszerek fejlesztése

33 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Példa: Bean 2014. 07. 15.33Programrendszerek 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 2014. 07. 15.34Programrendszerek 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 2014. 07. 15.35Programrendszerek fejlesztése

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

37 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Példa 2014. 07. 15.37Programrendszerek 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 2014. 07. 15.38Programrendszerek fejlesztése

39 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 2014. 07. 15.39Programrendszerek 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 2014. 07. 15.40Programrendszerek fejlesztése

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

42 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Seam életciklus 2014. 07. 15.42Programrendszerek 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 2014. 07. 15.43Programrendszerek 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 2014. 07. 15.44Programrendszerek 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 2014. 07. 15.45Programrendszerek 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 2014. 07. 15.46Programrendszerek 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 2014. 07. 15.47Programrendszerek 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 2014. 07. 15.48Programrendszerek 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 2014. 07. 15.49Programrendszerek fejlesztése

50 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Login Page Login name: Password: @Stateless public class LoginAction { @PersistenceContext 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”%> @Name(“loginComp”) @In private Context sessionContext; public void setUserName(String username) { this.username = username; } public String login() { try { User user = (User) em.createQuery(„FROM...“).getSingleResult(); sessionContext.set(„currentUser", user); return “login“; } catch (Exception e) {…} } 2014. 07. 15.50Programrendszerek fejlesztése

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 2014. 07. 15.51Programrendszerek 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 2014. 07. 15.52Programrendszerek 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 2014. 07. 15.53Programrendszerek 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ó 2014. 07. 15.54Programrendszerek 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 akkor @Default 2014. 07. 15.55Programrendszerek 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 2014. 07. 15.56Programrendszerek 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 2014. 07. 15.57Programrendszerek 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 2014. 07. 15.58Programrendszerek 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. 2014. 07. 15.59Programrendszerek 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 hatókört: @Dependent 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 2014. 07. 15.60Programrendszerek 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  @Name 2014. 07. 15.61Programrendszerek 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 2014. 07. 15.62Programrendszerek 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 akkor @Default 2014. 07. 15.63Programrendszerek 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: 2014. 07. 15.64Programrendszerek 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ő 2014. 07. 15.65Programrendszerek 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 2014. 07. 15.66Programrendszerek 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 2014. 07. 15.67Programrendszerek fejlesztése

68 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Események létrehozása 2014. 07. 15.68Programrendszerek 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ó ■@AroundInvoke ■@PostConstruct ■@PreDestroy ■@PrePassivate ■@PostPassivate ■@AroundTimeout 2014. 07. 15.69Programrendszerek 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 2014. 07. 15.70Programrendszerek 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 2014. 07. 15.71Programrendszerek fejlesztése

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

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

74 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Egy egyszerű példa: Konstruktor injektálás public @Component 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 2014. 07. 15.74Programrendszerek fejlesztése

75 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Egy egyszerű példa: Initializer használata public @Component class Printer { private Hello hello; @Initializer 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 2014. 07. 15.75Programrendszerek fejlesztése

76 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Komponensek nevei public @Component @Named("hello") 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á 2014. 07. 15.76Programrendszerek 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 2014. 07. 15.77Programrendszerek 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 – @Current az alapértelmezett kötési típus 2014. 07. 15.78Programrendszerek fejlesztése

79 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kötési típus definiálása és használata public @BindingType @Retention(RUNTIME) @Target({TYPE,METHOD,FIELD,PARAMETER}) @interface Casual {} public @Casual @Component class Hi extends Hello { public String hello(String name){ return "hi " + name; } public @Component class Printer { @Casual Hello hello; public void hello(){ System.out.println( hello.hello("JBoss Compass") ); } A @Casual kötési típus specifikálása A Hello komponens injektálása és a @Casual implementáció elkérése 2014. 07. 15.79Programrendszerek 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 2014. 07. 15.80Programrendszerek fejlesztése

81 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Telepítési típus definiálása, használata public @DeploymentType @Retention(RUNTIME) @Target({TYPE,METHOD}) @interface Espanol {} public @Espanol @Component 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 2014. 07. 15.81Programrendszerek 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 2014. 07. 15.82Programrendszerek 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: – @RequestScoped – @SessionScoped – @ApplicationScoped – @ConversationScoped 2014. 07. 15.83Programrendszerek fejlesztése

84 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 2014. 07. 15.84Programrendszerek 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 2014. 07. 15.85Programrendszerek 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