Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilKarolína Sedláčková
1
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 4.
2
Vrstvy aplikace a jejich vymezení Prezentační vrstva "Jak aplikace vypadá" Prezentační vrstva "Jak aplikace vypadá" Business vrstva "Co aplikace dělá" Business vrstva "Co aplikace dělá" Perzistentní vrstva "Co aplikace je" Perzistentní vrstva "Co aplikace je" Servlety JSP Filtry Bezstavové EJB Beans Stavové EJB Beany Message Driven Beany JPA Entity JMS Fronty JMS Topiky
3
Enterprise Java Beans Modelují aplikační logiku operace nad entitami z perzistentní vrstvy interakce s webovými službami odesílání asynchronních zpráv jiným systémům generování výstupních sestav Transakční zpracování demarkace začátku a konce transakce důvod: zajištění konzistence dat Bezpečnost k operacím lze přiřadit role
4
Typy EJB Bezstavové (stateless session beans) mezi voláními neuchovávají stav pro klienta Stavové (stateful session beans) uchovávají stav konverzace mezi aplikací a klientem Jedináček (singleton) – od verze Java EE 6 slouží ke sdílení dat mezi klienty a komponentami Řízené zprávami (message-driven, MDB) nevolají se přímo jsou vyvolány kontejnerem při příchodu zprávy
5
EJB kontejner Prostředí, do kterého se nasazují EJB komponenty Má na starosti především tyto úkoly Komunikace se vzdáleným klientem Zjednodušuje komunikaci mezi klientem a aplikací Dependency injection JMS destinace, datové zdroje, EJB, proměnné prostředí ad. State management Stavové beany udržují vzdálený stav klienta Klientovi se to jeví, jakoby byl stav uložen lokálně - transparentnost
6
EJB kontejner Další úkoly Pooling Pro bezstavové a MDB beany vytváří pool instancí - sdílení Každá instance řeší právě jeden požadavek Životní cyklus komponent Stará se o vytváření, inicializaci, destrukci a další události Messaging Umožňuje MDB poslouchat na JMS destinacích a konzumovat zprávy Odstiňuje programátora od komplikovaného JMS
7
EJB kontejner Další úkoly Management transakcí Beany deklarují transakční vlastnosti metod Kontejner řeší commit a rollback Bezpečnost Deklarace přístupů na úrovní tříd a metod Podpora souběžného zpracování požadavků Vývojář se nemusí starat o problémy se souběžností Výjimkou singleton, kde je zapotřebí jistá deklarace
8
EJB kontejner Další úkoly Správa interceptorů Komponenty, které mohou odchytávat okamžik před a po volání metody. Lze je definovat napříč aplikací Asynchronní volání metod Od EJB 3.1 je možné volat metody asynchronně Lze se tak vyhnout použití JMS
9
Embedded container Možnost spouštět EJB aplikace v prostředí Java SE Usnadňuje testování a ladění aplikací Podporuje pouze podmnožinu EJB Lite Bez MDB, vzdálených rozhraní, WS, Timer... může být omezující
10
Embedded Container - ukázka Pro Glassfish v3 viz: http://ctpjava.blogspot.com/2009/10/unit-testing-ejbs-and-jpa-with.html
11
Rozhraní Lokální rozhraní Definuje metody, které mohou volat jiné beany ve stejném kontejneru (tj. JVM) Beany mohou komunikovat přímo, nikoliv přes distribuovaný objektový protokol (např. IIOP) Je anotováno @javax.ejb.Local Vzdálené rozhraní Definuje metody, které mohou být volány z okolí kontejneru Komunikace probíhá v distr. objektovém protokolu Je anotováno @javax.ejb.Remote
12
Rozhraní Endpoint rozhraní Definuje metody, které mohou být volány pomocí SOAP protokolu Je anotováno @javax.jws.WebService Message rozhraní Implementováno Message-driven beany Voláno JMS nebo jiným MOM Typ rozhraní závisí na MOM Pro JMS je to javax.jms.MessageListener
13
Rozhraní beanu - příklad
14
Třída session beanu Podle typu musí být anotována @Stateless @Stateful Musí mít aspoň jedno rozhraní: lokální, vzdálené nebo endpoint. 'Mít' znamená klasickou implementaci v Javě (implements) pomocí anotací na třídě (@Local, @Remote) Je možné mít více rozhraní stejného typu
15
Bezstavové session beany Provádějí jednorázové operace často zapouzdřují nějakou proceduru ta musí obvykle proběhnout atomicky provede se celá – změny se projeví v datech zhavaruje – jakoby se nikdy neprováděla Jedna instance může obsluhovat více klientů je k dispozici všem klientům obvykle existuje více instancí, které jsou uloženy v tzv. poolu analogie s poolem vláken (thread pool)
16
Bezstavový bean - příklad
17
Volání beanu z klientské aplikace Syntaxe globálního jména: java:global/ / / !
18
Volání beanu z jiných komponent Dependency injection nabízí velmi pohodlné získání reference Lze ale použít i vyhledání v JNDI pomocí lookup
19
Přístup k proměnným prostředí EJB kontejner vlastní registr konfiguračních parametrů a odkazů na externí služby Enterprise Naming Context (ENC) Inicializuje se z anotací @Resource(mappedName="someDataSource") v ENC vznikne položka odkazující na externí prostředek z EJB XML META-INF/ejb-jar.xml deployment deskriptor EJB modulu
20
Příklad: Konfigurační parametr
21
Příklad – Konfigurace v ejb-jar.xml
22
SessionContext Poskytuje pohled do EJB kontejneru Beany pomocí něj volají různé služby kontejneru Reference se získává injektáží do atributu beanu @Resource SessionContext ctx; getCallerPrincipal() vrací aktuálního uživatele getBusinessObject(Class rozhraní) vrací reference na aktuální EJB, kterou lze předávat lookup(String name) slouží k vyhledávání objektů v ENC (JNDI)
23
Životní cyklus bezstavového beanu Does Not Exist Method-Ready Pool @PreDestroy Class.newInstance() injections @PostConstruct business method systémová výjimka
24
Životní cyklus bezstavového beanu Stav Does Not Exist stav-nestav, instance ještě neexistuje Stav Method-Ready Pool instance se nachází v poolu čeká na vyzvednutí kontejnerem a obsloužení klienta Přechod z Does Not Exists -> Method-Ready Pool vytvoření nové instance Class.newInstance() injektáž potřebných prostředků (anotace + XML) volání metody označené anotací @PostConstruct musí mít návratový typ void a být bez parametrů
25
Životní cyklus bezstavového beanu Vyzvednutí z poolu bean 'neví', kterého klienta bude obsluhovat kontejner před voláním nastaví odpovídající SessionContext obsahuje údaje o klientovi a o probíhající transakci po skončení volání putuje zpět do poolu Smrt pokud je kontejner již nepotřebuje redukce paměti zabírané poolem volá se metoda označená @PreDestroy
26
Stavové session beany Udržují stav konverzace udržování klientských dat mezi voláními Každé volání jednoho klienta obsluhuje stejný objekt Celý život beanu je věnován jedinému klientovi Lze je nahlížet jako "prodlouženou ruku" klienta klient si odkládá část své logiky a stavu na server
27
Rozhraní stavového beanu - příklad Podobně jako v případě bezstavového beanu, také pro stavový bean lze deklarovat lokální a vzdálené rozhraní V tomto případě mají obě rozhraní společného předka
28
Stavový bean - příklad
29
Stavový bean - implementace Třída stavového beanu se anotuje @Stateful Implementuje lokální a/nebo vzdálené rozhraní Stav v atributech beanu se uchovává mezi voláními cart, client Lze injektovat jiné beany nebo prostředky orderService – odkaz na bezstavový bean em – JPA manažer entit (perzistence)
30
Použití stavového beanu v servletu Nemůžeme použít dependency injection Servlet je jedináček => je sdílený mezi klienty Injektovaná instance stavového beanu by nepatřila právě jednomu klientovi! Musíme použít JNDI lookup vyhledat si bean sami Lze zařídit, aby odkaz na bean byl v kontextu webové aplikace. Konfigurace ve WEB-INF/web.xml – lokální rozhraní
31
Volání stavového beanu ze servletu
32
Uzavírací metoda - @Remove Voláním metody označené @Remove se ukončí život stavového session beanu
33
Životní cyklus stavového beanu Does Not Exist Method-Ready Passivated Class.newInstance Injections @PostConstruct timeout @PreDestroy timeout @PrePasivate @PostActivate business method systémová výjimka
34
Životní cyklus stavového beanu Stav Does Not Exist stav-nestav, instance ještě neexistuje Stav Method-Ready Pool Instance je v paměti a může obsluhovat svého klienta Udržuje klientův vzdálený stav Přechod z Does Not Exists -> Method-Ready vytvoření nové instance Class.newInstance() injektáž potřebných prostředků (anotace + XML) volání metody označené anotací @PostConstruct musí mít návratový typ void a být bez parametrů
35
Životní cyklus stavového beanu Opuštění stavu Method-Ready Zavolání metody anotované @Remove přechází bean do stavu Does Not Exist Kontejner se může kdykoliv rozhodnout pro tzv. pasivaci Většinou při zatížení serveru, čištění paměti Algoritmus pasivace/aktivace není specifikován (srovnej s migracemi HTTP session) Vypršení časového limitu – timeout Relace stavového beanu může být časově omezena Udává anotace @StatefulTimeout nebo prvek v ejb-jar.xml
36
Poznámka k transientním atributům Serializace v Javě nastavuje transientní atributy na jejich defaultní hodnoty primitivní čísla na 0 boolean na false reference na null V EJB tomu tak není a transientní atribut může po aktivaci nabývat libovolné hodnoty jejich hodnota by měla být nastavana v @PostActivate
37
Pasivace stavového beanu Pravidla pro hodnoty atributů stavového beanu (stav konverzace s klientem) Primitivní typy nebo serializovatelné objeky javax.ejb.SessionContext javax.jta.UserTransaction (transakce řízené mimo kontejner) javax.naming.Context (pouze pokud odkazuje na JNDI ENC) javax.persistence.EntityManager javax.persistence.EntitiyManagerFactory reference na jiné EJB reference na tovární třídy prostředků řízené kontejnerem (např. javax.sql.DataSource)
38
Pasivace stavového beanu V okamžiku, kdy se kontejner chystá pasivovat bean, volá se metoda označená @PrePasivate uzavírají se v ní otevřená připojení všechny neserializovatelné atributy, které nejsou transientní, se nastavují na null transientní atributy se ignorují Způsob uložení stavu závisí na implementaci serveru obvykle se využívá standardní serializace v Javě Kontejner hlídá timeout i ve stavu pasivace
39
Aktivace stavového beanu Jakmile klient zavolá metodu na pasivovaném beany, kontejner provádí jeho aktivaci Kontejner provádí tyto úkony: deserializace pasivovaného objektu rekonstrukce odkazu na SessionContext rekonstrukce odkazů na EJB a továrny prostředků Po těchto úkonech se volá metoda označená @PostActivate otevírají se v ní připojení uzavřená před pasivací nastavují se hodnoty do atributů, které se nulovaly
40
Systémové výjimky Kdykoliv je vyhozena systémová výjimka, kontejner zruší bean -> přechod do stavu Does Not Exist Reprezentují interní chyby Systémová výjimka je libovolná nekontrolovaná výjimka (RuntimeException), která není anotovaná @ApplicationException také kontrolovaná výjimka java.rmi.RemoteException Důsledky rollback transakce, logovací hláška, zrušení instance při pokusu klienta volat zrušený stavový bean se vyhazuje NoSuchEJBException
41
No-interface View Novinka v EJB 3.1 (Java EE 6) Vývojáři chtěli navrhovat session bean bez nutnosti psát rozhraní V EJB 3.1 se nemusí psát lokální rozhraní lokální rozhraní je tvořeno veřejnými metodami beanu třída beanu je označená @LocalBean
42
Singleton EJB (od verze EJB 3.1) Session bean, který má v aplikaci jedinou instanci Vhodné pro sdílení dat napříč aplikací srovnej s aplikačním kontextem ServletContext Uchovává stav mezi voláními Třída singletonu je označena @Singleton Může být vytvořen při startu aplikace Třída singletonu se označí @Startup
43
Singleton EJB Možnost řetězení v případě, že je důležité pořadí vytváření více singletonů @DependsOn(“SomeSingleton1”, “SomeSingleton2”) kontejner zajistí jejich vytvoření před vytvořením singletonu, který na nich závisí Poznámka: V clusterech má každý uzel vlastní singleton
44
Singleton - souběžnost Souběžný přístup k singletonu je možný a je řízen anotací @ConcurrencyManagement Souběžnost řízená kontejnerem (CMC) - default kontejner řídí souběžnost podle anotací na beanu @Lock(LockType.WRITE) – exkluzivní přístup k metodám @Lock(LockType.READ) – sdílený přístup k metodám možnost umístit na jednotlivé metody i třídu @AccessTimeout(timeout) – max. doba čekání na uvolnění Souběžnost řízená beanem (BMC) bean si řídí souběžnost sám používá prostředky Javy, případne java.util.concurrent.*
45
Životní cyklus singletonu Does Not Exist Method-Ready business method systémová výjimka (vytváření závislostních singletonů) Class.newInstance Injections @PostConstruct @PreDestroy
46
Asynchronní volání (od EJB 3.1) Volání metod na lokálním i vzdáleném rozhraní session beanu jsou obvykle synchronní (blokovaná) Často je zapotřebí asynchronní (neblokované) volání nečeká se na výsledek, např. tisk Dříve řešeno pomocí Message Driven Beans a JMS V EJB 3.1 lze metodu nebo třídu označit anotací @Asynchronous návratový typ asynchronní metody void java.util.concurrent.Future – možnost vyzvednout si výsledek později
47
Asynchronní volání - příklad
48
Analogie k session beanům Bezstavový bean prostitutka – čeká v poolu (veřejný dům) na instrukci mamá, aby obsloužila klienta klient si při opakovaných návštěvách nemůže být obvykle jist, zda bude obsloužen stejnou slečnou Stavový bean věrná manželka po svatbě (vytvoření session) se v ideálním případě až do své smrti (volání metody @Remove) věnuje pouze svému maželovi (klientovi) sdílení majetku a rozhodování (odkládání stavu a logiky klienta na server)
49
XML Deployment Descriptor Veškeré deklarace anotacemi tříd, rozhraní a metod lze analogicky provádět v tzv. XML deskriptoru Deskriptor je uložen v META-INF/ejb-jar.xml EJB modulu
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.