+ All Categories
Home > Documents > VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA

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

Date post: 19-Feb-2016
Category:
Upload: trang
View: 53 times
Download: 0 times
Share this document with a friend
Description:
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA. Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage. Část 4. Vrstvy aplikace a jejich vymezení. Prezentační vrstva "Jak aplikace vypadá". Servlety JSP Filtry. Business vrstva "Co aplikace dělá". Bezstavové EJB Beans - PowerPoint PPT Presentation
50
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 4.
Transcript
Page 1: VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKAZbyněk Šlajchrt http://java.vse.cz/4it447/HomePageČást 4.

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

Vrstvy aplikace a jejich vymezení

Prezentační vrstva"Jak aplikace vypadá"

Business vrstva"Co aplikace dělá"

Perzistentní vrstva"Co aplikace je"

ServletyJSPFiltry

Bezstavové EJB BeansStavové EJB BeanyMessage Driven Beany

JPA EntityJMS FrontyJMS Topiky

2

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

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

3

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

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

4

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

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

5

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

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

6

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

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

7

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

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

8

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

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í

9

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

Embedded Container - ukázka

Pro Glassfish v3 viz:http://ctpjava.blogspot.com/2009/10/unit-testing-ejbs-and-jpa-with.html

10

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

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

11

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

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

12

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

Rozhraní beanu - příklad13

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

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

14

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

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)

15

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

Bezstavový bean - příklad16

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

Volání beanu z klientské aplikace

Syntaxe globálního jména:java:global/<app-name>/<module-name>/<bean-name>!<fully-qualified-interface-name>

17

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

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

18

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

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

19

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

Příklad: Konfigurační parametr

20

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

Příklad – Konfigurace v ejb-jar.xml

21

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

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)

22

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

Životní cyklus bezstavového beanu

Does Not Exist

Method-Ready Pool

@PreDestroyClass.newInstance()injections@PostConstruct

businessmethod

systémová výjimka23

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

Ž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ů

24

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

Ž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

25

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

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

26

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

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

27

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

Stavový bean - příklad28

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

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)

29

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

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 anotacemi nebo ve

WEB-INF/web.xml – lokální rozhraní

30

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

Definice EJB v enterprise kontextu

31

Pomocí anotací:

Ve web.xml, případně ejb-ja.xml:

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

Volání stavového beanu ze servletu

32

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

Uzavírací metoda - @Remove Voláním metody označené @Remove se

ukončí život stavového session beanu

33

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

Životní cyklus stavového beanu

Does Not Exist

Method-Ready Passivated

Class.newInstanceInjections@PostConstruct

timeout@PreDestroy timeout

@PrePasivate

@PostActivate

businessmethod

systémová výjimka

34

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

Ž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

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

Ž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 <stateful-timeout> v ejb-jar.xml

36

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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řípadně java.util.concurrent.*

45

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

Životní cyklus singletonu

Does Not Exist

Method-Ready

business method

systémová výjimka

(vytváření závislostních singletonů)Class.newInstanceInjections@PostConstruct

@PreDestroy

46

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

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

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

Asynchronní volání - příklad48

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

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

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

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

50


Recommended