V voj podnikov ch aplikac na platform java p edn ka
Download
1 / 49

V VOJ PODNIKOV CH APLIKAC NA PLATFORME JAVA - PREDN KA - PowerPoint PPT Presentation


  • 205 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'V VOJ PODNIKOV CH APLIKAC NA PLATFORME JAVA - PREDN KA' - elam


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
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 4.


Vrstvy aplikace a jejich vymezen
Vrstvy aplikace a jejich vymezení PŘEDNÁŠKA

Prezentační vrstva

"Jak aplikace vypadá"

Servlety

JSP

Filtry

Business vrstva

"Co aplikace dělá"

Bezstavové EJB Beans

Stavové EJB Beany

Message Driven Beany

Perzistentní vrstva

"Co aplikace je"

JPA Entity

JMS Fronty

JMS Topiky


Enterprise java beans
Enterprise Java Beans PŘEDNÁŠKA

  • 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


Typy ejb
Typy EJB PŘEDNÁŠKA

  • 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


Ejb kontejner
EJB kontejner PŘEDNÁŠKA

  • 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


Ejb kontejner1
EJB kontejner PŘEDNÁŠKA

  • 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


Ejb kontejner2
EJB kontejner PŘEDNÁŠKA

  • 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


Ejb kontejner3
EJB kontejner PŘEDNÁŠKA

  • 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


Embedded container
Embedded container PŘEDNÁŠKA

  • 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í


Embedded container uk zka
Embedded Container - ukázka PŘEDNÁŠKA

Pro Glassfish v3 viz:

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


Rozhran
Rozhraní PŘEDNÁŠKA

  • 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


Rozhran1
Rozhraní PŘEDNÁŠKA

  • 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



T da session beanu
Třída session beanu PŘEDNÁŠKA

  • 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


Bezstavov session beany
Bezstavové session beany PŘEDNÁŠKA

  • 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)



Vol n beanu z klientsk aplikace
Volání beanu z klientské aplikace PŘEDNÁŠKA

Syntaxe globálního jména:

java:global/<app-name>/<module-name>/<bean-name>!<fully-qualified-interface-name>


Vol n beanu z jin ch komponent
Volání beanu z jiných komponent PŘEDNÁŠKA

  • Dependency injection nabízí velmi pohodlné získání reference

  • Lze ale použít i vyhledání v JNDI pomocí lookup


P stup k prom nn m prost ed
Přístup k proměnným prostředí PŘEDNÁŠKA

  • 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




Sessioncontext
SessionContext PŘEDNÁŠKA

  • 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)


Ivotn cyklus bezstavov ho beanu
Životní cyklus bezstavového beanu PŘEDNÁŠKA

systémová výjimka

Does Not Exist

Class.newInstance()

injections

@PostConstruct

@PreDestroy

Method-ReadyPool

business

method


Ivotn cyklus bezstavov ho beanu1
Životní cyklus bezstavového beanu PŘEDNÁŠKA

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


Ivotn cyklus bezstavov ho beanu2
Životní cyklus bezstavového beanu PŘEDNÁŠKA

  • 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


Stavov session beany
Stavové session beany PŘEDNÁŠKA

  • 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


Rozhran stavov ho beanu p klad
Rozhraní stavového beanu - příklad PŘEDNÁŠKA

  • 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



Stavov bean implementace
Stavový bean - implementace PŘEDNÁŠKA

  • 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)


Pou it stavov ho beanu v servletu
Použití stavového beanu v servletu PŘEDNÁŠKA

  • 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í



Uzav rac metoda @remove
Uzavírací metoda - @Remove PŘEDNÁŠKA

  • Voláním metody označené @Remove se ukončí život stavového session beanu


Ivotn cyklus stavov ho beanu
Životní cyklus stavového beanu PŘEDNÁŠKA

systémová výjimka

Does Not Exist

Class.newInstance

Injections

@PostConstruct

timeout

timeout

@PreDestroy

@PrePasivate

Method-Ready

Passivated

@PostActivate

business

method


Ivotn cyklus stavov ho beanu1
Životní cyklus stavového beanu PŘEDNÁŠKA

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


Ivotn cyklus stavov ho beanu2
Životní cyklus stavového beanu PŘEDNÁŠKA

  • 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


Pozn mka k transientn m atribut m
Poznámka k transientním atributům PŘEDNÁŠKA

  • 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


Pasivace stavov ho beanu
Pasivace stavového beanu PŘEDNÁŠKA

  • 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)


Pasivace stavov ho beanu1
Pasivace stavového beanu PŘEDNÁŠKA

  • 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


Aktivace stavov ho beanu
Aktivace stavového beanu PŘEDNÁŠKA

  • 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


Syst mov v jimky
Systémové výjimky PŘEDNÁŠKA

  • 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


No interface view
No-interface View PŘEDNÁŠKA

  • 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


Singleton ejb od verze ejb 3 1
Singleton EJB (od verze EJB 3.1) PŘEDNÁŠKA

  • 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


Singleton ejb
Singleton EJB PŘEDNÁŠKA

  • 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


Singleton soub nost
Singleton - souběžnost PŘEDNÁŠKA

  • 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.*


Ivotn cyklus singletonu
Životní cyklus singletonu PŘEDNÁŠKA

systémová výjimka

Does Not Exist

(vytváření závislostních singletonů)

Class.newInstance

Injections

@PostConstruct

@PreDestroy

Method-Ready

business method


Asynchronn vol n od ejb 3 1
Asynchronní volání (od EJB 3.1) PŘEDNÁŠKA

  • 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



Analogie k session bean m
Analogie k session beanům PŘEDNÁŠKA

  • 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)


Xml deployment descriptor
XML Deployment Descriptor PŘEDNÁŠKA

  • 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


ad