
c5027f64f7cffb73d4c129026193844f.ppt
- Количество слайдов: 50
Web Bean JBoss Seam - Apache Shale
EJB architektúra • Komponens alapú üzleti alkalmazások fejlesztése • Programozási modell • Tranzakciókat használó erőforrások elosztása
Áttekintés • Enterprise Java. Beans – Stabil – Skálázható – Tranzakció menedzsment – Sok-felhasználós – Biztonságos • EJB 3. 0 – Javított, egyszerűsített EJB modell – Könnyű használhatóság – Java annotációk!!!
Hiányosságok • Az EJB komponensek nem látják a webes réteg request, session és application kontextus állapotait, így nem is férnek hozzá azokhoz • EJB komponenseket nem lehet általánosan használni a megjelenítési rétegben • Nincs komponens vagy függvény szintű biztonságkezelés • JSF-ben nincs integrálva tranzakcióban használt erőforrások elérése • A servlet specifikáció – amit a JSF használ – nem elég gazdag komplex alkalmazásokban való használathoz • JSF még nem használható annotációkkal
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
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
Adaptálás meglévő rendszerekhez • Létező EJB 3 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ő EJB 3 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
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
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
Egy egyszerű példa: Komponens @Component egy beépített stereotípus public @Component class Hello { public String hello(String name) { return "hello " + name; } }
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("world")); } }
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("world")); } }
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 init. Printer(Hello hello) {this. hello=hello; } public void hello() { System. out. println(hello("world")); } }
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; } }
JSF oldalak Web Bean metódus hívása EL kifejezéssel <h: command. Button value="Say Hello" action="#{hello}" />
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 APIból futási időben – String alapú nevek használata feloldásnál – @Current az alapértelmezett kötési típus
Kötési típus definiálása és használata public @Binding. Type @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER}) @interface Casual {} A Hello komponens injektálása és a @Casual implementáció elkérése 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; } } public @Component class Printer { @Casual Hello hello; public void hello(){ System. out. println( hello("JBoss Compass") ); } }
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
Telepítési típus definiálása, használata public @Deployment. Type @Retention(RUNTIME) @Target({TYPE, METHOD}) @interface Espanol {} A felsorolás sorrendje fontos! Csak az itt felsorol telepítési típusok lesznek elérhetőek az alkalmazásban Ugyanaz az API, különböző implementáció public @Espanol @Component class Hola extends Hello { public String hello(String name){ return "hola " + name; } } <web-beans> <component-type>javax. webbeans. Standard</component-type> <component-type>javax. webbeans. Production</component-type> <component-type>org. jboss. i 18 n. Espanol</component-type> </component-types> </web-beans>
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: – – @Request. Scoped @Session. Scoped @Application. Scoped @Conversation. Scoped
A conversation hatókör • 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.
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
Producer metódusok • A Producer metódusok segítenek a komponensek példányosításának kezelésében: – Polimorfizmus futási időben – Példányosítás kezelése – Injektálás kezelése nem Web Bean komponensekre vonatkozóan
Interceptor-ok • Az EJB 3. 0 interceptor arhitektúra felhasználása a következőkkel kibővítve: – Minden Web Bean-nek lehet interceptora, nem csak session bean-eknek – Kifinomultabb létrehozása a kötéseknek a Web Beanek és az interceptorok között annotációkkal • Két típusa van: – Függvényhíváshoz rendelt interceptorok – Komponensek életciklusaihoz rendelt interceptorok
Sztereotípusok • Gyakran visszatérő, használandó arhitektúra minták, amelyek úgynevezett Web Bean szerepköröket definiálnak • Magába foglalja a következőket vagy azok kombinációit: – alapértelmezett telepítési típus – alapértelmezett hatókör – megszorítások a hatókörre – követlemények, amiket a Web Bean-nek meg kell valósítania – Interceptorok megadása
Események • Teljes elkülönül az eseményt generáló („producer”) és eseményt feldolgozó („observer”) • Observer/observable minta felhasználása a következő különbségekkel: – Nem csak a producer van leválasztva az observer-től, hanem fordítva is függetlenek egymástól – Az observer-ek meghatározhatják az események egy jóldefiniált halmazát, amelyet kezelnek – Observer-ek azonnal feldolgozhatják az eseményt, vagy késleltethetik az épp aktív tranzakció végéig
JBoss Seam
JBoss Seam • Alkalmazás keretrendszer, amely összeköti az EJB 3 -at és a JSF-et • További technológiák integrálása: – Ajax – BPM – PDF és MS Excel –… • Egyszerűsített web alkalmazás fejlesztés • Beépített komponensek
JBoss háttér • JBoss fejlesztés (Gavin King) • Minden más JBoss termékkel jól együtt tud működni (j. BPM, Drools, stb. ) • Nem csak JBoss alkalmazás szerveren fut -> beépített EJB konténert tartalmaz • Jelenleg folyik a standardizálása: a Web Beans specifikáció alapja • JBoss OS (LGPL)
Or • sacrifice EJB support • All Seam features available • Security • Pageflow • Exception handling • Enhanced JSF Expression Language (JSFEL) Web container • Use embedded EJB 3 Java EE container J 2 EE container Futtatási környezetek • Use embedded EJB 3 Or • sacrifice EJB support
Arhitektúra SEAM Framework JDK 1. 5 or later JSF EJB 3 1. 1 1. 2 EJB 3 Embedded EJB 3 Container
Tulajdonságai • • • Alapja POJO osztályok annotációkkal Facelet-ekre épül Nincsen szükség JSF managed bean-ekre Nem szeparálja teljesen külön a rétegeket EJB metódusok hívása Ajax segítségével Beépített munkafolyamat motor (j. BMP) Interceptorok és Események kezelése Injection, Outjection Kód és Projekt generálás Két új kontextus: conversation, business process
JSF vs. Seam JSF Page POJO Facade Session EJB POJO Facade Entity EJB JSF Page Managed Bean JSF Page Session EJB SEAM JSF Page Entity EJB Automatically wrapped in Managed Bean
JSF életciklus
Seam életciklus
Példa: Entity Bean EJB Entity Bean Seam komponens @Name("Product. Catalog") @Scope(Scope. Type. SESSION) @Entity @Table(name="catalog") public class Product. Catalog. Bean { @Id @Not. Null private long id; private String name; . . . @Data. Model(value="choice. Products") private List<Product. Bean> products;
Példa: Felhasználói felületek csatolásai @Datamodel. . . Pricelist #{Product. Catalog. name} <h: data. Table var="current" value="#{choice. Products}"> <h: column> <s: link action="#{Shop. Controller. select. Product(current)}" value="#{current. name}" /> </h: column> </h: data. Table>. . . Metódus hívása paraméterrel
Példa: Session Bean Seam komponens Injektálás @Name("Shop. Controller") @Scope(Scope. Type. SESSION) public class Shop. Controller { @In(create=true) private Shopping. Cart shopping. Cart; . . . public String select. Product(Product. Bean prod){ shopping. Cart. set. Product(prod); return "success"; }
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
JBoss Seam jövője • Seam 3 a Web Beans-re fog épülni teljesen – Web Beans szolgáltatásai: • Összefüggő programozási modell és Esemény Bus • JSF és EJB 3 integrációja • JPA, tranzakciók és validációk integrálása – Seam feladatai: • • Biztonság BPM és Rule integráció (munkafolyamatok) PDF és levelezés JSF könyvtárak Minden mást…
Apache Shale
Apache Shale • • Modern web alkalmazás keretrendszer Alapja a Java Server Faces Lazán csatolt szolgáltatáscsomag Szabadon kombinálható elemek Hatékony eseménykezelés Új megjelenítési technológia: Clay Annotációk használata Több integrációs pontot biztosít – Spring – j. Mock –…
View Controller • Felhasználói felületek és a megjelenő adatok összerendelése, kezelése • Backing Bean-ek alapján • Implementálni kell a View. Controller interfészt – Postback property – Setter Injection – Init() – Preprocess() – Prerender() – Destroy()
Dialog Manager • Navigációs szabályok, folyamatok definiálása magas szinten – Action – metódus hívása – Exit – folyamat vége – Subdialog – beágyazott folyamat – View – JSF oldal megjelenítése • Felületek újrafelhasználhatósága célja
Application Manager • Request-ek kezelése • JSF Phase. Listener mintájára • Elő és utófeldolgozás – Abstract. Req. Exp. Filter • JSF életciklus menedzsmentje – Shale. Application. Filter
Validáció • Apache Commons Validator • Kliens és szerver oldali validáció • Beépített típusok: – – Dátum E-mail URL. . . • 3 JSP tag a validáláshoz: – val: commons. Validator – val: validator. Var – val: validator. Script
Remoting • Javascript és Bean metódusok URL-re kötése
Clay • JSF esetén szerveroldalon fa alapú a felhasználói felület felépítése és tárolása • Ezt kiegészíti a Clay, hogy teljes részfákat lehessen mozgatni, beszúrni, törölni a felületből, így három lehetőséget biztosítva – HTML Views – Meta-data öröklődés – Szimbólumok
Tesztelés • JUnit tesztkeretrendszer • Hogyan lehet tesztelni egy konténerfüggő alkalmazást, mint amilyen minden EE alkalmazás függetlenül? • Mock object API-khoz, így kiküszöbölve a függőségeket: – Shale – Servlet – JSF
VÉGE
c5027f64f7cffb73d4c129026193844f.ppt