VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKAZbyně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
lze posílat notifikace o událostech posluchačům Alternativy
konfigurace alternativních implementací beanů Stereotypy
Svazková anotace kvalifikátorů a ostatních anotací
2
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)
3
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
4
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
5
Ukázka třídy interceptoru6
Asociování s beanem Asociování interceptoru s beanem se
provádí anotací metody nebo celého beanu příslušné IBT (custom) anotace
7
Aktivace interceptorů Standardně jsou všechny interceptory
neaktivní Každý interceptor je třeba explicitně
aktivovat v souboru beans.xml v sekci <interceptors>
8
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
9
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
10
Příklad třídy dekorátoru11
Dekorované jsou všechny beany, které implementuji ILogin (@Any)
Aktivace dekorátorů Standardně jsou všechny interceptory
neaktivní Každý interceptor je třeba explicitně
aktivovat v souboru beans.xml v sekci <decorators>
12
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ě
13
Typ události Objekt události je instancí bez-
parametrové třídy - typu události
14
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
15
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
16
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
17
Příjem kvalifikované události Parametr observer metody je dodatečně
anotován kvalifikátorem
18
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
19
// javax.enterprise.util.AnnotationLiteral
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
20
Ukázka transakční observer metody
21
Tato metoda se zavolá pouze v případě, že distribuce událostiproběhla bez chyby.
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.
22
Příklad alternativy Alternativní bean musí být anotován
@javax.enterprise.inject.Alternative
23
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
24
Stereotyp - příklad25
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
26
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
27
Zdroje http://java.sun.com/javaee/6/docs/tutoria
l JSR-299: Contexts and Dependency
Injection for the Java EE platform
28
Konec29
Děkuji za pozornost