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

2 Interceptory Zavádí prvky aspektově orientovaného programování Použití
Cross-cutting concerns operace prováděné napříč aplikací obvykle se nevážou na jednu třídu, ale na skupinu tříd, resp. metod Použití logování profilování transakce security kontrola vstupních parametrů volání metody

3 Interceptory - dělení Around-Invoke Life-cycle obalují volání metod
mohou existovat jako samostatné komponenty lze je aplikovat napříč aplikací pomocí anotací nebo deklarací v ejb-jar.xml interceptor vázaný na EJB bean definován jako speciální metoda ve třídě EJB beanu je aktivován pouze na business metodách třídy EJB beanu Life-cycle aktivují se při událostech v životním cyklu EJB beanů

4 Samostatné vs. vázané interceptory
Samostatné interceptory I1 I2 I2 BeanA BeanB Vázaný interceptor BeanC

5 Příklad: Interceptor vázaný na EJB
Metoda logMethod obaluje volání všech business metod na ShoppingBean-u

6 Pravidla pro metodu interceptoru
Povinná hlavička Object <METHOD>(InvocationContext ic) throws Exception může být public, private, protected i package-private nesmí být static nebo final Metoda smí vyhazovat kontrolovanou výjimku

7 Interceptor - sekvenční diagram

8 InvocationContext Umožňuje interceptoru řídit chování řetězu volání
Na metodu lze nasadit více interceptorů Metody v InvocationContext proceed – způsobí volání dalšího interceptoru nebo vlastní metody na beanu getMethod – volaná metoda (java.lang.reflect.Method) getParameters – parametry volání setParameters – nastavuje (mění) parametry volání getTarget – instance beanu, na kterém se metoda volá getContextData – slouží k předávání hodnot mezi interceptory v rámci jednoho řetězu volání

9 Samostatný interceptor
Lze nasadit na metody EJB beanů napříč aplikací Implementace v samostatné třídě Nasazení pomocí anotací metod, které se mají obalit interceptorem deklarativně v ejb-jar.xml Možnost nasadit na vybrané metody vybrané EJB beany paušálně na všechny metody všech beanů

10 Samostatný interceptor

11 Aplikace interceptoru na třídu
Interceptor lze explicitně nasadit na třídu EJB beanu @Interceptors(<SEZNAM_TŘÍD_INTERCEPTORŮ>) Všechny business metody takového beanu budou obaleny interceptorem pomocí lze potlačit nasazení interceptorů třídy na metodě

12 Aplikace interceptoru na metodu
Interceptor lze explicitně nasadit na metodu znovu

13 Aplikace interceptorů v ejb-jar.xml

14 Interceptory - default binding
Často je užitečné nasadit interceptor na všechny metody všech EJB beanů od verze EJB 3.1 Konfigurace v ejb-jar.xml

15 Potlačení interceptorů anotacemi
Problém: Interceptory třídy a defaultní interceptory se mohou vázat na metody či EJB, u kterých si to nepřejeme Možnost explicitně vyloučit pomocí anotací na úrovni metod i tříd

16 Potlačení interceptorů v ejb-jar.xml
Pomocí tagů <exclude-class-interceptors> a <exclude- default-interceptors>

17 Injektáž závislostí do interceptoru
Plná podpora DI v interceptorech Interceptory sdílí jmenný kontext (ENC) s EJB, jehož metody obalují

18 Interceptory životního cyklu
Odchytávají události v životním cyklu EJB Připomenutí – anotace metod na EJB volané kontejnerem při událostech v životním cyklu @PostConstruct, @PostPassivate Interceptory používají stejné anotace Liší se hlavička metody @<annotace> void <metoda>(InvocationContext ic) narozdíl od AroundInvoke nemůže vyhazovat kontrolované výjimky a musí vždy volat ic.proceed

19 Interceptor životního cyklu - příklad

20 Životní cyklus interceptoru
Sdílí životní cyklus s EJB, na který je navázán je vytvářen spolu s EJB je odstraněn společně s EJB Pokud je EJB stavový, týká se interceptoru také pasivace a aktivace Sdílejí také omezení Např.: do interceptoru nelze injektovat odkaz na stavový EJB, pokud EJB, na který je interceptor navázán, není stavový.

21 Zpracování výjimek v AroundInvoke
Vyhozením výjimky před voláním proceed() lze přerušit volání metody kontrola hodnot vstupních parametrů Lze odchytávat výjimky z proceed() a vyhazovat odlišné nebo je potlačovat Např. abstrakce JDBC výjimek kódy ve výjimkách závisí na výrobci pro různé databáze různý interceptor vyhazující abstrahované výjimky metodě lze proceed() volat vícekrát, např. v catch bloku zopakovat volání

22 Timer - časovač Java EE aplikace často potřebují spouštět úlohy v naplánovaných okamžicích. Např. výstupní sestavy v pravidelných intervalech EJB 2.1 zavedlo službu Timer funkcionalita byla velmi omezená Timer v EJB 3.1 inspirace cron, Quartz služba kontejneru pro registraci a spouštění naplánovaných úloh perzistentní charakter (by default) plán spouštění přetrvává mezi restarty serveru

23 Automatická nebo programová
Timer - schéma Automatická nebo programová registrace Timer Service Session Bean Notifikace beanu po vypršení časovače EJB vytváří časovač a registruje se v něm k notifikaci Kontejner spravuje všechny časovače a zajišťuje vyvolávání notifikací ve specifikovaných okamžicích Perzistentní charakter Stavové beany se nemohou registrovat k notifikacím.

24 Automatické vytváření časovače
Časovače mohou být vytvářeny automaticky kontejnerem v čase umístění aplikace (deploy) Pro každou metodu v EJB nebo @Schedules je vytvořen časovač Možno deklarovat v ejb-jar.xml

25 Programové vyváření časovače
Prostřednictvím rozhraní javax.ejb.TimerService Lze jej získat injektáží z kontextu EJBContext, metoda getTimerService() JNDI lookup

26 Programové vytváření časovače
Injektovaná služba časovače si "pamatuje" bean, do kterého byla injektována. To umožní asociovat bean a jím vytvářené instance časovačů. Hondota true znamená, že časovač bude perzistentní. Třída cz.vse.javaee.OrderServiceBean

27 Metody TimerService getTimers createTimer createSingleActionTimer
Vrací všechny časovače asociované s beanem createTimer Vytváří časovač na základě datumu, intervalu nebo trvání createSingleActionTimer Vytvoří časovač, který je po vypršení odstraněn createIntervalTimer Vytvoří časovač na základě intervalu mezi vypršeními createCalendarTimer Vytvoří časovač použitím kalendářového výrazu

28 Příklady kalendářových výrazů
Třída ScheduleExpression Vytvoření časovače z kalendářového výrazu

29 Metody časovače cancel getInfo getNextTimeout getTimeRemaining
zruší časovač a všechna asociovaná vypršení getInfo vrací informace asociované s časovačem při jeho vytváření getNextTimeout vrací okamžik příštího vypršení časovače getTimeRemaining vrací počet milisekund, které schází k další k expiraci getHandle vrací serializovatelné memento k časovači vhodné pro předávání jako argument pro vzdálená volání

30 Zrušení časovače Časovač lze zrušit voláním metody cancel()

31 Utilita cron UNIXová utilita pro plánování skriptů
Umožňuje plánovat pomocí kalendářových výrazů Kalendářový výraz je šablona, podle které lze určit, kdy má být skript spuštěn lze zadat minutu, hodinu, den v týdnu, den v měsíci a měsíc Např. lze naplánovat, aby byl skript spuštěn každý první den v měsíci ve 12:30.

32 Formát cron výrazu Pět polí oddělených mezerou nebo tabulátorem
Minuta Hodina DenVMěsíci Měsíc DenVTýdnu (0-58) (0-23) (1-31) (1-12) (0-6, neděle=0) Jako hodnotu lze použít *, která označuje, že všechny hodnoty jsou platné Příklady 20 * * * * - 20 minut po každé hodině 5 22 * * * - Každý den v 22:05 0 8 1 * * - První den v měsíci v 8:00 * - 4. července v 8:00 * * 1,3,5 – Každou hodinu od 8-17:00 v po, st a pá

33 Kalendářové výrazy v Java EE 6
Inspirace cron Rozšiřuje o možnost zadávat sekundy, rok a časové pásmo Kromě specifických hodnot, výčtů a rozsahů lze zadávat i přírůstky minute="*/15" hour="*" – každých 5 minut second="30/10" – každých 10 vteřin od 30. vteřiny

34 Atributy kalendářových výrazů
Popis Možné hodnoty Default hodnota second Sekunda(y) [0..59] minute Minuta(y) hour Hodina(y) [0..23] dayOfMonth Den (dny) v měsíci [1..31], {"1st", "2nd", "3d", ...}, "Last", -x (znamená x dní před posledním dnem) * month Měsíc(e) [1..12], {"Jan", ...} dayOfWeek Den (dny) v týdnu [0..7] (0 a 7 je neděle), {"Sun", ...} year Rok YYYY timezone Časové pásmo Viz zoneinfo db (tz)

35 Enterprise Naming Context (ENC)
EJB komponenta "nežije" ve vakuu Spojení s okolním světem zprostředkovává kontext vytvářený kontejnerem Každá komponenta má vlastní kontext ušitý na míru Umožňuje aplikaci vyhledávat distribuované prostředky, služby a EJB komponenty

36 Typy prostředků v ENC Odkazy na libovolné EJB rozhraní
Odkaz na webové služby JMS destinace (fronty a topiky) JMS továrny připojení JDBC datové zdroje Java Connector API (JCA) prostředky Primitivní hodnoty Java EE služby UserTransaction, TimerService, org.omg.CORBA.ORG

37 ENC – JNDI Lookup JNDI = Java Naming And Directory Interface
Kontext pro BeanA BeanA checkId=true mail/mailSession=<reference> ejb/BeanB=<reference> jdbc/BankDataSource=<reference> jms/BankQueue=<reference> context.lookup("java:comp/env/ejb/BeanB")

38 ENC – Dependency Injection
Provádí kontejner při inicializaci EJB komponenty Nadstavba na vyhledáváním (lookup) Kontext pro BeanA BeanA checkId=true mail/mailSession=<reference> ejb/BeanB=<reference> jdbc/BankDataSource=<reference> jms/BankQueue=<reference> @Resource(name="jms/BankQueue") private Queue bankQueue

39 ENC – Dependency Injection
Anotace atributů nebo setterů @Resource Různé prostředky, např. mail session, JMS prostředky, JDBC datové zdroje, služba časovače, SessionContext @EJB Stavové a bezstavové beany @PersistenceContext JPA entity managerem (pro práci s databází) @WebServiceRef Odkaz na rozhraní webové služby

40 ENC – Dependency Injection

41 Kontext pro ShoppingBean
ENC – Inicializace <session> // konfigurace // ShoppingBean </session> Kontext pro ShoppingBean Shopping Bean ejb/OrderService=<reference> jdbc/myDS=<reference> ejb-jar.xml anotace

42 Konfigurace ENC EJB beanu
XML deklaracemi Každá reference na službu, prostředek či EJB deklarovaná v XML deskriptoru vede k registraci v ENC Jméno pro lookup v beanu ATMServiceBean (s prefixem java:comp/env) ejb-jar.xml

43 Konfigurace anotacemi
Alternativa k deklaraci v XML deskriptorech @EJB anotace na třídě deklaruje odkaz na EJB v ENC Ekvivalentní zápis v XML deskriptoru (zde web.xml)

44 ENC – Kombinace přístupů

45 Odkazování na prostředky
JNDI – adresářová služba (často nad LDAP či AD) MyApp1 Kontext pro ShoppingBean Shopping Bean ejb/OrderService=<reference> jdbc/myDS=<reference> MyApp1/ejb/OrderService=... MyApp1/jdbc/myDS=... MyApp2/jms/LogQueue=... MyApp2/jdbc/someDS=... Na úrovni aplikačního serveru Některé záznamy lze (je třeba) konfigurovat, jiné se instalují automaticky po nahrání aplikace.

46 Vyhledávání v lokálním kontextu
"java:comp/env" Prefix pro vyhledávání objektů v lokálním ENC komponenty java:comp/env/ejb/Shopping Kód v servletu či EJB: Deklarace odkazu na EJB ve web.xml nebo ejb-jar.xml v sekci <session>:

47 ENC a princip oddělení zájmů
Deployer by měl být schopen přizpůsobit aplikaci bez zásahu do kódu aplikace Vývojář by měl v ideálním případě vyvíjet aplikaci bez znalosti cílového prostředí

48 Sdílení položek v ENC WAR EJB-JAR
ve WAR modulu je pouze jediný ENC kontext všechny komponenty zabalené ve WARu (servlety, tagy, posluchači, JSP, EJB) jej sdílí EJB-JAR ve EJB modulu má každý bean vlastní ENC kontext interceptory sdílí ENC svázaného EJB beanu

49 Globální JNDI jméno Vzdálená klientská aplikace vyhledává session beany v JNDI Musí sestavit globální jméno – absolutní cestu Do verze Java EE 6 nebylo standardizováno Java EE 6 – Syntaxe pro globální jméno java:global[/<app>]/<module>/<bean>[!<interface >] java:global/prednaska5-app/ejb/ShoppingBean! cz.vse.javaee.ShoppingRemote

50 Globální jméno - příklad


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

Podobné prezentace


Reklamy Google