1 / 50

Web Bean

Web Bean. JBoss Seam - Apache Shale. EJB architektúra. Komponens architektúra Komponens alapú üzleti alkalmazások fejlesztése Programozási modell Tranzakciókat használó erőforrások elosztása. Áttekintés. Enterprise JavaBeans Stabil Skálázható Tranzakció menedzsment Sok-felhasználós

milton
Download Presentation

Web Bean

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Web Bean JBossSeam - ApacheShale

  2. EJB architektúra • Komponens architektúra • Komponens alapú üzleti alkalmazások fejlesztése • Programozási modell • Tranzakciókat használó erőforrások elosztása

  3. Áttekintés • EnterpriseJavaBeans • 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!!!

  4. Hiányosságok • Az EJB komponensek nem látják a webes réteg request, session és applicationkontextus á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

  5. Megoldás • Web Beans • JSR-299 specifikáció • Egyesíti a JSF ManagedBean 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

  6. 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

  7. 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 managedbean-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

  8. 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 requestscope adatait és használhat tranzakciós erőforrást is egyben

  9. 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

  10. Egy egyszerű példa: Komponens @Component egy beépített stereotípus public @Component class Hello { publicString hello(Stringname) { return"hello " + name; } }

  11. Egy egyszerű példa: Kliens @Current egy beépített kötési típus public @Component class Printer { @CurrentHello hello; publicvoid hello() { System.out.println(hello.hello("world")); } }

  12. 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;} publicvoid hello() { System.out.println(hello.hello("world")); } }

  13. 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 voidinitPrinter(Hello hello) {this.hello=hello;} publicvoid hello() { System.out.println(hello.hello("world")); } }

  14. 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 { publicString hello(Stringname) { return"hello " + name; } }

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

  16. 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 • @Currentaz alapértelmezett kötési típus

  17. Kötési típus definiálása és használata public @BindingType @Retention(RUNTIME) @Target({TYPE,METHOD,FIELD,PARAMETER}) @interfaceCasual{} A @Casualkötési típus specifikálása public @Casual @Component classHiextendsHello { publicString hello(Stringname){ return"hi " + name; } } A Hello komponens injektálása és a @Casualimplementáció elkérése public @Component classPrinter { @CasualHello hello; publicvoid hello(){ System.out.println( hello.hello("JBossCompass") ); } }

  18. 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

  19. Telepítési típus definiálása, használata public @DeploymentType @Retention(RUNTIME) @Target({TYPE,METHOD}) @interfaceEspanol{} Ugyanaz az API, különböző implementáció public @Espanol @Component classHolaextendsHello { publicString hello(Stringname){ 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>

  20. 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

  21. 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 conversationegy 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.

  22. 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

  23. 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

  24. Interceptor-ok • Az EJB 3.0 interceptorarhitektú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 Bean-ek é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

  25. 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

  26. 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

  27. JBoss Seam

  28. JBoss Seam • Alkalmazás keretrendszer, amely összeköti az EJB3-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

  29. JBoss háttér • JBoss fejlesztés (Gavin King) • Minden más JBoss termékkel jól együtt tud működni (jBPM, 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)

  30. Futtatási környezetek

  31. Arhitektúra

  32. Tulajdonságai • Alapja POJO osztályok annotációkkal • Facelet-ekre épül • Nincsen szükség JSF managedbean-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 (jBMP) • Interceptorok és Események kezelése • Injection, Outjection • Kód és Projekt generálás • Két új kontextus: conversation, business process

  33. JSF vs. Seam JSF JSF Page POJO Facade Session EJB Entity EJB POJO Facade JSF Page Managed Bean SEAM JSF Page Session EJB Entity EJB JSF Page Automatically wrapped in Managed Bean

  34. JSF életciklus

  35. Seam életciklus

  36. Példa: Entity Bean EJB EntityBean Seam komponens @Name("ProductCatalog") @Scope(ScopeType.SESSION) @Entity @Table(name="catalog") publicclassProductCatalogBean { @Id @NotNull privatelongid; privateStringname; @DataModel(value="choiceProducts") private List<ProductBean> products; ...

  37. Példa: Felhasználói felületek csatolásai @Datamodel ... Pricelist #{ProductCatalog.name} <h:dataTable var="current"value="#{choiceProducts}"> <h:column> <s:link action="#{ShopController.selectProduct(current)}" value="#{current.name}"/> </h:column> </h:dataTable> ... Metódus hívása paraméterrel

  38. Példa: Session Bean Seam komponens Injektálás @Name("ShopController") @Scope(ScopeType.SESSION) publicclassShopController { @In(create=true) privateShoppingCartshoppingCart; publicStringselectProduct(ProductBeanprod){ shoppingCart.setProduct(prod); return"success"; } ...

  39. 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

  40. 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 EJB3 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…

  41. Apache Shale

  42. 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 • jMock • …

  43. View Controller • Felhasználói felületek és a megjelenő adatok összerendelése, kezelése • BackingBean-ek alapján • Implementálni kell a ViewController interfészt • Postbackproperty • SetterInjection • Init() • Preprocess() • Prerender() • Destroy()

  44. 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

  45. Application Manager • Request-ek kezelése • JSF PhaseListener mintájára • Elő és utófeldolgozás • AbstractReqExpFilter • JSF életciklus menedzsmentje • ShaleApplicationFilter

  46. Validáció • ApacheCommonsValidator • Kliens és szerver oldali validáció • Beépített típusok: • Dátum • E-mail • URL • ... • 3 JSP tag a validáláshoz: • val:commonsValidator • val:validatorVar • val:validatorScript

  47. Remoting • Javascript és Bean metódusok URL-re kötése

  48. 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

  49. Tesztelés • JUnittesztkeretrendszer • Hogyan lehet tesztelni egy konténerfüggő alkalmazást, mint amilyen minden EE alkalmazás függetlenül? • MockobjectAPI-khoz, így kiküszöbölve a függőségeket: • Shale • Servlet • JSF

  50. VÉGE

More Related