1 / 29

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

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA. Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage. Část 13. Další features WebBeans. Interceptory podobné interceptorům v EJB3 Dekorátory jako interceptory, ale obalují konkrétní třídu Události

nanda
Download Presentation

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

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. VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 13.

  2. Další features WebBeans • Interceptory • 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ů • Stereotypy • Svazková anotace kvalifikátorů a ostatních anotací

  3. Interceptory • Blízcí příbuzní interceptorům z EJB3 • Umožňují programovat "cross-cutting concerns" • logování • profilování • transakce • bezpečnost • ... • WebBeans umožňuji asociovat typově bezpečně interceptory s beany • Prostřednictvím "custom" anotací (viz kvalifikátory)

  4. Interceptor Binding Type (IBT) • Javovská anotace, pomocí které se asociuje interceptor a bean • IBT anotace je opatřena meta-anotacemi • @Inherited – anotace je děděna • @InterceptorBinding – identifikace IBT anotace

  5. Třída interceptoru • Třída interceptoru se anotuje • @javax.interceptor.Interceptor • 'custom' IBT anotace - v našem případě @Log • Pro metody platí stejná pravidla, jako pro standardní EJB interceptory (viz 5. přednáška) • AroundInvoke inteceptory • Life-cycle interceptory

  6. Ukázka třídy interceptoru

  7. Asociování s beanem • Asociování interceptoru s beanem se provádí anotací metody nebo celého beanu příslušné IBT (custom) anotace

  8. Aktivace interceptorů • Standardně jsou všechny interceptory neaktivní • Každý interceptor je třeba explicitně aktivovat v souboru beans.xml v sekci <interceptors>

  9. Dekorátory • Dekorátory implementují jeden nebo více typů beanů (bean types) • Odchytávají volání business metod implementovaných dekorovanými typy beanů • Podobná koncepce jako interceptory • logika dekorátorů není cross-cutting • stává se součástí business logiky dekorovaných typů • Lze je nasadit na managed beany a EJB • nikoliv na jiné dekorátory či interceptory • Dekorátor je managed bean

  10. Deklarace dekorátoru • Třída dekorátoru se anotuje • @javax.decorator.Decorator • Každá třída dekorátoru musí mít tzv. delegate injection point • Anotovaný @Delegate + kvalifikátory atp. • Lze nahlížet jako na standardní injektovaný atribut • Dekorátor dekoruje každý bean, který vyhovuje anotacím na atributu delegáta

  11. Příklad třídy dekorátoru Dekorované jsou všechny beany, které implementuji ILogin (@Any)

  12. Aktivace dekorátorů • Standardně jsou všechny interceptory neaktivní • Každý interceptor je třeba explicitně aktivovat v souboru beans.xml v sekci <decorators>

  13. Události • Beany mohou vyrábět a konzumovat události • Snižuje se tak provázanost mezi beany (coupling) • Není nutná compile-time závislost mezi komunikujícími beany • Usnadňuje komunikaci mezi různými vrstvami aplikace • Stavový bean vysílá událost o změně stavu, která je přijata managed beanem ve webové vrstvě

  14. Typ události • Objekt události je instancí bez-parametrové třídy - typu události

  15. Generování událostí • Třída beanu deklaruje atribut typu javax.enterprise.event.Event • Parametrem tohoto generického rozhraní je typ události • Atribut se deklaruje pro injektáž • Událost se vyšle volání metody fire na atributu

  16. Příjem události • Události se přijímají v tzv. observer metodách • Tyto metody mají právě jeden parametr, který odpovídá typu události • Tento parametr musí být anotován @javax.enterprise.event.Observes

  17. Kvalifikátor události • Při deklaraci události lze uvádět kvalifikátor(y) události • "custom" anotace, která může obsahovat atributy • Deklarace události je doplněna o kvalifikátor

  18. Příjem kvalifikované události • Parametr observer metody je dodatečně anotován kvalifikátorem

  19. Dynamická volba kvalifikátoru • Kvalifikátor lze události přiřadit až za běhu • Vytvoří se třída, která implementuje rozhraní anotace kvalifikátoru • Při odesílání události se vytvoří instance této třídy a předá se metodě select v rozhraní Event • Metody select(...) slouží k dolaďování události // javax.enterprise.util.AnnotationLiteral

  20. Transakční observer metody • Bean může být notifikován v různých fázích notifikační transakce, tj. rozesílání události příjemcům • Identifikátor fáze se zadá do atributu during anotace @Observes • javax.enterprise.event.TransactionPhase • BEFORE_COMPLETION • AFTER_COMPLETION • AFTER_FAILURE • AFTER_SUCCESS • IN_PROGRESS

  21. Ukázka transakční observer metody Tato metoda se zavolá pouze v případě, že distribuce události proběhla bez chyby.

  22. Alternativy • Alternativy jsou beany, kterými lze nahradit standardní beany během řešení závislostí. • Pokud vzniká nejednoznačnost v závislostech, řeší se tak, že se ze všech kandidátů vyloučí beany, které nejsou alternativy. • Pokud zbude jediný bean-alternativa, použije se pro uspokojení závislosti. Jinak chyba deploymentu. • Alternativy se musí aktivovat v beans.xml; podobně jako interceptory a dekorátory.

  23. Příklad alternativy • Alternativní bean musí být anotován • @javax.enterprise.inject.Alternative

  24. Stereotypy • Stereotyp zachycuje často se vyskytující svazek anotací • Tento svazek je deklarován jako další anotace • Anotace ve svazku jsou obvykle • Scope anotace (@SessionScoped atp.) • @Named • @Alternative • Interceptor binding anotace • Anotaci ve stereotypu lze překrýt explicitním uvedením příslušné anotace na třídě či jiném prvku

  25. Stereotyp - příklad

  26. Vestavěné stereotypy • @javax.enterprise.inject.Model • Označuje bean z modelu v MVC frameworku, jako např. JSF. • Bean označený touto anotací • je pojmenovaný, tj. lze jej odkazovat z EL • je umístěn v Request scope

  27. Poznámky • Aplikace musí vždy obsahovat beans.xml v adresáři WEB-INF • Pokud bean patří do pasivovatelného scope (např. @SessionScoped), interceptor i dekorátor musí být stejně jako bean pasivovatelný (stačí serializovatelný) • Chyby • Interceptory nefungují v EAR, pouze ve WAR • Dekorátory nefungují vůbec

  28. Zdroje • http://java.sun.com/javaee/6/docs/tutorial • JSR-299: Contexts and Dependency Injection for the Java EE platform

  29. Konec Děkuji za pozornost

More Related