Professional Documents
Culture Documents
CS230 V11
CS230 V11
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.
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
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
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.
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
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
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
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.
7/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI
} }
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.
8/9
Naziv predavanja: SESSION BEANS I INTERCEPTORI
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