You are on page 1of 9

PREDMET

CS230 DISTRIBUIRANI SISTEMI Veba uz predavanje broj 11 CS230-V11

SESSION BEANS I INTERCEPTORI


Tematska jedinica Session Beans i Interceptori Predavanja Lekcija ili aktivnost U okviru lekcije dato je koji beanovi postoje i koje su im osnovne karakteristike. Prikazano je kako moe u razvojnom orkuenju da se kreira jedna session bean i kako se takav bean deploy-uje u okviru EJB3 kontejnera GlassFish. Nakon toga je prikazana i primena interceptora nad beanom I njihvova uloga u kreiranju sloenih Enterprise aplikacija. Rezultat znanja ili vetine koje student treba da dobije Nakon ovog asa student bi trebao da bude sposoban da samostalno napravi bean i da ga deploy-uje u kontejner. Takoe bi trebao da bude sposoban da kreira Interceptor nad Bean-om i da primeni neku operaciju.

Nedelja

as

11

Copyright 2010 UNIVERZITET METROPOLITAN, Beograd. Sva prava zadrana. Bez prethodne pismene dozvole od strane Univerziteta METROPOLITAN zabranjena je reprodukcija, transfer, distribucija ili memorisanje nekog dela ili itavih sadraja ovog dokumenta., kopiranjem, snimanjem, elektronskim putem, skeniranjem ili na bilo koji drugi nain. Copyright 2010 BELGRADE METROPOLITAN UNIVERSITY. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, without the prior written permission of Belgrade Metropolitan University.

Oktobar, 2010.

CS230 Distribuirani Sistemi


Veba uz predavanje br. 11

SADRAJ
ta emo nauiti? .................................................................................................................................... 3 Zato ovo uimo? .................................................................................................................................... 3 Kada se koristiti Beans-e......................................................................................................................... 3 Tipovi EJB3 Beanova .............................................................................................................................. 3 Naini pristupa Bean-ovima..................................................................................................................... 4 Parametri ................................................................................................................................................. 4 Kreiranje projekta .................................................................................................................................... 5 Kreiranje Beansa ..................................................................................................................................... 5 EJB metoda ............................................................................................................................................. 5 Bean Klasa .............................................................................................................................................. 5 Kreiranje klijenta ...................................................................................................................................... 6 Veza sa Bean-som .................................................................................................................................. 6 Kod za klijent ........................................................................................................................................... 6 Pokretanje................................................................................................................................................ 6 Interceptor................................................................................................................................................ 7 Klasa koja presree ................................................................................................................................. 7 Dodavanje interceptera u Bean ............................................................................................................... 8 Invocation Context................................................................................................................................... 8 Primena vie Inteceptora......................................................................................................................... 8 Rekapitulacija lekcije ............................................................................................................................... 9 Kljune rei: ............................................................................................................................................. 9

2/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI

CS230 Distribuirani Sistemi


Veba uz predavanje br. 11

Veba uz predavanje br. 11

Session Beans i Interceptori


ta emo nauiti?
U ovoj lekciji emo se upoznati sa osnovnim pojmom EJB3 Beana i videti koji tipovi Beana postoje po specifikaciji EJB3. Prikazae se jedan jednostavan program koji se sastoji od dve metode. Ovaj program e predstavljati Bean i bie puten u rad u okviru Bean kontejnera GlassFish. U ovoj lekciji e se pokazati i upotreba Interceptora. Dati primer e biti proiren sa inteceptorom.

Zato ovo uimo?


Zbog poveane razmene podataka izmeu sistema i zbog poveanog broja parametara koji se prate u okviru nekog sistema sve vie imamo enterprise sisteme. Iz tog razlog je bitno da umemo da kreiramo enterpise applikacije. Poslednja aktuelna implementacija Enterprise JAVE je EJB3. U okviru EJB3 su predstavljene tehnike koje omoguavaju jednostavniji dizajn sloenih enterprise aplikacija.

Kada se koristiti Beans-e


Enterprise re oznaava velike i sloene sisteme. Enterprise Java Beans-i su kreirani upravo za takve sisteme. Kreirati veliki enterprise sistem od standardne jave predstavlja veliki problem jer mnogi problemi koji ne postoje kod desktop i malih web aplikacija su kod enterprise sistema od kljunog znaaja. U nekoliko najznaajnijih moemo ubrojiti: mogunost velikog porasta broja klijenata, rad sa ogromnim koliinama podataka, aplikacija mora da se izvrava na veem broju servera, vie korisnika pristupa istim podacima, potreba za pouzdanim transakcijama, postojanje veeg broja klijentskih programa koji pristupaju serverskom delu. Potrebna skalabilnost U distributivnim okruenjima Vienitni pristup podacima Pouzdane transakcije Vie razliitih klijenata

Tipovi EJB3 Beanova


Session Bean o Stateful o Stateless Message-Driven Bean

Session Bean se tako zove jer je zaduen za poziv iz sesije, to znai da e isti poziv za dva razliita klijenta kreirati dva razliita Session beana i svaki e opsluiti svog klijenta. Ovim postupkom se uvode mehanizmi za obradu velikog broja klijenata. Jedan Session Bean moe biti stateful to znai da postoji due tokom sesije, a moe biti i stateless to znai da u sebi ne sadri ni jedan podatak koji treba da postoji due od jednog poziva. Stateless Beani su poeljniji u velikim aplikacijama jer ne zauzimaju prostor i brzo se obrauju. Kad god je mogue treba teiti stateless bean-ovima. Naravno u situacijama kada neki podatak treba da ima dui ivotni vek, dui od jednog poziva, treba koristiti stateful bean-e. Svi session beans-i podrazumevaju neku vrstu sinhrone komunikacije. Asinhrona komunikacija se postie upotrebom Message-Driven Bean-a. Ovi Bean-ovi oslukuju da li je dolo do pojavljivanja 3/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI

CS230 Distribuirani Sistemi


Veba uz predavanje br. 11

poruke i onda odgovaraju. Odnosno obrade i poalju odgovor na poruku. Ovi Beanovi su uvek stateless. Poruka moe doi od drugog Bean-a, klijenta tog servera ili neke druge aplikacije.

Naini pristupa Bean-ovima


Postoje 3 naina pristupa Beanovima Remote (@Remote) o Sa druge maini i/ili druge JVM o Klijent, Web Component ili drugi Bean Local (@Locale) o Samo sa iste JVM o Obino za uvezane klase Web Service (@WebMethod) o XML standardizovana komunikacija o Zgodno za razliite platforme o Usluge sistema

Postoje tri naina za pristup Beanovima. Remote, Local i Web Service. Svaki od ovih naina je zaduen za jedan nain upotrebe Bean-a. Ako je potrebno da se pristup Beanu ogranii samo na lokalne pozive, odnosno samo na pozive iz iste JVM onda e se koristiti interface koji se anotacijom obelei kao @Locale. Ovo se koristi samo ako je potrebno odrati neki nivo security-a (podatak nesme da napusti server) ili, ee, kada imamo uvezane klase koje obino rade na istoj maini. Drugi nain je Remote i on je najei u Enterprise sistemima. Interface koji je anotacijom definisan kao @Remote obezbeuje da mu se moe pristupiti iz iste JVM ali i iz druge JVM. Ovim se postie laka distribucija koda po potrebi. Nije neophodno da dva bean-a budu u istoj JVM. Fizika implementacija @Remote pristupa je preko RMI mehanizma, ali je taj mehanizam za programera transparentan i upotrebom EJB3 programer je osloboen voenju rauna o RMI komunikaciji. Web Service nain pristupa je sve popularniji. Ovakav nain pristupa omoguava komunikaciju izmeu java Beana i ne Java aplikaicje, klijenata i starijih sistema. Web Service nain pristupa ne moe da se primeni na Mesage-Driven bean. Svaka public metoda Beana se tumai kao Web Service method. Dodatno moe ponaanje Web Service metode da se izmeni upotrebom @WebMethod anotacije.

Parametri
Local pozivi su po referenci Local pozivi bi trebalo da imaju finije metode (metode sa manjim brojem parametara, posebne metode za svaki posao) Remote i Web Service pozivi su po vrednosti Remote i Web Service pozivi treba da imaju krupnije metode (metode sa veim brojem parametara, metode koje zavravaju vie stvari jednim pozivom)

Pozivi metoda u lokalu i udaljeni pozivi se razlikuju. Lokalni pozivi se tretiraju kao i bilo koji drugi poziv iz Jave. Dakle objekat koji se poalje se tretira kao objekat i u metodu se alje samo njegova referenca. To znai da bilo koja izmena na objektu e biti i na strani koja je pozvala metod i u metodi koja ga obrauje. Za razliku od ovakvog naina rada kod Remote i Web Service poziva objekti se alju u metode kao kopije. Tako da bilo kakva izmena nad objektom nee uticati na originalni objekat i obrnuto bilo kakva promena u originalnom objektu nee uticati na metodu koja je pozvana pre te izmene. Razlika izmeu lokalnog i udaljenog poziva se razlikuje i po brzini komunikacije, tako da lokalni poziv se obrauje isto kao i poziv izmeu dve klase u obinom Java programu dok remote poziv ili Web Service poziv traju due jer mora da se izvri komunikacija koja je uvek dosta spora od obinog poziva. Lokalni poziv se generalno tretira kao i bilo koji drugi poziv izmeu klasa u Java aplikacijama, samim tim treba potovati sva pravila kao kod kreiranja Java aplikacija to znai pozivanje pojedinanih metoda koje rade jedan ciljani posao. 4/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI

CS230 Distribuirani Sistemi


Veba uz predavanje br. 11

Kod Remote i Web Service poziva, zbog due komunikacije i same prirode poziva bolje je da postoje pozivi koji imaju vei broj parametara ali zato obavljaju vie logiki pozvezanih operacija u jednom pozivu.

Kreiranje projekta
NetBeans je dobar alat za kreiranje Enterprise projekata. Net Beans ima poseban modul za rad sa Enterprise projektima. Tu razlikujemo nekoliko potencijalnih projekata. Enterprise Application projekti (sa postojeim kodom i iz poetka), slue za grupisanje vie razliitih projekata. Na primer EJB Moduli, Web applikacija i neka Swing aplikacija. Sve ovo moe biti objedinjeno jedom Enterprise aplikaciom. Za kreiranje Biznis sloja sa EJB3 Binovima se korisit EJB Module tip projekta.

Kreiranje Beansa
Net beans alat nam omoguava kreiranje EJB3 Bean-a tako to desnim tasterom kliknemo na paket u koji elimo da kreiramo bean i onda odaberemo opciju New... -> Session Bean... Odabirom ove opcije pojavljuje se dijalog u kome se daje ime Bean-u. Ime obino treba da ima naziv i na kraju da pie Bean. U ovom dijalogu moe da se promeni ili postavi i naziv paketa e se kreirati Bean. Postoji odabir da li je to Stateless ili Stateful Bean. Na kraju dijaloga moe da se odaberu koji interface da se automatski generiu.

EJB metoda
Kada se kreira EJB bean on je prazan odnosno ne poseduje ni jedan podatak niti neku metodu. Metode i podatke moemo ispisati kao to to radimo u obinoj Java klasi. Ovakav nain pisanja metoda u EJB3 Bean-sima ne dodaje te metode automatski i u Remote i Local interface ve moraju posle runo da se dopiu. Mogue je neku metodu uvesti u Bean tako da se ona dopie i u interfaceima, oba ili samo u neki od nih. To se radi tako to se klikne desnim tasterom mia bilo gde u kodu Bean-a i onda se odabere opcija EJB Methods... Dijalog koji se pojavi omoguava upis naziva metode, definisanja tipa podatka koji metod vraa kao i definisanje parametara koji metod prima. Naravno tu je i ve pomenuta mogunost biranja preko kojih interface e biti omoguen pristup ovoj metodi. Nakon to se metoda uvede u kod na ovaj nain, potrebno je ispisati telo metode odnosno napisati kod koji obavlja odreenu operaciju.

Bean Klasa
Kreiran je biznis Bean koji predstavlja kovertor valute u din i obrnuto. Obe metode su uvedene kroz alat odabirom opcije Both tako da se poziv na njih vidi i u Local i na Remote interfaceu. U metodama je dopisan kod koji obavlja konkretnu konverziju.

@Stateless public class KoverterBeanBean implements Koverter, KoverterBeanLocal { private double odnos = 80d; public double evroUdin(double evro) { return evro*odnos; } public double dinUeuro(double din) { return din/odnos; } } 5/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI

CS230 Distribuirani Sistemi


Veba uz predavanje br. 11

Kreiranje klijenta
Sledei korak je da se krera klijet koj e preko Remote interface-a pristupati biznis beanu koverter. Kreiran je novi projekat KonvertorApp u kojem biti napisan neki gui za rad sa konverterom. Ovo je novi projekat nova aplikacija nezavisna od samog Beana. Ova aplikacija moe da se pokree i u drugoj JVM, zato iz nje pristupamo Beanu preko Remote interface-a.

Veza sa Bean-som
Klijent mora da bude povezan sa Bean-som koga koristi. Umesto da se kreiraju instance, samo se pozove bean. To se najjednostavnije radi tako to se u kodu desnim tasterom odabere opcija Enterprise Resources -> Call Enetrprise Bean. Pojavie se dijalog u kome biramo Enterprise projekat u okviru koga se nalazi eljeni Bean. Na ovaj nain imamo pristup Beanu. Ostaje jo da napiemo kod koji e raditi sa ovim Bean-om. @EJB private static Koverter koverter;

Kod za klijent
try { InitialContext ic = new InitialContext(); koverter = (Koverter) ic.lookup(Koverter.class.getName()); } catch (NamingException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } String evri = JOptionPane.showInputDialog("Unesi koliinu u Evrima"); double e = Double.parseDouble(evri); System.out.println("e = " + e); double din = 0; if (koverter != null) { din = koverter.evroUdin(e); } System.out.println("din = " + din); JOptionPane.showMessageDialog(null, "U dinarima to je:"+ din);

Pokretanje
Desni taster na projekat EJB modula i Deploy Run Client application EJB3 Beans-i moraju da se pokreu u okviru EJB kontejnera koji su kompatibilni sa EJB3 specifikaciom. Etalonski kontejner za EJB3 je Open Source projekat GlassFish. Ovaj kontejner je u kratkom roku postao veoma popularan i rairen. Izmeu ostalog isporuuje se sa verzijom 6 Net Beansa. Kako se startuje EJB modul? Svaki Bean mora da bude upravljan od strane EJB kontejnera i da bi to postigli moramo nae Beanove da deploy-ujemo u kontejner. Najjednostavniji nain da to uradimo je desni klik na projekat i opcija Deploy. Time emo smestiti kreiran Bean u kontejner. Kada je Bean u kontejneru moe da se startuje aplikacija. Klijentska aplikacija je obina aplikacija i moe da se startuje isto kao to startujemo aplikacije. Za razliku od obinih aplikacije ova e startovanjem biti uvuena u kontejner.

6/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI

CS230 Distribuirani Sistemi


Veba uz predavanje br. 11

Interceptor
Nain implementacije dekoratera odnosno nain implementacije AOP-a Klasa mora da ima prazan public konstruktor Primenjuje se za provere verifikacije implementacije biznis pravila upisivanje podataka u logove obezebeivanje dodatnih informacija

Intercepteri su jedan od specifinosti EJB3 tehnologije, i oni prestavljaju jedan sistem implementacije AOP-a (Aspect Oriented Programing). Intercepteri na nain na koji su implementirani u EJB3 predstavljaju jedan od najjednostavnijih mehanizama za elegantno implementiranje biznis pravila i sistema manipulacije rolama. Tok obrade podataka e biti onakav kakav je predvien bez upotrebe Interceptora a intercepter e presretnuti poziv i izvriti proveru/operaciju pre nego to dozvoli dalji rad. Mogue je pomou interceptera presresti bilo koji poziv i dodati nove provere, pravila, upise u log, itd... Razna biznis pravila, provere, upise u logove, itd... je naravno mogue implementirati i kroz biznis sloj ali je tada neuporedivo tee menjati kod i dodavati nove opcije. Ova mogunost EJB3 obezbeuje lako dodavanje i odravanje biznis pravila.

Klasa koja presree


Klasa koje predstavlja intercepter treba da ima metodu koja je anotacijama obeleena sa @AroundInvoke. Ova anotacija se startuje nad svakom metodom koja je obeleena ili nad svim metodama klase ako je cela klasa obeleena da se poseuje nekim intercepterom. Parametar interceptera mora da bude klasa tipa InvocationContext u kojoj se nalaze sve informacije o metodi koja se presree. Sve infromacije su parametri koji se primaju, naziv metode, parametar koji je rezultat rada. Pomou metode getParameters moemo da uzmemo niz parametara koji su prosleeni metodi, i nad njima moemo da izvrimo bilo kakvu intervenciju kao to je to uraeno u ovom primeru. U datom primeru je korigovana vrednost parametra i onda je taj parametar setovan nazad u metodu. Putanje metode da se izvri do kraja se postie pozivom metode proceed. public class Presretac { @AroundInvoke public Object presretacica(InvocationContext ctx) { try { Object[] broj = ctx.getParameters(); Double evri = (Double) broj[0]; System.out.println("evri = " + evri); if (evri > 1000d) { evri *= 1.05; broj[0] = evri; ctx.setParameters(broj); } return ctx.proceed(); } catch (Exception ex) { Logger.getLogger(Presretac.class.getName()).log(Level.SEV ERE, null, ex); return null; }

7/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI

CS230 Distribuirani Sistemi


Veba uz predavanje br. 11

} }

Dodavanje interceptera u Bean


Ako nad nekom metodom treba da se primeni odgovarajui Intercepter onda se postavi anotacija @Interceptors i u zagradi se stavi koji interceptor treba primeniti nad tom metodom. U zagradi mogu da se stave i vei broj interceptora ako je potrebno da vie interceptora se primeni nad datom metodom. @Interceptors(yu.edu.fit.Presretac.class) public double evroUdin(double evro) { return evro*odnos; }

Invocation Context
public interface InvocationContext { public Object getTarget(); public Method getMethod(); public Object[] getParameters(); public void setParameters(Object[] params); public java.util.Map<String, Object> getContextData(); public Object proceed() throws Exception; } InvocationContext klasa se koristi za pristupanje Beanu preko Interceptora. Ova klasa sadri itav niz korisnih metoda koje mogu da se iskoriste kako bi se kreirao odgovarajui intercepter. Metoda getTarget vraa instancu Beana nad kojim se primenjuje Interceptor. Metoda getMethod vraa metodu nad kojom je intercepter pozvan u datom trenutku Metoda getParameters vraa niz vrednosti svih parametara koje je metoda primila u datom trenutku Metoda setParameters omoguava da postavimo nove vrednosti za parametre koje metoda prima. Metoda proceed puta sledei Interceptor u nizu da se startuje odnosno ako je u pitanju jedini ili poslednji interceptor onda e pozvati samu Bean metodu da se izvri. Ako se interceptor izvrava nad metodom koja je izloena kao web service onda metoda getContextData vraa mapu koja predstavlja JAX-WS Message Context, tog Web service poziva.

Primena vie Inteceptora


Interceptori mogu da se postave nad klasom i onda vae za sve metode te klase. Ponekad je potrebno da se nekek metode klase izuzmu iz ovog pravila. To se postie potavljanjem anotacije iznad metode koja treba biti izuzeta od presretanja. Anotacija je @ExcludeClassInterceptors. Ova oznaka iskljuuje upotrebu inteceptora koji je definisan za celu klasu nad tom metodom, ali ne iskljuuje mogunost da se neki drugi interceptor primeni direktno nad tom metodom, to je i prikazano u primeru. @Stateless @Interceptors(yu.edu.fit.BigInteceptor.class) public class MyBean ... { ...

8/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI

CS230 Distribuirani Sistemi


Veba uz predavanje br. 11

@Interceptors(yu.edu.fit.MyInterceptor.class) @ExcludeClassInterceptors public void someMethod() { } }

Rekapitulacija lekcije
U ovoj lekciji smo se upoznatli sa osnovnim pojmom EJB3 Beana i videli koji tipovi Beana postoje po specifikaciji EJB3. Prikazan je jedan jednostavan program koji se sastoji od dve metode. Ovaj program predstavlja Bean i puten je u rad u okviru Bean kontejnera GlassFish. U ovoj lekciji je prikazana i upotreba Interceptora. Dati primer Beana je proiren sa inteceptorom.

Kljune rei:
Remote, Locale, Web Service, Interceptor, Bean, GlassFish, EJB3, Stateless, InvocationContext, Message-Driven, XML, WebMethod, AOP, AroundInvoke, presreta, Stateful,

9/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI

You might also like