Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA

Podobné prezentace


Prezentace na téma: "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA"— Transkript prezentace:

1 VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
Zbyněk Šlajchrt Část 12.

2 CDI (WebBeans) Oficiální název
Contexts And Dependency Injection Navrženo pro usnadnění provázání komponent z prezentační a aplikační vrstvy Tvůrci zamýšleli primárně použití v JSF CDI však není omezeno pouze na JSF Charakteristika Slabé vazby (loose coupling) "Stavově" orientované Typově bezpečné Flexibilní

3 CDI - Specifikace Specifikace JSR-299 Související specifikace
Dependency Injection for Java, JSR-330 Managed Beans jako součást Java EE 6, JSR-316 Inspirace: Guice, Seam

4 Motivační příklad Nikdo není přihlášen: Uživatel je přihlášen:

5 Motivační příklad - schéma

6 Motivační příklad – JSP stránka
V EL výrazech pracuji s instancí Login Nechci se starat o to, kde je tato instance uložena (scope) Nechce se mi ani deklarovat proměnnou login přes <jsp:useBean>

7 Motivační příklad - kontroler
Nechci se obtěžovat s vytvářením instance Login Ani ukládáním instance do atributu odpovídajícího scope (setAttribute) Chci ji pouze používat, tj. volat její metody a nastavovat vlastnosti Nechť mi kontejner vstříkne do atributu odkaz na připravenou instanci

8 Motivační příklad – Managed bean
Deklaruji, že bean Login je určen do HTTP session a že v EL výrazech se lze na něj odkazovat jménem "login". Potřebuji pracovat s DB, ať mi tedy kontejner vstříkne EM. Jelikož v aplikaci může být více jednotek, upřesním ji vlastní anotací (tzv.

9 Motivační příklad: Prostředky
Místo specifikace názvu JPA jednotky použiji Odstiňuje mne od detailů JPA konfigurace Mohu tak snadno použít různé JPA jednotky pro vývoj a produkci Prostředky používané v aplikaci deklaruji ve speciální komponentě @Produces indikuje, že prostředek je nabízen k použití všude, kde se vyžaduje EntityManager s

10 Motivační příklad: Odeslání mailu
Přihlášený uživatel může odesílat zprávy

11 Příklad: Upravené schéma

12 Příklad: Upravená JSP stránka

13 Příklad: Upravený kontroler
Odesílání má na starosti bean Nechám si tedy vstříknout jeho instanci do atributu a nestarám se o jeho životní cyklus

14 Příklad: Sdílení aktuálního uživatele
bean potřebuje znát aktuálně přihlášeného uživatele, v jehož jménu odesílá zprávu. V Login beanu vytvořím produkční metodu getCurrentUser, která zveřejňuje aktuálního uživatele. umožní propojení produkční a konzumentské strany.

15 Motivační příklad: Email bean
bean odesílá mail ve jménu přihlášeného uživatele Nechám si vstříknout přihlášeného uživatele Pokud by nebyl nikdo přihlášen, tak se vyhazuje aplikační výjimka NotLoggedException a nikoliv NullPointerException, jak by se očekávalo. (Viz produkční metoda Login::getCurrentUser()) Potřebuji pracovat s prostředkem Java Mail Session. Zajistí kontejner. Ulehčím mu úkol upřesněním závislosti vlastním

16 Příklad: Úprava beanu s prostředky
Vytvořím nový atribut mailSession, do kterého kontejner nastaví odkaz na prostředek mail/myMailSession definovaný v JNDI (ENC) @Produces anotace zajistí jeho sdílení @MailSession kvalifikátor jej zpřístupní všem, kteří jej uvádí spolu

17 Souhrnný přehled vlastností
CDI poskytuje dvě základní služby Kontexty Životní cyklus stavových komponent je svázán se s životním cyklem kontextu, do kterého patří. Dependency Injection Typově bezpečná injektáž komponent Možnost volby implementace injektované komponenty při nasazování aplikace Postaveno na anotacích (vlastních a vestavěných)

18 Další služby CDI Integrace s EL – možnost přímého použití komponent v JSP a JSF Schopnost dekorovat injektované komponenty Interceptory Událostmi řízené programování Konverzační scope jako doplněk k request, session a application scope SPI (Service Provider Interface) pro integraci dalších frameworků do prostředí Java EE 6

19 Slabé vazby Odděluje server a klienta pomocí rozhraní a tzv. kvalifikátorů. Serverová část se tak může měnit. Odděluje životní cykly jednotlivých komponent zařazením komponent do kontextů, jejich životní cyklus ke řízen automaticky Událostní programovací model odděluje konzumenty zpráv od jejich zdrojů Využití interceptorů napomáhá k vzájemnému odstínění komponent

20 Beans – redefinice pojmu
Zdroj (továrna) kontextuálních objektů, jejich životní cyklus je řízen kontejnerem podle životního cyklu kontextu Bean nabízí jeden nebo více typů instancí S beanem jsou asociovány kvalifikátory S beanem je asociován scope (popisovač kontextu) Lze nastavit EL jméno Bean obsahuje implementaci

21 Bean, kontext, instance Context1 (of Scope1) IB1 creates B1 Scope1

22 Bean, kontext, instance Context1 (of Scope1) IB1 creates B1 creates
Context2 (Scope1) Scope1 IB1

23 Typ beanu Typ instancí poskytovaných beanem Může být
rozhraní, konkrétní i abstraktní třída generický typ pole primitivní typ

24 Managed Beans Bean, který je implementován Java třídou
jsou i jiné způsoby implementace (rozšíření) Pravidla pro třídu managed beanu Není nestatická vnitřní třída Konkrétní třída, nebo Není anotovaná anotací EJB komponenty ani není deklarován jako EJB v ejb-jar.xml Má příslušný konstruktor bez parametrů s parametry a

25 Beany jako injektovatelné objekty
CDI umožňuje injektovat různorodější typy, než v původním Java EE 5 Umožňuje injektáž do objektů, které nejsou spravované kontejnerem Typy objektů, které mohou být injektovány (Skoro) všechny Java třídy Session Beans Java EE prostředky (JMS, Java Mail, JDBC atd.) PersistenceContext Produkční atributy a objekty vracené produkčními metodami Webové služby Vzdálená EJB rozhraní

26 Extra-jednoduchý managed bean
patří do Dependent scope na bean se nelze odkazovat z EL

27 Kvalifikátory Použitím kvalifikátorů lze připravit více implementací jednoho typu Kvalifikátor je anotace definovaná jako @Target({METHOD, FIELD, PARAMETER, TYPE}) @Retention(RUNTIME) Touto anotací se anotuje třída managed beanu Používá se na straně konzumenta spolu s anotací @Inject

28 Kvalifikátory - příklad
@Default je vestavěný kvalifikátor označující default implementaci.

29 Injektáž beanů Na straně konzumenta se požadavek na injektáž beanu vyjadřuje Lze jí použít na atributu metodě konstruktoru se často doprovází kvalifikátory, které upřesňují požadavek na injektovaný bean

30 Injektáž - příklady

31 Scopes Životní cyklus beanu je určen tzv. scope
Každý bean má přiřazen právě jeden scope Lze vytvářet vlastní Vestavěné scopes Scope Annotation Duration Request scope @RequestScoped Po dobu trvání HTTP dotazu. Session scope @SessionScoped Po dobu trvání HTTP session. Application scope @ApplicationScoped Po dobu běhu aplikace. Dependent scope @Dependent Životní cyklus odpovídá životnímu cyklu konzumujícího beanu. Conversation scope @ConversationScoped Po dobu trvání 'konverzace' v JSF aplikaci.

32 Pojmenování beanu pro EL
Aby bylo možné se na bean odkazovat z EL, je zapotřebí jej pojmenovat se umístí na třídu beanu Pokud se nezadá jeho hodnota, EL název beanu odpovídá názvu beanu s malým písmenem na začátku. Nestandardní název lze zadat v atributu value @Named("mailer")

33 Použití beanu v JSP Na bean se lze odkazovat z EL výrazu uvedením jeho jména ${login.currentUser.username} login je jméno beanu Login

34 Použití beanu ve facelet
Typické použití je ve formuláři Gettery beanu se použijí pro výpis statického textu Settery se použijí k nastavení hodnot z formuláře Akce formuláře se nasměruje na jednu z metod beanu

35 Použití ve facelet: příklad
@Model je tzv. stereotyp, neboli pojmenovaná skupina anotací. @Model

36 Produkční metody Produkční metody umožňují injektovat objekty, které
nejsou beany mění se za běhu vyžadují speciální inicializaci Tyto metody se spolu s upřesňujícími kvalifikátory

37 Produkční metody: příklad

38 Další features ... Interceptory Dekorátory Události Alternativy
podobné interceptorům v EJB3 Dekorátory jako interceptory, ale obalují konkrétní třídu Události lze posílat notifikace o událostech posluchačům Alternativy konfigurace alternativních implementací beanů

39 Poznámky Aplikace musí vždy obsahovat beans.xml v adresáři WEB-INF

40 Zdroje Goncalves, Antonio; Beginning Java EE 6 Platform With GlassFish 3; APRESS JSR-299: Contexts and Dependency Injection for the Java EE platform


Stáhnout ppt "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA"

Podobné prezentace


Reklamy Google