masarykova univerzita fakulta informatiky

82
MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY •P <?A %, \J/ & Technologie a nástroje vývoje Java EE aplikací DIPLOMOVÁ PRÁCE Stanislav Hybášek Brno, jaro 2007

Upload: vlcik

Post on 18-Nov-2014

1.179 views

Category:

Documents


4 download

TRANSCRIPT

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY

P

, pomoc kterho definujeme potomka a jeho rozic atributy. Tento pstup spov ve vytvoen doplujc ta bulky, kter je pouvna pro nov atributy definovan potomkem. Pomoc anotac doclme tohoto mapovn pomrn snadno. Ukame si to nzorn na pkladu. @Entity @Table(name="SIGNPOST") @Inheritance(strategy=InheritanceType.JOINED) p u b l i c c l a s s S i g n P o s t implements S e r i a l i z a b l e {

Tmto zpisem mapujeme tdu S i g n P o s t na tabulku SIGNPOST. Vim nte si strategie definovan jako I n h e r i t a n c e T y p e . JOINED (parametr s t r a t e g y anotace @ I n h e r i t a n c e ) . Toto mapovn nm dv monost namapovat potomka zkladnm zpsobem, kter ji znme. @Entity @Table(name="SIGNPOST_SHOP") public c l a s s SignPostShop extends SignPost {

Objekt tdy S i g n P o s t S h o p se po proveden operace perzistence ulo do tabulek SIGNPOST a S IGNPOST_SHOP piem zznamy budou spojeny 47

4. HIBERNATE A A N O T A C E

primrnm klem (primrn kl tabulky SIGNPOST_SHOP je zrove ciz kl do tabulky SI GNP OS T). Pi pouit tohoto zpsobu jsme schopni roziovat aplikaci, resp. hierar chii objekt o dal potomky, ani bychom museli jakkoliv mnit strukturu pvodn databzov tabulky Strategie mapovn konkrtn tdy hierarchie na tabulku Jak napovd ji samotn nzev, tento zpsob mapovn polymorfizmu spov v tvorb nov tabulky na kadou implementaci definovanho roz hran. Vyuijeme-li tto strategie pi mapovn na objektov struktury, Hibernate zajiuje perzistenci stejnm zpsobem, kterho bychom doshli pouitm elementu < u n i o n - s u b c l a s s > v XML deklaraci. Tento pstup jist najde sv vyuit, nicmn nen tak rozen, jako pedchzejc dv strategie, kter jsme si popsali. 4.4 Zvr

V prbhu tto kapitoly jsme se seznmili s relnm pouitm anotac v praxi. Novm trendem vvoje webovch aplikac je minimalizace potu konfiguranch soubor. Pouitm mapovn pomoc anotac jsme dok zali, krom snen potu potebnch XML soubor, zvit pehlednost a usnadnit orientaci v perzistennm procesu. Pro zjitn zpsobu perzis tence dan entity jsme toti ueteni od hledn jeho deklarac a otevrn dalch soubor. Mnoina anotac, kter jsme si pedstavili, bohat pokrv poteby pi vvoji stedn velkho systmu. Uvedli jsme si i nkter speciln roz en standardnch anotac, jejich autory jsou programtoi tmu Hibernate. Pesto existuje mnoho dalch roziujcch anotac a specilnch monost, na jejich pokryt nemme v tto prci prostor, proto tenm se zjmem o prohlouben znalosti Hibernate anotac doporuujeme zejmna referenn pruku[3] publikovanou na strnkch Hibernate, kter poslouila i jako zdroj informac pro tuto kapitolu.

48

Kapitola 5

Maven 2Maven je nstroj umoujc jednoduchou sprvu projektu. Maven definuje standardn strukturu projektu a vykonv nejen funkcionalitu sestaven aplikace, automatizaci spoutn test i nasazen aplikace, ale i generovn report o postupu vvoje i sestaven webovch strnek projektu. Maven 2 pedstavuje dal logick krok v systmech starajcch se o management projektu. Podvme-li se na zpsoby, kter byly - a doposud jsou - vyuvny v minulosti, uvdomme si, e zkladem tomuto typu nstroj byl program Make, kter usnadoval peklad aplikace. Dalm krokem pro automatizovan peklad a sestavovn aplikac byl projekt Ant1, kter se dodnes t velkmu zjmu a je rozen v mnoha vvojovch komunitch. Projekt Maven l 2 piel s revolun mylenkou uchovvn knihoven ve veejnch a loklnch schovnch (repozitory), co dovoluje dal distribuci projektu bez knihoven, kter jsou v projektu vyuvny. Maven pedstavil koncept objektovho modelu projektu (projed object model - POM), kter vy chzel z existence jedinho souboru (project.xml) definujcho cel projekt. Rozdly mezi pouitm technologie Ant a Maven 1 nebyly vak zas a tak velk, neboMaven dovoloval tvorbu souboru maven.xml s definicemi cl obdobn struktury, kter byla podporovna nstrojem Ant. Maven 2 je postaven ist na bzi POM. Tzn. projekt je definovn jedi nm souborem (pom.xml) a veker informace o zpsobu prce s projektem jsou uchovvny v tomto souboru formou definic plugin. Maven 2 bv velmi asto oznaovn jako systm pro spoutn plugin", nebo kad maven pkaz" vyvol sputn definovanho plugin a vykonn kon definovanch tmto pluginem. Z tohoto dvodu vznik poteba konfigurace nkterch plugin v pom.xml.

1. http://ant.apache.org/ 2. http://maven.apache.Org/maven-l.x/

49

5. MAYEN 2

V nsledujc ukzce mete vidt zkladn strukturu Maven 2 konfigu ranho souboru projektu - pom.xml:

< p r o j e c t xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2 001/XMLSenema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 cz.morosystems.thesis TestApp jar l.0-SNAPSHOT Testovaci projekt http://adresa.projektu junit junit 3 . 8 . K / v e r s i o n > test Detailn strukturu pom.xml nabz pmo strnky projektu[l], konkrtn http://maven.apache.org/pom.html. Krom zmnnch webovch strnek projektu doporuujeme tenovi se zjmem o technologii Maven 2 publikaci Better Builds with Maven[9]. 5.1 Instalace

Prvnm krokem pro vyuit nstroje Maven pro sprvu projekt je jeho instalace v loklnm prosted. Jeliko jde o open-source projekt, spustiteln verze software je irok veejnosti k dispozici pmo na strnkch projektu[l]. Po zvolen umstn a rozbalen aplikace zbv pouze doporuen krok pidn adrese se spustitelnmi soubory ($ {MAVEN_HOME} / b i n ) do systmovch cest. Tato akce usnaduje spoutn zkladnho pkazu mvn kdekoliv v systmu. Po prvnm sputn pkazu mvn se v systmu vytvo speciln ad res, ten je typicky umstn v home adresi" pihlenho uivatele 50

5. MAVEN 2

({home p r i h l s e n h o u i v a t e l e } / .m2), a v nm soubor vyuvan k nastaven specifickch loklnch atribut (settings.xml)a adres vyuvan jako lokln repozitory ( r e p o s i t o r y ) . 5.2 Nastaven

Jeliko maven m podporovat snadn vvoj aplikac, je nezbytn, aby byl pouiteln v ppad tmovho vvoje. Ve chvli, kdy definujeme konfigu raci jednotlivch plugin (nap. pouit webovho kontejneru) v centrl nm souboru pom.xml, kter mus bt dle svho zamen v ppad pouit nkterho verzovacho systmu3 umstn v repozitory, potebujeme mt mo nost, jak ovlivnit nkter nastaven v zvislosti na pouitm prosted. K doclen dosazen platformov zvislch nastaven do projektu m eme vyut v pom.xml (ale i kdekoliv jinde, jak si ukeme ne) promn nch, kter jsou pi zpracovvn nahrazeny odpovdajcmi hodnotami. Promnn m tvar $ { k l . promnn} a jak jsme si ji naznaili, me bt vyuita v libovolnm konfiguranm souboru aplikace i v samotnm pom.xml. Jako pklad si uveme obsah konfiguranho verzovanho sou boru conf i g . p r o p e r t i e s , kter je v aplikaci umstn v adresi /src/main/resources/ a je vyuvn pro tvorbu aplikace a bh aplikace: hibernate.connection.username=${db.connection.username} hibernate.connection.password=${db.connection.password} mail.smtp.host=${mail.smtp.host}

Abychom mohli vyut nahrazovn promnnch u jednotlivch konfi guranch soubor, musme v pom.xml oznait sloku obsahujc dan zdroje tak, jak je naznaeno v nsledujc ukzce: 3. verzovac systm umouje sprvu verz projektu. Nejrozenjmi nstroji tohoto typu jsou CVS - http://www.nongnu.org/cvs/ a subversion - http://subversion.tigris.org/

51

5 MAYEN 2 .

true src/main/resources true src/test/resources Tmto nastavenm definujeme, e nahrazen parametr m bt prove deno ve vech standardnch zdrojch aplikace a zdrojch uitch pro testo vn. Existuje nkolik zpsob, jak nakonfigurovat sprvn obsah pouitch promnnch, my si ukeme nejpouvanj monosti. definice promnnch pi voln pkazu mvn - promnnou meme definovat pomoc pepnae ,,-D", nahrazen ve uvedench poui tch promnnch by tedy vypadalo nsledovn: mvn i n s t a l l " - D d b . c o n n e c t i o n . u s e r n a m e = s p o r t " "-Ddb.connection.password=sport" "-Dmail.stmp.host=smtp.netlife.cz" pouit dodatenho souboru definujcho promnn pro dan pro jekt - pro uchovn hodnot pouitch promnnch meme pout properties" soubor, kter umstme v nejvy rovni projektu (stejn umstn jako pom.xml) a uinme jej neverzovanm". Tento pstup je pouit i u doprovodn vzorov aplikace, n soubor se jmenuje application.proper ties a abychom jej mohli vyut, musme jej definovat v pom.xml: 52

5 MAYEN 2 . application.properties Soubor application.properties sm o sob je standardnm properties" souborem: db.connection.username=sport db.connection.password=sport mail.smtp.host=smtp.netlife.cz definice promnnch v uivatelskm konfiguranm souboru settings.xml. V kontextu tohoto souboru se musme zmnit o maven profilech, pro toe v souboru settings.xml je lenn zaloeno prv na profilech. V kadm profilu meme definovat rzn promnn, i zdroje a volbu profilu provdme b u implicitnm nastavenm, nebo pouitm pe pnae ,,-P". Struktura souboru settings.xml odpovdajc ve pouitm promn nm by vypadala nsledovn: sportportal sport sport

53

5. MAVEN 2

smtp.netlife.cz sportportal vyuit globlnho konfiguranho souboru settings.xml. Jde o tent zpsob definovn promnnch, jako jsme si uvedli v pedchozm p pad, pouze platnost nen omezena na jednoho uivatele. Soubor se nachzv{instalan adres Maven}/conf/settings.xml. Zkladn pkazy

5.3

Maven definuje zkladn fze procesu managementu aplikace, kterm od povdaj i zkladn pkazy, kter nabz. Nsledujc pehled pokrv nejpo uvanj fze ivotnho cyklu" definovanho sprvou nstrojem Maven. 1. validace - mvn validate - validace, zda jsou vechny definice v pro jektu sprvn (nap. sprvn utvoen pom.xml) a zda jsou vechny definovan zvislosti dostupn. peklad - mvn compile - peklad zdrojovch kd aplikace. Defaultnm umstnm vech vstup produkovanch nstrojem Maven je adres t a r g e t v nejvy rovni projektu. sputn test - mvn test - sputn test umstnch v adresi ure nm pro testy. sestaven aplikace - mvn package - sestaven clovho distribunho formtu. Mezi nejastji pouvan formty pat jar (standardn Java aplikace) a war (webov aplikace). integran testy - mvn integration-test - sestaven aplikace a vystaven aplikace do prosted, kter je v pom.xml definovno pro integran testy. 54

2.

3.

4.

5.

5. MAYEN 2

6.

oven validity sestaven aplikace -mvn verify - oven sestavenho distribunho balku. instalace do repozitory - mvn install - sestaven aplikace a jej nahrn do lokln repozitory. Tento proces je vhodn zejmna pi pouit aplikace jako zvislosti v jinm projektu. nasazen aplikace - mvn deploy - nasazen sestaven aplikace do defi novanho prosted.

7.

8.

Kad fze, v poad, v jakm jsme si je uvedli, zvis na fzi pedchoz. V praxi to znamen, e pi voln mvn package mus nejprve probhnout peklad aplikace a sputn definovanch test. Mezi zkladn pkazy se jet ad nsledujc dv volby, kter nebylo mon spojit s dnou fz. mvn clean - smazn vech vstup generovanch pluginy systmu Maven. mvn site - vygenerovn webovch strnek projektu.

Toto byl vet tch nejznmjch fz, samotn cyklus obsahuje jet doplujc fze jimi jsou zejmna rozdlen nkterch fz na pre-ze a pos-fze. 5.4 Struktura

Maven definuje zkladn strukturu aplikace, kterou defaultn pedpokld a kterou doporuuje pouvat. Dodrovat standardn strukturu nen po vinnost, umstn zdrojovch adres se d nastavit pomoc elementu < b u i I d / > v pom.xml, nicmn je vhodn na nabzenou strukturu projekty pevst a dodrovat ji, protoe pi pouvn Maven 2 jakoto nstroje za jiujcho sprvu managementu naich projekt, budeme mt vechny nae projekty stejn vystavn a budeme moci pln vyut nabzench vhod, jakmi jsou napklad generovn kostry novho projektu. Z tchto (a demonstativnch) dvod je i nae vzorov aplikace vysta vna na struktue definovan standardem Maven 2. Umstn zdrojov kd aplikace se standardn pedpokld v adre si s r c / m a i n / Java, umstn konfiguranch soubor a jinch zdroj je s r c / m a i n / r e s o u r c e s . Stejn pouit pedpokld i testovac adres, 55

5. MAVEN 2

s r c / t e s t . U webovch aplikac je nezbytnou soust adres obsahu jc kontext standardn webov aplikace napsan v Jv. Tomuto adresi odpovd lokace s r c / m a i n / w e b a p p . Ve vyjmenovan struktura je zachycen i na nsledujcm nhledu struktury kostry typick webov aplikace spravovan nstrojem Maven 2, v naem ppad struktury vzorov aplikace, Sportovnho portlu. sportportal | src | | -- main I I I Java | | | resources | | ' webapp | ' test | | java | '-- resources |-- application.properties '-- pom.xml 5.5 Zvislosti

Kad netriviln projekt, zejmna webov aplikace, zvis na pouit ne malho potu knihoven tetch stran. Maven, jak jsme si ekli v vodnch odstavcch tto kapitoly, piel s revolunm eenm distribuce knihoven pomoc veejnch schoven (repozitory). Principem tto mylenky je zanesen poadovan zvislosti v objekto vm modelu aplikace (pom.xml). Nstroj Maven v prvn fz cyklu spoutn pkaz (viz. kapitola 5.3) zjist, zda m v lokln repozitory vechny po adovan zvislosti. Pokud se nkter poadovan knihovna v repozitory nevyskytuje, zajist jej sthnut a instalaci do lokln schovny. Tmto zp sobem si Maven vytv vlastn repozitory, take pi dalm voln nkterho z pkaz nstroje Maven je pouita knihovna umstna na loklnm disku. Nsledujc fragment pevzat z pom.xml na vzorov aplikace nzorn ukazuje zpsob, jakm jsou zvislosti definovny. springtramework

56

5 MAYEN 2 . spring 2.0-m3 Umstn jednotlivch knihoven aji v lokln i veejn repozitory je dno specifikovanmi atributy zvislosti. Pro tento uveden ppad by byla knihovna umstna v nsledujc struktue schovny: /springframework/spring/2.0-m3/spring-2.0-m3.jar Dal usnadnn definovn zvislost na knihovnch pin rzn pluginy jednotlivch vvojovch prosted, kter tmto zpsobem nabz i kli kat nstroje" uren pro hledn a pidvn knihoven do projektu. 5.5.1 Poteba nejnovj verze knihovny Ve popsan een nm nemus vdy vyhovovat, protoe nkdy pracu jeme s projekty, jej vvoj je aktuln zleitost a knihovny s novmi ver zemi jsou publikovny pomrn asto. Pro takov ppad se nm nabz po uit oznaen verze dan zvislosti jako SNAPSHOT". Toto klov slovo zajiuje, e se Maven pokus vdy vyhledat aktulnj verzi knihovny, ne je ta, kterou disponuje v lokln repozitory. 5.5.2 Sprva schoven Maven 2 m v sob zabudovanou podporu standardn repozitory: http://repol.maven.org/maven2/ Protoe jde ale o standardn repozitory, neme pokrvat poadavky vech programtorskch komunit vude po svt. Je napklad tm ne mon dostat njak vlastn framework do tto repozitory. Z tohoto dvodu vznik mnoho dalch schoven nabzejcch dal knihovny. Mnoho firem a komunit vyuv monosti definice vlastnch, internch schoven se svmi projekty. Ve chvli, kdy nm vznikaj nov schovny, potebujeme i zpsob, jak ct Mavenu, e m tyto schovny prohledvat. K tomuto elu slou ji zmiovan konfiguran soubor settings.xml. Zanesen nov repozitory je snadnou zleitost: 57

5. MAVEN 2

sportportal java.net http://download.java.net/maven/K/url> legacy sportportal Poznmka k uveden repozitory O repozitory uveden v pedchozm pklad si eknme, e e doposud velmi paliv problm s knihovnami podlhajcmi licennm ochrannm podmnkm. Tento problm se tkal zejmna nkterch z dlny firmy Sun Microsystems, kter se tmto krokem uvolnil k distribuci takovch kniho ven.

5.6

Pluginy

Jak jsme si ji ekli dve, technologie Maven 2 je postavena na spoutn plugin. Veker pkazy, tedy i ty zkladn, jsou ve skutenosti napro gramovan pluginy, kter Maven spout. Pi prvnm sputn jakhokoliv pkazu meme tedy pozorovat, e Maven stahuje knihovny, kter sm potebuje k proveden poadovanho pkazu. Existuje mnoho standardnch i rozench plugin. Pro pehled zklad nch plugin si uveme odkaz na kapitolu obsahujc souhrn standardnch podporovanch plugin 4 na strnkch projektu, ostatn bohuel nejsou cen tralizovny na jedn pehledn strnce a programtor mus asto hledat, ne naraz na plugin, kter spluje jeho kritria. Tento fakt o souasn ne4. http://maven.apache.org/plugins/

58

5. MAYEN 2

dostaten dokumentaci a nabzen podpoe je nejsilnj zbran odprc technologie Maven 2. Protoe podpora existujch plugin zdaleka nepokrv vechny po adavky, kter mohou v rznch situacch nastat, vdy existuje monost tvorby vlastnho plugin ec nae poteby. Stejn tdu kadho plu gin pedstavuje komponenta nazvan Mojo, tda roziujc abstraktn tdu o r g . a p a c h e .maven . p l u g i n . A b s t r a c t M o jo. Ta definuje potebu implementace metody e x e c u t e () a vyaduje znalost specilnch anotac, je jsou zaznamenvny v javadoc komentch. Problematika tvorby vlast nch plugin sah nad rmec tto prce a zjemci si ji mou osvojit studiem tutorilu 5 vystavenho na strnkch projektu. Pluginy, kter chceme vyut v projektu a potebujeme nakonfigurovat jejich podporu v objektovm modelu projektu, jsou v souboru (pom.xml) de finovan v elementu , jak je naznaeno v nsledujcm ryvku z pom.xml na vzorov aplikace.

maven-compiler-plugin l.5 l.5

Jak je jist zejm pmo z ukzky, tento plugin definuje pouit verze 1.5 jazyka Javy 0avy 5.0) pi pekladu.

5.

http://maven.apache.org/guides/plugin/guide-java-plugin-development.html

59

5. MAYEN 2

5.7

Vvoj JEE aplikac

Nstroj Maven 2 byl pouit pro sprvu vzorov aplikace Sportovn portl. Jeho pouit na tomto menm projektu demonstruje snadnou pouitelnost nstroje na zejmna webovch aplikacch menho a stednho rozsahu. Nyn si ukeme tutorilovou formou, jak vyut Maven 2 pro manage ment a tvorbu klasick JEE aplikace vyuvajc komponent definovanch standardem EJB 3.0. Prvnm krokem pi tvorb aplikace je tvorba kostry. Jeliko se chystme vytvoit JEE aplikaci, pedpokldme rozdlen projektu do vce modul. Hlavn adres S p o r t P o r t a l bude pouze zasteovat jednotliv moduly aplikace. Bude tedy obsahovat pouze pom.xml nsledujc struktury: 4.0.0 cz.morosystems.sportportal2 SportPortal pom l.0-SNAPSHOT SportPortal maven-compiler-plugin l.5 l.5 javaee javaee-api 5 provided

60

5. MAYEN 2

Dleitou roli hraje obsah elementu < p a c k a g i n g / > . Hodnota porn de finuje projekt jako pouze rodie" dalm projektm. Definovan zvislost na knihovn javaee-api-5.jar nm dovoluje pouit tto knihovny ve vech podprojektech. Tuto knihovnu se poda sthnout dky umstn speciln schovny do loklnho konfiguranho souboru settings.xml, jak jsme si ji poznamenali dve (str. 58). Dalm krokem je tvorba jednotlivch modul. Pro tvorbu kostry tchto podprojekt meme vyut pluginu archetype, kter generuje kostru pro jekt. V naem ppad zaneme napklad webovou aplikac. Vyuijeme n sledujcho pkazu, kter volme v prv vytvoenm adresi S p o r t P o r t a l : mvn a r c h e t y p e : c r e a t e - D a r t i f a c t l d = w e b a p p -DarchetypeArtifactld=maven-archetype-webapp V adresi se po vykonn pkazu vytvo podprojekt nazvan webapp. Za povimnut rozhodn stoj, e vygenerovan pom.xml obsahuje odakz na rodie" projektu definovan nsledujcm zpsobem: SportPortal cz.morosystems.sportportal2 l.0-SNAPSHOT A naopak do pom.xml na nejvy rovni adresov struktury pibyl nov element definujc moduly projektu: webapp V tto kapitole nm jde o demonstraci vvoje rozshl JEE aplikace, proto zvolme striktn modulrn pstup a kad aplikan modul budou ve skutenosti moduly 3: 61

5. MAYEN 2

entity - entitn tdy aplikanho modulu. app - projekt uren pmo pro EJB 3.0 komponenty. Tento projekt mus mt zvislost na entitn modul, protoe EJB komponenty s entitnmi tdami pracuj. ui - uivatelsk rozhran. Tdy a zdroje definujc uivatelsk rozhran pstupu k jednotlivm komponentm. V naem ppad vyuijeme pouze serviety.

Pro lep pehlednost si vytvome v zkladnm adresi S p o r t P o r t a l podprojekt modules, kter bude mt definovan element < p a c k a g i n g / > opt jako porn a bude dret jednotliv aplikan moduly jako svoje podprojekty Automatick deklarace rodiovskho" projektu a pidn novho projektu do vtu modul tohoto rodie" zajistme opt pomoc pluginu archetype. Pipomeme, e pi voln nsledujcho pkazu se musme na chzet na rovni projektu, pro kter chceme podprojekt" vytvoit. mvn a r c h e t y p e : c r e a t e -DartifactId=modules

a jeho nslednou drobnou pravou vygenerovanho pom.xml. Nyn se ji dostvme ke tvorb samotnch modul. Vytvome 2 kom pletn aplikan jednotky, kad z nich bude obsahovat entitn komponentu: mvn a r c h e t y p e : c r e a t e -Dartifactld=entity

u n pedefinujeme vygenerovan nzev (obsah elementu < a r t i f a c t Id>) na SportPortal-modulel-entity (resp. SportPortal-module2-entity). Dalm krokem je tvorba komponenty (respektive modulu s komponen tami) EJB 3.0: mvn a r c h e t y p e : c r e a t e -Dartifactld=app

u kter potebujeme krom pravy jmna projektu definovat plugin pro sprvu projektu jako EJB a zvislost na vytvoen entitn td: SportPortal-modulel-app ejb 62

5 MAYEN 2 . maven-ejb-plugin 3.0 cz.morosystems.sportportal2 SportPortal-modulel-entity l.0-SNAPSHOT Tetm krokem je vytvoen projektu pedstavujcho aplikan rozhran kadho modulu. Princip je opt stejn. Volnm pkazu mvn archetype:create -Dartifactld=ui dostaneme kostru tdy a opt upravm nzev projektu a pidme definici zvislosti na patinm EJB modulu. Poslednm nezbytnm podprojektem cel aplikace je modul vytvejc ear archiv. Tento modul vytvome pomoc standardnho pkazu mvn a r c h e t y p e : c r e a t e -Dartifactld=ear.

Ve vygenerovanm pom.xml potebujeme definovat moduly, ze kterch se m vsledn archv sestavovat. SportPortal 6. ear - enterprise archive. Typ archvu, do kterho bv zabalena cel JEE aplikace, vetn vech svch modul. Takto sestaven aplikace je urena k distribuci i nasazen do produk nho prosted.

63

5 MAYEN 2 . maven-ear-plugin Nyn u zbv jen naprogramovat njakou jednoduchou funkcionalitu. Pro nzornou ukzku jsme zvolili jednu EJB komponentu v jednom modulu jako Stateless, kter pouze vrac pozdrav a Stateful komponentu v druhm modulu, kter vyuv tdy definovan v entitnm modulu a provd per zistenci uivatelem zadvanch poloek do katalogu. Na nsledujc stran mete vidt vslednou strukturu vzorov apli kace. Poznmka Tutorilov projekt je k dispozici na piloenm CD. Aplikace byla napsna pro pouit na aplikanm serveru JBoss7, proto je i vyvinutu kd specifick poadavkm ze strany aplikanho kontejneru.

7. http://labs.jboss.com/

64

SportPortal - ear '-- pom.xml - webapp

src mam webapp pom.xml

modules modulel - entity | src ' pom.xml - app | src ' pom.xml - ui | src ' pom.xml '-- pom.xml module2 - entity | src ' pom.xml - app | src ' pom.xml - ui | src ' pom.xml '-- pom.xml pom.xml '-- pom.xml

Kapitola 6

TestovnTestovn je velmi dleitou etapou vvoje jakhokoliv software. V ob lasti vvoje webovch aplikac plat tento konsenzus dvojnsobn, protoe, oproti ostatnm typm program, na webov aplikace jsou velmi asto kladeny poadavky rozen a prav pvodnho nvrhu. Tyto poadavky vychz zpravidla z dodatench pn uivatel aplikace. Souasn trend by se dal popsat slovy : m vce test, tm lpe." Vznik cel ada metodik programovn, jejich soust je definice, jak a kdy pst testy. Jako pklad si uveme metodiku extrmn programovan (XP), kter bere testovn jako zklad vvoje. Metodika navrhuje tvorbu sady test, kter jsou sputny po kad vznamn zmn v aplikaci, i zapojen zkaznka do procesu testovn. Dal velmi znmou metodikou vvoje je programovan zen testy (TDD1). Principy tto metodiky kaj, e kad funkcionalita by mla bt podloena testy. Testy by mly vznikat jet ped vvojem programovho kdu. V praxi to vypad tak, e programtor nejprve vytvo testy (ty bu nejsou peloi teln, nebo vychz z rozhran, i kostry pouitch td), dky nim si ujasn funkcionalitu poskytovanou danou komponentou, a a pot zapone vvoj samotnch aplikanch modul. 6.1 Druhy test

Jeliko testovn je, jak jsme si naznaili, nezbytn proces pi vvoji soft ware, existuj destky testovacch nstroj s rznou mrou spnosti a oblbenosti. K dispozici mme mnoho komernch ale i open-source n stroj. Na serverujava-source.net meme najt pehled nejznmjch z nich (http://java-source.net/open-source/testing-tools). V oblasti vvoje webovch aplikac meme jednotliv testovac p pady rozdlit do t zkladnch kategori podle zamen test.1. TDD - Test Driven Development

66

6. TESTOVN

jednotkov testovn - ovovn sprvn funknosti dlch st zdro jovho kdu. integran testovn - testovn sprvn souinnosti kooperujch ob jekt (komponent). akceptan testovn - oven, zda je aplikace v podku, vyhovuje poadavkm a je pipravena k nasazen.

6.1.1 Jednotkov testovn Jednotkov testovn neboli testovn jednotek aplikace (unit testing) nm dv monost testovat sprvnost implementace poadovan funkcionality. Za naprost zklad pro jednotkov testovn je povaovn nstroj JUnit 2 , kter programtorm poskytuje i grafick rozhran a umouje snadnou tvorbu automatickch test. Ve vzorov aplikaci vyuvme jednotkovch test k ovovn sprv nosti tvorby hernho systmu sportovn soute. Jde o testovac tdy ums tny v balku c z . m o r o s y s t e m s . s p o r t . u n i t . 6.1.2 Integran testovn Integran testovn se zabv kontrolou sprvn interakce jednotlivch aplikanch jednotek i komponent. Jednou z monost, jak jednodue a efektivn testovat komunikaci jednotlivch objekt je pouit testovn po moc mock objekt. Touto technikou se v jedn z pedchzejcch souvisejch prac detailn zabval Mgr. Tom Pral[12]. 6.1.3 Akceptan testovn Akceptan testovn je proces, kter m potvrdit pipravenost aplikace pro nasazen do produknho prosted. Akceptan testy pedstavuj sadu scn, definic, jak se m systm v urit situaci zachovat. V ppad webovch aplikac meme tedy ci, e se jedn o testovn prezenn vrstvy, ovem je teba si uvdom, e testujeme funkcionalitu, tedy celou aplikaci, nejenom jeji uivatelsk rozhran. Pro automatizaci tto innosti existuje cel ada technologi. Krtce se zmnme o dvou nejznmjch nstrojch.2. http://junit.org

67

6. TESTOVN

Prvnm z nich je framework JWebUnit3. Testy tvome podobnm zp sobem jako v ppad znmho JUnit: 1. Kad testovac da roziuje zkladn tdu pro testovac ppad net.sourceforge.jwebunit.junit.WebTestCase. Nastavme prosted (jako napklad kontext webov aplikace) pomoc metody s e t u p ( ) . Jednotliv metody vytvej pomoc specilnch zddnch metod ko munikaci se serverem a vyhodnocuj odpovdi.

2.

3.

V podstat stejn funkcionality doshneme pouitm nstroje Selenium 4 . Jde o technologii zaloenou na HTML testech. Nen tedy nutn znalost pro gramovacho jazyka Java, co je velmi praktick, nebozkaznk lpe rozum provdnm testm a dokonce si me s pouitm pluginu Selenium IDE5 pro internetov prohle Firefox definovat svoje vlastn testy. Ty jsou tvo eny na zpsob pozen makra, scne, kter je, v ppad sputn test, pehrn a zkaznk me sledovat prbh test i chovn aplikace. 6.2 Testovn v k o n u JEE aplikac

Vkon aplikace je, co se te oblasti webovch een, velmi podstatn informace. Existuje cel ada nstroj, kter provuj a testuj vkon webo vch aplikac. Nejznmjm takovm nstrojem napsanm v jazyce Java je bezesporu open-source aplikace z dlny Apache Software Foundation: JMeter 6 . 6.2.1 JMeter JMeter je desktopov aplikace napsan ve Swingu, kter velmi jednodu chm zpsobem dovoluje uivateli sestavovat, spoutt a vyhodnocovat testovac scne. Program dovoluje testovn rznch druh server. Na prvnm mst si uveme samozejm webov server (webovou aplikaci), dle pak FTP server, LDAP server, i databzov server. JMeter rovn doke komunikovat s JMS (viz str. 15) systmy nebo monitorovat provoz a zobrazovat zt webovho serveru podporujcho3. http://jwebunit.sourceforge.net/ 4. http://www.openqa.org/selenium/ 5. http: / /www.openqa.org/ selenium-ide/ 6. http://jakarta.apache.org/jmeter/

68

6. TESTOVN

JMX7 (aplikace toti komunikuje se status servletem servletovho kontejneru Tomcat 5.x8, kter je pipojen pes prv pes JMX a je pouiteln i na ostatnch aplikanch kontejnerech). Krom testovn vkonu a chovn aplikace pi zven zti je JMeter rovn vybaven prostedky pro otestovn funkcionality webov aplikace. K tomuto elu slou definice pravidel (Assertions), kter meme vyut pi sestavovn testovacho schmatu. Zpsob tvorby scne Sestaven testovacho scne spov ve vbru a nakonfigurovn kom ponent pedstavujc nastaven, zdroje a provdn akce pi komunikaci se serverem. V aplikaci mme na vbr z nkolika zkladnch typ komponent: Thread Group - jdro scne. Definuje zejmna, kolik uivatel (jed notlivch vlken) a v kolika cyklech se bude pipojovat na dan server. Komponenta tvo zklad pro dal subelementy Logic Controllers - mnoina nabz komponenty, kter jsou uren k zen komunikace se serverem. Dky kontrolrm obsaenm v tto nabdce meme definovat napklad poadavek (request), kter se odele pouze jednou a bude zajiovat pihlen uivatele. Listeners - sada komponent, kter zachytvaj a zpracovvaj odpov serveru. Meme tak dostat napklad HTTP status odpovdi, celou HTML strnku, i graf zobrazujc asovou odezvu. Samplers - mnoina monch typ poadavk, kter meme vyut. Pro ns je zajmav zejmna HTTP Request, kter nm definuje jeden HTTP dotaz na server (request) a kter jsme schopni konfigurovat po moc rznch parametr, definovat protokol, metody (obvykle GET, nebo POST) a konen i konkrtn strnku, na kterou chceme request poslat. Assertions - sada test pouitelnch na odpov serveru. Dky tmto komponentm meme testovat sprvnost a plnost odpovdi.

7. JMX -Java Management Extensions (http:/ /java.sun.com/javase/technologies/core/mntrmgmt/Javamanagement/) 8. http://tomcat.apache.org/

69

6. TESTOVN

Timers - rzn druhy asova, kter meme pout pro pesn do saen poadovanho schmata komunikace, kter chceme na serveru testovat. Config Elements - sada konfiguranch prvk, dky kterm meme definovat rzn vlastnosti spojen a samotn komunikace. Pro pou it u testovn webovch aplikac je pro ns zajmav zejmna ele ment HTTP Request Defaults (definuje server, kter chceme testovat, abychom nemuseli provdt konfiguraci u kadho elementu ped stavujcho request) a element HTTP Cookie Manager (pro monost uchovvn a sdlen cookies). Pre-Processors, Post-Processors - speciln akce spojen s odeslnm poadavku a pijetm odpovdi.

Sestavovn a spoutn automatizovanch scn je jednoduchou z leitost. Intuitivn ovldn aplikace dv programtorm a testerm velmi cenn nstroj pi testovn zte a funknosti webov aplikace. Aplikace JMeter by si, stejn jako cel tma testovn vkonu, zaslouila mnohem vt pozornosti, ne se j dostalo v tto kapitole. My na podrob nj rozebrn tto uiten aplikace ji bohuel v tto prci nemme do statek prostoru, proto odkazujeme tene se zjmem o tuto technologii na uivatelsk manul[7] publikovan na strnkch projektu.

70

Kapitola 7

ZvrV tto prci jsme se sblili s nktermi nejnovjmi technologiemi, kter jsou na vrcholu oblbenosti v oblasti vvoje JEE aplikac. Pro bli seznmen se s modernmi technikami, kter jsou tmito tech nologiemi vyuvny, jsme si nejprve ukzali nejvt zmny, kter s sebou pinesla verze 5.0 jazyka Java. Nkdo by mohl namtat, e Java 5 vyla ji ped temi roky a e tud nejde o dnou novinku. Toto tvrzen nen tak pln pravdiv, jde o hel pohledu, kterm se na vc dvte. Rozen Javy 5 se do vvoje JEE aplikac dostvalo jen velmi pozvolna. Dvodem k tomu je fakt, e veker aplikace spadajc do oblasti oznaen JEE pote buj pro svj bh aplikan kontejner (aji odlehen servletov kontejner, jako je tomu v ppad aplikanho rmce Spring a jemu podobnch, nebo plnohodnotn aplikan server, jakho je zapoteb pi vyuit technologie EJB). Pepracovn jednotlivch aplikanch kontejner a dokonce samotn prava rozshlch specifikac si vyaduje msce pprav a prce velkch tm programtor a nvrh. Z tohoto dvodu vyla finln specifikace nazvan Java EE 5 pomrn nedvno. V dnen dob, kdy u byly standardy JEE podporujc rozen Javy 5 publikovny a vtina nejvtch dodavatel komplexnch aplikanch ser ver ji podporuje nov definovan metody, vak existuj programtoi, kte se zabvaj pouze programovnm v Jv 1.4. Dvodem k tomu je drba a roziovn ji existujcch komplexnch een, kter nemou bt z rznch dvod pretransformovan do nov verze a chybjc podpora zptn kompatibility aplikanch kontejner. Novinky verze 5.0 jazyka Java, kter jsme si pedstavili v vodn sti, ns doprovzely bhem vtiny textu tto prce. Ble jsme si pedstavili rozen velmi oblbenho ORM nstroje Hibernate, kterm je prv vyuit onch rozen - anotac (a s tm souvisejcch generik a vtovch typ) pro tvorbu mapovn. Anotace pouity v tomto nstroji jet ovem nejsou tm pravm pkladem vyuit Javy 5 v JEE aplikacch, nebo anotace jsou zpracovvny tdami rmce Hibernate. Za velmi pnosnou st tto prce povauji kapitolu vnujc se tech71

7. ZVR

nologim, kter jsou souhrnn oznaovny jako spadajc do JEE oblasti. Ble jsme si pedstavili klovou komponentu vvoje Java EE 5 aplikac, architekturu EJB 3.0. Bohuel jsme nebyli schopni v tomto pomrn malm prostoru zachytit vechny vychytvky", se ktermi nov Enterprise JavaBeans pichz, ovem myslm si, e jsme dokzali nzornm zpsobem nezasvcenmu teni nov technologie a zpsob vvoje s jejich vyuitm pedstavit a upozornit na hlavn rozdly, ktermi se nov verze li od star specifikace. K oblasti vvoje jakhokoliv software pat neodmysliteln i nstroje, kter maj pomoc pi procesu vvoje a sestavovn danho produktu. Ped stavili jsme si zklady prce, potebn pro vvoj webovch aplikac, s n strojem Maven 2, kter se, navzdory doposud pomrn malmu mnostv dokumentace, t v posledn dob stle vtmu zjmu komunit program tor. Dkazem tohoto tvrzen je fakt, e mnoho open-source projekt nabz distribuci svch zdrojovch kd spravovanou prv tmto modernm n strojem. K automatizaci procesu sestavovn aplikac pat automatick n stroje testovn. V doplkov kapitole jsme si shrnuli monosti testovn a pedstavili nstroj pro testovn vkonu aplikac. Podstatnm pnosem pro programtora je fakt, e pedstaven nstroj Maven umouje automatick spoutn test kdykoliv pi pekladu a sestaven aplikace, m pebr zodpovdnost nad vykonvnm tchto test a kontrolou jejich sprvnosti. Dleitou soust tto prce jsou i zdrojov kdy vzorovch aplikac na piloenm CD. Webov aplikace SportPortal, kter je souhrnm dlem doprovzejcm ti diplomov prce (prce Mgr. Petra Matulka[ll], Mgr. Tome Prala[12] a zavrena touto prac) pedstavuje zdroj netrivilnch een prezentovanch zejmna v perzistentn vrstv s vyuitm rmce Hi bernate. Druh piloen aplikace je specifick pro tuto prci a je vstupem tutorilovhu pedstaven tvorby JEE aplikace s vyuitm monost zmnn technologie Maven 2 a zaloen na komponentov architektue EJB 3.0. Vm, e text tto prce si najde tene mezi nov zanajcmi Java/JEE programtory, ale svmi pokroilejmi oblastmi zaujme i lovka, kter se v dan problematice ji orientuje.

72

Ploha A

Vzorov aplikaceNa piloenm CD jsou umstny 2 vzorov aplikace. Prvn z nich je webov aplikace Sportportal, druhou je tutorialov pklad pouit technologie Maven pi tvorb JEE aplikace. Aplikace jsou umstny v adresch /app/SportPortal ... webov aplikace zaloen na technologich Spring + Hibernate /app/SportPortal/dist ... distribun verze aplikace /app/SportPortal2 ... tutorilov aplikace vyuva jc technologii EJB 3.0 /app/SportPortal2/dist... distribun verze aplikace

73

Ploha B

Elektronick formt tto prceNa piloenm CD je tak k dispozici elektronick forma tto prce ve formtech PDF a KTgX. Soubory se nachz v adresi /thesis

74

Literatura[1] Apache Maven. < h t t p : / / m a v e n . a p a c h e . o r g / > . [2] Hibernate, < h t t p : / / w w w . h i b e r n a t e . o r g / > . [3] Hibernate anotace, referenn pruka. < h t t p : / /www . h i b e r n a t e . org/hib_docs/annotations/reference/en/html_single>. [4] Java EE 5 tutoril, . [5] Java Enterprise Edition, < h t t p : / / j a v a . s u n . c o m / j a v a e e / > . [6] Java Standard Edition, < h t t p : / / j a v a . s u n . c o m / j a v a s e / > . [7] JMeter - User's manual. . [8] Spring framework, < h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / > . [9] John Casey, Vincent Massol, Brett Porter, Carlos Sanchez, Jason van Zyl. Better Builds with Maven. < h t t p : / / w w w . m e r g e r e . com/m2book_ d o w n l o a d . j sp>, 2006. [10] Joshua Bloch. Java efektiv. 57 zsad softwarovho experta. Grada Pub lishing a.s., U Prhonu 22, Praha 7, 2002. [11] Petr Matulk. Modern rmce pro webov aplikace [diplomov prce]. Ma sarykova univerzita, Fakulta informatiky, 2006. [12] Tom Pral. Datov a prezentan vrstva modernch webovch aplikac [diplomov prce]. Masarykova univerzita, Fakulta informatiky, 2007.

75

Rejstkanotace, 10,26 anotace perzistence AttributeOverrides, 33 Basic, 31 Column, 31 DiscriminatorColumn, 45 DiscriminatorValue, 45 Embeddable, 32 Embedded, 32 Entity, 29 GenerateValue, 33 Id, 33 Inheritance, 44 JoinColumn, 35, 38,41 JoinTable, 36, 39,43 Lob,31 ManyToMany, 42 ManyToOne, 37 MapKey, 42 OneToMany, 38 OneToOne, 34 OrderBy, 42 Primary KeyJoinColumn, 36 Table, 29 Temporal, 31 Transient, 30 Version, 31 Ant, 49 aplikace Sportovn portl, 4 Bloch, Joshua, 7 EJB Entity Bean, 18 Message-Driven Bean, 23 Session Bean, 18 Stateful, 19 Stateless, 18 EJB anotace EJB, 22 MessageDriven, 23 PersistenceContext, 24 Remote, 22 Resource, 23 Stateful, 22 Stateless, 22 enterprise aplikace, 13 Extremn programovn, 66 Hibernate anotace, 26 Cascade, 40 GenericGenerator, 33 MapKey, 42 MapKeyManyToMany, 42 OrderBy, 42 Hibernate mapovn asociace mezi tdami, 34 jednosmrn vazby, 38 kolekce List, 42 kolekce Map, 42 kolekce Set, 37 many-to-many, 42 many-to-one, 37 obousmrn vazby, 39 one-to-many, 38 one-to-one, 34 primrn kl, 33 vnitn objekt, 31 76

B. ELEKTRONICK FORMT TTO PRCE

zkladn atributy, 30 Maven dependency, 56 Hibernate polymorfizmus Maven profily, 53 Maven repozitory, 57 strategie joined-subclass, 47 Maven tvorba plugin, 59 strategie table-per-class, 48 strategie table-per-class-hierarchy, open-source, 27,50, 66, 68 44 ORM, 18 Java Enterprise Edition, iv POJO, 18, 24, 28 JBoss, 64 programovn zen testy, 66 JEE API, 13 JEE technologie servletov kontejner, 14 EJB 3.0,14 SNAPSHOT, 57 Java Serviet, 14 TDD, 66 JavaMail, 15 testovn JAX-RPC, 16 akceptan testovn, 67 JAX-WS, 16 integran testovn, 67 JAXB, 16 jednotkov testovn, 67 JMS, 15 testovn pomoc mock objekt, 67 JPA, 15 testovn vkonu, 68 JSF, 14 JSP, 14 verzovac systmy CVS, SVN, 51 JSTL, 14 JTA, 15 XP,66 S A AJ, 16 StAX, 16 JNDI lookup, 19 JUnit, 67 Maven, 49 Maven 2 zkladn pkazy, 54 mvn clean, 55 mvn compile, 54 mvn deploy, 55 mvn install, 55 mvn integration-test, 54 mvn package, 54 mvn site, 55 mvn test, 54 mvn validate, 54 mvn verify, 55 77