9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem

Slides:



Advertisements
Hasonló előadás
4. alkalom – Hálózat Kezelés
Advertisements


Kamarai prezentáció sablon
Hálózati és Internet ismeretek
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
MATEMATIKA Év eleji felmérés 3. évfolyam
J2EE keretrendszerek vizsgálata Önálló laboratórium, 2008 tavasz Farkas Gábor, OTX0QR Konzulens: Imre Gábor.
Utófeszített vasbeton lemez statikai számítása Részletes számítás
Öröklődés 2..
RMI = Remote Method Invocation
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
A tételek eljuttatása az iskolákba
Tanszéki konzulens: Horváth Ákos Készítette: Kóródi Norbert.
Bevezetés a Java programozásba
Fájlkezelés, IO Kivételkezelés Belső osztályok
1 Fejlett Programozási Technikák 2. 15/11. Fejlett Programozási Technológiák 2. 2 A mai előadás tartalma Probléma a Java Servlet-tel Template eszközök.
Fejlett Programozási Technikák 2.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 8. Gyakorlat Operator overloading II.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 11. Szolgáltatás Integráció Dr. Bilicki Vilmos Szegedi Tudományegyetem.
Tömbök ismétlés Osztályok Java-ban Garbage collection
VÁLOGATÁS ISKOLÁNK ÉLETÉBŐL KÉPEKBEN.
1. IS2PRI2 02/96 B.Könyv SIKER A KÖNYVELÉSHEZ. 2. IS2PRI2 02/96 Mi a B.Könyv KönyvelésMérlegEredményAdóAnalitikaForintDevizaKönyvelésMérlegEredményAdóAnalitikaForintDeviza.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Osztott alkalmazások kezelése. VIR elosztott architektúra indítékai: - meglévő komponensek integrációja - WEB / Internet elterjedése (nemzetköziség) -
WSDL alapismeretek A WSDL (Web Services Description Language – Web szolgáltatások leíró nyelv) egy XML-alapú nyelv a Web szolgáltatások leírására és azok.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
SPRING FRAMEWORK bemutatása
Szmetankó Gábor Greencode Kft.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Sárgarépa piaca hasonlóságelemzéssel Gazdaság- és Társadalomtudományi kar Gazdasági és vidékfejlesztési agrármérnök I. évfolyam Fekete AlexanderKozma Richárd.
SOAP alapismeretek A SOAP egy egyszerű XML alapú protokoll, ami lehetővé teszi, hogy az alkalmazások információt cseréljenek a HTTP-én keresztül. Forrás:
WEB MES (webes gyártásirányító rendszer)
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
Programrendszerek Fejlesztése
szakmérnök hallgatók számára
Java 2 Enterprise Edition
Logikai szita Izsó Tímea 9.B.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
2007. május 22. Debrecen Digitalizálás és elektronikus hozzáférés 1 DEA: a Debreceni Egyetem elektronikus Archívuma Karácsony Gyöngyi DE Egyetemi és Nemzeti.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 5.4 Szolgáltatói Keretrendszerek Prof. Dr. Gyimóthy Tibor,
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Komponens-absztrakció. Objektum-orientált paradigma korlátai Feltételezés az interfészekről: 1. öröklés és aggregáció alkalmazható, 2. közös programozási.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 4. Gyakorlat Függvény paraméterek, dinamikus.
Java web programozás 11..
Enterpise JavaBeans Simon Balázs
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Okostelefon köztesréteg Dr. Bilicki Vilmos Szegedi Tudományegyetem.
> aspnet_regiis -i 8 9 TIPP: Az „Alap” telepítés gyors, nem kérdez, de később korlátozhat.
Java web programozás 7-8..
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
Webes MES keretrendszer fejlesztése Kiss Miklós Dániel G-5S8 Tervezésvezető: Dr. Hornyák Olivér.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 3. Átszövődő vonatkozások Dr. Bilicki Vilmos Szegedi Tudományegyetem.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Programozás III JPA.
JSF – komponens alapú webfejlesztés. Mi az a JSF mire jó ● Egy szerver oldali, komponens alapú felhasználói felület keretrendszer ● Támogatja a webes.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JBoss Wildfly Kalla Mór
Előadás másolata:

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

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

Programrendszerek fejlesztése 2017.04.04. Programrendszerek fejlesztése

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

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

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

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, … 2017.04.04. Programrendszerek fejlesztése

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

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"); 2017.04.04. Programrendszerek fejlesztése

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

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

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

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

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

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

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

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

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

Programrendszerek fejlesztése EJB 2017.04.04. Programrendszerek fejlesztése

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

Programrendszerek fejlesztése EJB példa 2017.04.04. Programrendszerek fejlesztése

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

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 (@Stateless, interfészek @Remote, @Local ) 2017.04.04. Programrendszerek fejlesztése

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

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

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

Programrendszerek fejlesztése Életciklusok 2017.04.04. Programrendszerek fejlesztése

Programrendszerek fejlesztése 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; 2017.04.04. Programrendszerek fejlesztése

Programrendszerek fejlesztése Teljes működés 2017.04.04. Programrendszerek fejlesztése

Ü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) 2017.04.04. Programrendszerek fejlesztése

Programrendszerek fejlesztése JMS API Messaging Domains: Publish/subscribe Point-to-Point 2017.04.04. Programrendszerek fejlesztése 31

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

Programrendszerek fejlesztése Példa: Bean 2017.04.04. Programrendszerek fejlesztése

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

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

Programrendszerek fejlesztése Tranzakció hatóköre 2017.04.04. Programrendszerek fejlesztése

Programrendszerek fejlesztése Példa 2017.04.04. Programrendszerek fejlesztése

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

Programrendszerek fejlesztése 2017.04.04. Programrendszerek fejlesztése

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

Programrendszerek fejlesztése JSF életciklus 2017.04.04. Programrendszerek fejlesztése

Programrendszerek fejlesztése Seam életciklus 2017.04.04. Programrendszerek fejlesztése

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

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

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

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

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

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

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

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=“http://java.sun.com/jsf/html” prefix=”h”%> <%@ taglib uri=“http://java.sun.com/jsf/core” 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”/> 2017.04.04. Programrendszerek fejlesztése

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

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

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

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ó 2017.04.04. Programrendszerek fejlesztése

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 akkor @Default 2017.04.04. Programrendszerek fejlesztése

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

Programrendszerek fejlesztése Babok injektálása A konténer az anotáció szerint példányosítja és injektálja a megadott objektumot 2017.04.04. Programrendszerek fejlesztése

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

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

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

Programrendszerek fejlesztése EL nevek használata Ha nem adjuk meg akkor az osztály neve @Name 2017.04.04. Programrendszerek fejlesztése

Programrendszerek fejlesztése Producer metódusok Lehetővé teszik nem babok, vagy speciális inicializálási igényű objektumok injektálását 2017.04.04. Programrendszerek fejlesztése

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

Programrendszerek fejlesztése Specializáció Hasonló mint az alternatíva, de azt akarjuk, hogy mindég cserélje le: 2017.04.04. Programrendszerek fejlesztése

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

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

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

Események létrehozása 2017.04.04. Programrendszerek fejlesztése

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

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

Programrendszerek fejlesztése Sztereotípusok Egy olyan annotáció amely más annotációkat helyettesít Egyfajta annotáció csoportképzés 2017.04.04. Programrendszerek fejlesztése

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

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")); } 2017.04.04. Programrendszerek fejlesztése

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")); } 2017.04.04. Programrendszerek fejlesztése

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")); } 2017.04.04. Programrendszerek fejlesztése

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; } 2017.04.04. Programrendszerek fejlesztése

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

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

Kötési típus definiálása és használata public @BindingType @Retention(RUNTIME) @Target({TYPE,METHOD,FIELD,PARAMETER}) @interface Casual {} A @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 a @Casual implementáció elkérése public @Component class Printer { @Casual Hello hello; public void hello(){ System.out.println( hello.hello("JBoss Compass") ); } 2017.04.04. Programrendszerek fejlesztése

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

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

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

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

Programrendszerek fejlesztése 2017.04.04. Programrendszerek fejlesztése

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