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

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: "9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem"— Előadás másolata:

1 9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem
Informatikai Tanszékcsoport Szoftverfejlesztés Tanszék

2 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
Programrendszerek fejlesztése

4 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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) Programrendszerek fejlesztése

11 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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: Programrendszerek fejlesztése

18 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
EJB Programrendszerek fejlesztése

20 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
EJB példa Programrendszerek fejlesztése

22 Programrendszerek fejlesztése
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 22

23 Programrendszerek fejlesztése
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 @Local ) Programrendszerek fejlesztése

24 Programrendszerek fejlesztése
Entitás kezelés EJB 1,2.0 Entitás bab EJB 3.0, 3.1 Entitás – JPA = Hibernate 3.0 Programrendszerek fejlesztése

25 Programrendszerek fejlesztése
Entitás (>=EJB 3.0) Programrendszerek fejlesztése

26 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 Programrendszerek fejlesztése
Életciklusok Programrendszerek fejlesztése

28 Programrendszerek fejlesztése
Példa 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 Programrendszerek fejlesztése
Teljes működés Programrendszerek fejlesztése

30 Ü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 Programrendszerek fejlesztése
JMS API Messaging Domains: Publish/subscribe Point-to-Point Programrendszerek fejlesztése 31

32 Programrendszerek fejlesztése
Ü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 Programrendszerek fejlesztése
Példa: Bean Programrendszerek fejlesztése

34 Programrendszerek fejlesztése
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 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 Programrendszerek fejlesztése
Tranzakció hatóköre Programrendszerek fejlesztése

37 Programrendszerek fejlesztése
Példa Programrendszerek fejlesztése

38 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 Programrendszerek fejlesztése
Programrendszerek fejlesztése

40 Programrendszerek fejlesztése
JSF vs. Seam JSF JSF Page POJO Facade Session EJB Entity EJB POJO Facade JSF Page Managed Bean SEAM JSF Page Session EJB JSF Page Entity EJB Automatically wrapped in Managed Bean Programrendszerek fejlesztése

41 Programrendszerek fejlesztése
JSF életciklus Programrendszerek fejlesztése

42 Programrendszerek fejlesztése
Seam életciklus Programrendszerek fejlesztése

43 Programrendszerek fejlesztése
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 faces-config.xml vagy pages.xml
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
<HTML> <HEAD><TITLE>Login Page</TITLE></HEAD> <BODY BGCOLOR=”white”> <f:view><h:form> Login name: Password: </h:from></f:view> </BODY> </HTML> @Stateless public class LoginAction { @PersistenceContext private EntityManager em private String username = “”; } @Name(“loginComp”) taglib uri=“ prefix=”h”%> taglib uri=“ prefix=”f”%> @In private Context sessionContext; public void setUserName(String username) { this.username = username; } <h:input_text id=”name” value=”#{loginComp.userName}”/> <h:input_text id=”password” value=”#{loginComp.password}”/> public String login() { try { User user = (User) em.createQuery(„FROM ...“) .getSingleResult(); sessionContext.set(„currentUser", user); return “login“; } catch (Exception e) {…} } <h:command_button action=”#{loginComp.login}” value=”Login”/> Programrendszerek fejlesztése

51 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 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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
EL nevek használata Ha nem adjuk meg akkor az osztály neve @Name Programrendszerek fejlesztése

62 Programrendszerek fejlesztése
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 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 Programrendszerek fejlesztése
Specializáció Hasonló mint az alternatíva, de azt akarjuk, hogy mindég cserélje le: Programrendszerek fejlesztése

65 Programrendszerek fejlesztése
Producer mező Hasonló mint a producer metódus, csak ez egy mező Programrendszerek fejlesztése

66 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
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 Események létrehozása
Programrendszerek fejlesztése

69 Programrendszerek fejlesztése
Interceptorok A keresztülívelő, ortogonális problémák kezelésére Minden menedzselt objektumra használható @AroundInvoke @PostConstruct @PreDestroy @PrePassivate @PostPassivate @AroundTimeout Programrendszerek fejlesztése

70 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése
Sztereotípusok Egy olyan annotáció amely más annotációkat helyettesít Egyfajta annotáció csoportképzés Programrendszerek fejlesztése

72 Egy egyszerű példa: Komponens
@Component egy beépített stereotípus public @Component class Hello { public String hello(String name) { return "hello " + name; } Programrendszerek fejlesztése

73 Egy egyszerű példa: Kliens
@Current egy beépített kötési típus public @Component class Printer { @Current Hello hello; public void hello() { System.out.println(hello.hello("world")); } Programrendszerek fejlesztése

74 Egy egyszerű példa: Konstruktor injektálás
A konstruktorok paraméterei default injektálódnak public @Component class Printer { private Hello hello; public Printer(Hello hello) {this.hello=hello;} public void hello() { System.out.println(hello.hello("world")); } Programrendszerek fejlesztése

75 Egy egyszerű példa: Initializer használata
Példányosítás utáni callback a paraméterek injektálására public @Component class Printer { private Hello hello; @Initializer void initPrinter(Hello hello) {this.hello=hello;} public void hello() { System.out.println(hello.hello("world")); } Programrendszerek fejlesztése

76 Programrendszerek fejlesztése
Komponensek nevei Alapértelmezetten a komponensek nem elérhetőek EL kifejezésekben. Ha nem adunk meg nevet, egy default név rendelődik hozzá public @Component @Named("hello") class Hello { public String hello(String name) { return "hello " + name; } Programrendszerek fejlesztése

77 JSF oldalak <h:commandButton
Web Bean metódus hívása EL kifejezéssel <h:commandButton value="Say Hello" action="#{hello.hello}" /> Programrendszerek fejlesztése

78 Programrendszerek fejlesztése
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 Programrendszerek fejlesztése

79 Kötési típus definiálása és használata
public @BindingType @Retention(RUNTIME) @Target({TYPE,METHOD,FIELD,PARAMETER}) @interface Casual {} kötési típus specifikálása public @Casual @Component class Hi extends Hello { public String hello(String name){ return "hi " + name; } A Hello komponens injektálása és implementáció elkérése public @Component class Printer { @Casual Hello hello; public void hello(){ System.out.println( hello.hello("JBoss Compass") ); } Programrendszerek fejlesztése

80 Programrendszerek fejlesztése
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 Telepítési típus definiálása, használata
public @DeploymentType @Retention(RUNTIME) @Target({TYPE,METHOD}) @interface Espanol {} Ugyanaz az API, különböző implementáció public @Espanol @Component class Hola extends Hello { public String hello(String name){ return "hola " + name; } A felsorolás sorrendje fontos! Csak az itt felsorol telepítési típusok lesznek elérhetőek az alkalmazásban <web-beans> <component-types> <component-type>javax.webbeans.Standard</component-type> <component-type>javax.webbeans.Production</component-type> <component-type>org.jboss.i18n.Espanol</component-type> </component-types> </web-beans> Programrendszerek fejlesztése

82 Programrendszerek fejlesztése
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 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 Programrendszerek fejlesztése

84 Programrendszerek fejlesztése
Programrendszerek fejlesztése

85 Programrendszerek fejlesztése
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 "9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem"

Hasonló előadás


Google Hirdetések