MASARYKOVA UNIVERZITA F}w¡¢£¤¥¦§¨  AKULTA INFORMATIKY !"#$%&'()+,-./012345

Srovnání J2EE integraˇcních framework ˚u

DIPLOMOVÁ PRÁCE

Bc. Daniel Gajdoš

Brno, podzim 2008 Prohlášení

Prohlašuji, že tato diplomová práce je mým p ˚uvodnímautorským dílem, které jsem vypra- coval samostatnˇe.Všechny zdroje, prameny a literaturu, které jsem pˇrivypracování použí- val nebo z nich ˇcerpal,v práci ˇrádnˇecituji s uvedením úplného odkazu na pˇríslušnýzdroj.

Vedoucí práce: Mgr. Pavel Drášil

ii Shrnutí

Cílem této práce je pˇredstavenístandardu J2EE, jeho pozice na trhu, význam framework ˚u, základní charakteristika vybraných framework ˚u,vzorová implementace jednoduché apli- kace s využitím tˇechtoframework ˚u,srovnání složitosti implementace, ˇcitelnostia podpory vývojových nástroj ˚u.Na závˇerbude popsán proces seznamování a implementace jednotli- vých aplikací, shrnutí zjištˇenýchfakt ˚ua doporuˇcení,kdy je vhodné nˇekterýz popisovaných framework ˚upoužít.

iii Klíˇcováslova

J2EE, JSP, servlet, session, Jboss Seam, , EJB, JDBC, SQL, RMI, HTML, IIOP, JAXP

iv Pˇredmluva

Tato práce byla pˇripravenave formátu XML s využitím DTD DocBook. Závˇereˇcnásazba byla provedena typografickým systémem LATEX ve stylu fithesis z písma Computer Modern ve variantˇeCS-font. Projekt je ˇcasovˇeohraniˇcenéúsilí smˇeˇrujícík vytvoˇreníunikátního produktu nebo služby. Již tato základní definice obecného projektu v sobˇeobsahuje slovo unikátní. Jak ale vy- tváˇretunikátní projekty, když používaná technologie je všeobecnˇedostupná, tudíž má ji v rukách i konkurence? Cílem každého projektu by mˇelobýt uspokojení potˇrebzákazníka. Míra úspˇešnostipro- jektu se mˇeˇríprávˇemírou spokojenosti a mírou naplnˇeníoˇcekávání.Každý projekt je ohrani- ˇcenjak ˇcasem,tak i zdroji. V rámci výbˇerových ˇrízeníse firmy pˇredhánínabízenou kvalitou, rychlosti dodávky, úrovní servisu a v neposledné ˇradˇecenou, za kterou jsou ochotni projekt realizovat. Výsledkem úspešného boje obchodník ˚uje získání zákazníka, získání projektu a vidina budoucího zisku. Pak ale pˇricházíreálný pohled na to, co s sebou projekt pˇrináší, svoji složitost, množství omezení a rozsáhlost. A to je právˇevýzva, se kterou se musíme umˇetvypoˇrádat.Potom pˇricházíta síla, která nás dˇelájinými než konkurence a je to jen na nás, jak ten projekt dopadne. Jedním ze zp ˚usob˚u,jak uspˇetve složitém svˇetˇetvrdého obchodu, je mít konkurenˇcní výhody. Z hlediska IT to pak znamená mít dostatek zkušeností a hlavnˇeznalostí, které po- vedou ke snižování pracnosti, a tím i ke zvyšování zisku z projektu.

v Obsah

1 Úvod ...... 1 2 PˇredstaveníJ2EE ...... 2 2.1 Definice ...... 2 2.2 J2EE Technologie ...... 2 2.3 Výhody J2EE ...... 3 3 Co to je framework ...... 5 4 Proˇcframeworky v J2EE ...... 8 4.1 Pˇrístupautora k framework ˚um ...... 9 4.1.1 Vývojové prostˇredí ...... 10 5 Referenˇcníframework Jakarta Struts ...... 11 6 Stripes ...... 12 6.1 Pˇredstavení ...... 12 6.1.1 Základní cíle frameworku ...... 12 6.2 Pˇrínosy ...... 12 6.3 Struts vs. Stripes ...... 13 6.3.1 Množství soubor ˚ua konfigurace ...... 13 6.3.1.1 Struts ...... 13 6.3.1.2 Stripes ...... 13 6.3.2 Postupný vývoj ...... 14 6.3.2.1 Struts ...... 14 6.3.2.2 Stripes ...... 14 6.3.3 Vnoˇrenéatributy ...... 14 6.3.3.1 Struts ...... 14 6.3.3.2 Stripes ...... 14 6.3.4 Validace ...... 15 6.3.4.1 Struts ...... 15 6.3.4.2 Stripes ...... 15 6.3.5 Null ...... 15 6.3.5.1 Struts ...... 15 6.3.5.2 Stripes ...... 15 6.3.6 Více akcí ...... 15 6.3.6.1 Struts ...... 15 6.3.6.2 Stripes ...... 15 6.3.7 HTML znaˇcky...... 16 6.3.7.1 Struts ...... 16 6.3.7.2 Stripes ...... 16 6.4 Konfigurace ...... 16 7 Jboss Seam ...... 17 7.1 Pozadí ...... 17 7.2 Historie verzí ...... 17

vi 7.3 Pˇrínosy ...... 18 7.4 Podpora vývoje ...... 20 7.5 Struktura Seam projektu ...... 21 7.6 Vlastnosti Jboss Seam podrobnˇeji ...... 23 7.6.1 Spojení EJB3 komponenty a JSF stránky ...... 23 7.6.2 Scopes/kontexty pro Seam komponenty ...... 24 7.6.3 Seam konverzace ...... 24 7.6.4 Validace vstupních dat formuláˇr˚u ...... 25 7.6.5 Tvorba CRUD aplikací ...... 25 7.6.6 Integrace Business Process Managementu ...... 25 7.6.7 JBoss Expression Language ...... 26 7.6.8 Generování PDF a e-mail ˚u...... 26 7.6.9 Integrace s JBoss Rules ...... 26 8 Praktické srovnání ...... 28 8.1 Požadavky na vzorovou aplikaci ...... 28 8.2 Proces tvorby vzorových aplikací ...... 29 8.2.1 Aplikace SeamPhoneBook ...... 29 8.2.2 Aplikace StripesPhoneBook ...... 32 9 Závˇer ...... 36 A A ...... 38 B B ...... 39 Literatura ...... 40

vii Kapitola 1 Úvod

O nízké úspˇešnostiprojekt ˚uvíme všichni již delší dobu. Vzr ˚ustajícíkonkurence tlaˇcína sniž- nování ceny projekt ˚u,ale vzr ˚ustajícísložitost proces ˚ukoncového zákazníka ke snižování náklad ˚unijak nepˇrispívá. Címˇ složitˇejšíjsou vstupní požadavky, tím složitˇejšíje i architek- tura celého ˇrešenía tím vyšší by mˇelabýt i cena projektu. V ideálním svˇete,kde bychom méli dostatek ˇcasua zdroj ˚u,bychom si mohli dovolit tvoˇritsystémy s použitím základních technologii, jako jsou html, popˇrípadˇexhtml a jsp. Psát všecho pracnˇeruˇcnˇeby sice nebylo zábavné, ale vzhledem k neomezeným zdroj ˚umby nám to vadit nemuselo a i chybovost ruˇcnˇetvoˇrenéhoobrovského množství kódu bychom pˇridostatku ˇcasubyli schopni minimalizovat. Reálný svˇetje ale hodnˇevzdálený od svˇetaideálního, termíny jsou pevné a rozpoˇcet je víc než omezený. Jak se s tím vypoˇrádat?Omezit pracnost implementace a dˇelatvážnˇe jenom to, co je nejnutnˇejšía co pˇrinášískuteˇcnouhodnotu zákazníkovi. Nakonec to je ve vˇetšinˇeprojekt ˚ud ˚uvod,proˇcchce zákazník nový informaˇcnísystém - už ho nebaví pracovat neefektivnˇea vyhazovat tak peníze oknem. Právˇez tohoto ˚uvoduvznikají technologie jako jsou poˇcítaˇce,databáze, sítˇe... C, , J2EE. Smyslem tˇechtotechnologii je pomáhat jak tv ˚urc ˚um,aby byla jejich práce jednodušší, tak hlavnˇecílovým zákazník ˚um,pro které jsou produkty urˇceny.

1 Kapitola 2 PˇredstaveníJ2EE

2.1 Definice

Co je to vlastnˇeJ2EE nebo chcete-li Java EE? Jedná se o pˇrístup(sadu pravidel, technologií, metod, doporuˇcení),jak provádˇetdesign, vývoj, nasazení a provozování vícevrstvých aplikací pomocí jazyka Java formou nˇekolika základních komponent. Jedná se tedy pouze o standard, nikoliv o konkrétni produkt. Specifikace tohoto stan- dardu se datuje k prosinci 1999. Do tohoto standardu patˇrí:

• Platforma J2EE - standartizovaná platforma, poskytující bˇehovéprostˇredípro J2EE aplikace

• Soubor test ˚ukompatibility J2EE - sada test ˚uovˇeˇrujících,zda je urˇcitáplatforma J2EE v souladu se standartem

• Referenˇcníimplementace J2EE - implementace J2EE urˇcenápro prototypování J2EE aplikací; poskytuje definici J2EE platformy

• J2EE BluePrints - množina nejlepších osvˇedˇcenýcha doporuˇcenýchpostup ˚upˇrivý- voji vícevrstvých aplikací

2.2 J2EE Technologie

Mezi nejd ˚uležitˇejšítechnologie, na kterých je J2EE založena patˇrí:

• Enterprise JavaBeans (EJB) - standard pro tvorbu komponent serverové ˇcástiapli- kace zapouzdˇrujícíchobchodní logiku

• HyperText Transfer Protocol (HTTP) – komunikaˇcníprotokol pro podporu komuni- kace typu požadavek-odpovˇed(request/response)

• Java Authentication and Authorization Service (JAAS) - podpora pro autentizaci a autorizaci pomocí LDAP a jiných úložišt pˇrístupovýchpráv

2 2.3. VÝHODY J2EE

• JavaMail – podpora pro prácí s elektronickou poštou

• Java API for XML Parsing (JAXP) – prostˇredkypro manipulaci s XML dokumenty a podpora XSL transformací

• Java Connector Architecture (JCA) – rozhraní SPI pro pˇripojeník adaptér ˚umexter- ních ERP systém ˚u

• JavaServer Pages (JSP) - stránka složená z XML znaˇcek,EL (Expression Language), JSTL a scriptlet ˚uJavy. Výsledkem jejího zpracování na serveru je HTML nebo XML dokument.

• Java Servlets - menší Java aplikace, generující dynamický obsah webových stránek

• Remote Method Invocation (RMI)

– jedna z implementaci Remote Procedure Call (RPC) – vyvolávání vzdálených metod na objektech, registrovaných na serveru pomocí JNDI

• Java Naming and Directory Interface (JNDI) - jmenné a adresáˇrovéslužby pro regis- traci a vyhledávání objekt ˚ukomunikujících pˇresrozhraní RMI

• Java Transaction API (JTA), Java Transaction Service(JTS) - objekty pro podporu lo- kálních a distribuovaných databázových transakcí

• Java Message Service API (JMS) - služba pro zabejištˇeníasynchronní komunikace

• Object Request Brooker (ORB) - poskytuje základní funkˇcnostslužbám jako EJB kon- tejner a Naming service

• Internet Inter-ORB protocol (IIOP) - komunikaˇcníprotokol technologie CORBA, umož- ˇnujícíkomunikaci CORBA objekt ˚uprostˇrednictvímInternetu

• JDBC (Java DataBase Connectivity) data access API - komponenty pro pˇripojenída- tabází prostˇrednictvímstandardizovaného rozhraní JDBC

2.3 Výhody J2EE

Jelikož je J2EE založena na jazyku Java, pˇrínašísebou tyto výhody:

• Nezávislost na operaˇcnímsystému Platformová nezávislost jazyka Java pˇrinášímožnost nasazení J2EE aplikací na všechny operaˇcnísystémy, pro které existuje Java Runtime a pˇríslušnáimplementace aplikaˇc- ního serveru. Umožnuje tedy vývoj a nasazení na r ˚uznýchoperaˇcníchsystémech.

3 2.3. VÝHODY J2EE

• Nezávislost na konkrétní implementaci aplikaˇcníhoserveru Dle standardu by aplikace mˇelibýt pˇrenositelnémezi jednotlivými aplikaˇcnímiser- very. Vzhledem k r ˚uznýmrozšíˇrenímaplikaˇcníchserver ˚uje však tato pˇrenositel- nost hodnˇeomezená. Typickým pˇríklademje problematika objektovˇe-relaˇcníhoma- pování, které je definováno na jednotlivých aplikaˇcníchserverech r ˚uznˇe(napˇríklad na Websphere je nutné dodateˇcnémapování ve vlastních konfiguraˇcníchsouborech).

• Existence návrhových vzor ˚u Jedná se o provˇeˇrenépostupy a zp ˚usobynávrhu, které usnadˇnujía optimilazují ˇre- šení ˇcastose vyskytujících problém ˚u.Mezi návrhové vzory patˇrímimo návrhových vzor ˚upro samotný jazyk Java i návrhové vzory pro implementaci obchodní logiky a pro prezentaˇcnívrstvu.

• Otevˇrenost Jelikož je J2EE pouze specifikací a pˇredpisem,je implemtace závislá na konkrétním dodavateli. J2EE ale zavazuje dodavatele k dodržování standard ˚u,co vede k modu- lárnímu návrhu jednotlivých implementací a možností tyto implementace modifiko- vat. Typickým pˇríklademje využití technologie webových služeb, která umožnˇeje nahradit implementaci JAX-WS za implementaci Axis bez nutnosti modifikace roz- hraní. Dokonce otevˇrenímzdrojových kód ˚uJavy se vytváˇrítlak na otevírání jednot- livých implementací, co vede jak k snížování chybovosti, tak i k snížování náklad ˚u na poˇrízenítˇechtoimplementací.

• Množství implementací J2EE akceptovalo a implementovalo množství významných firem jako jsou IBM, RedHat, Oracle, SUN, ˇcímžvznikl velký tlak vedoucí k rychlému rozvoji a nasa- zování J2EE.

4 Kapitola 3 Co to je framework

Jak již bylo v úvodu zmínˇeno,cílem projektu je tvorba systému, který pˇrinášízákazní- kovi oˇcekávánéchování, tj. implementuje funkˇcníi nefunkˇcnípožadavky, které kopírují obchodní procesy zákazníka. Tedy cokoliv, co s logikou tˇechtoproces ˚upˇrímonesouvisí, pˇri- náší zvyšování náklad ˚u,ale nepˇrinášízákazníkovi pˇridanouhodnotu. Typickým pˇríkladem m ˚užebýt ˇrešenítransakˇcníhozpracování, pˇrístupovýchpráv nebo správa sezení (sessions) v pˇrípadˇewebových aplikací. Jelikož se nejedná o triviální oblasti návrhovaného systému, vyžádala by si jejich ruˇcníimplementace významnou ˇcástzdroj ˚u,které by jinak mohly být použity k ˇrešeníproblém ˚u,které s implementací logiky obchodních proces ˚upˇrímosouvisí. Jelikož to vede k nežádoucímu zvyšování ceny a prodlužování ˇcasupotˇrebnéhok samotné implementaci, je u vˇetšinyprojektu snaha tyto ˇcinnostiminimalizovat. A právˇetady se ke slovu dostává pojem aplikaˇcníframework. Aplikaˇcníframework oznaˇcujesadu vzájemnˇe propojených již existujících komponent, které fungují jako základ pro vývoj aplikací a po- skytují podporu pro již zmínˇenépodp ˚urnéprocesy. Na obrázku 3.1 je znázornˇenorozdˇelenílogiky systému mezi tu, která souvisí s obchodní logikou, a tu, kterou za nás ˇrešípoužitý framework.

Obrázek 3.1: Aplikaˇcníframework

Aplikaˇcníframework by mˇelmít tyto vlastnosti:

• Stanovuje základní architekturu projektu - vˇetšinouzákladní typy tˇríd,které aplikaci tvoˇrí.Tímto vnáší jistý pˇredpokladk lepšímu pochopení a rychlejšímu seznámení se s aplikacemi, které jsou postavené nad stejným frameworkem.

5 3. COTOJEFRAMEWORK

• Rešíˇ technické (low-level) problémy - vˇetšinouimplementaˇcnˇenároˇcné.Low-level komponenty jsou vˇetšinouobecnˇepoužitelné, proto se jejich zaˇrazenímdo aplikaˇc- ního frameworku m ˚užedosáhnout vysoké znovupoužitelnosti. Jedná se o již zmí- nˇenéproblémy, které s obchodní logikou cílového zákazníka pˇrímonesouvisí.

• Poskytuje podporu pro implementaci samotné obchodní logiky

• Definuje proces vývoje – nejedná se tedy pouze o kolekci komponent, které za nás vyˇrešíˇcástproblému, ale stanovuje i pravidla, které vedou k zekektivnˇenía stan- dardizování samotného procesu vývoje, ˇcímžopˇetsnižuje riziko pˇrekroˇcenílimit ˚u projektu.

• Podpora Rich Internet Application Jedná se podporu pro tenké webové klienty poskytující funkce desktopových kli- ent ˚u.Pˇríklademjsou možnosti zobrazování graf ˚u,tabulek, práce se záložkami, pod- pora pro upload soubor ˚u.

• Podpora vývojových prostˇredí Tento požadavek vznikl jako reakce na dostupnost WYSIWYG nástroj ˚upro plat- formu .NET. Bez podpory vývojového porstˇredíje obtížný návrh hlavnˇevizuální ˇcástiaplikace a rychlé prototypování.

• Zrychlení vývoje, úroveˇnabstrakce a znovupoužitelnost Frameworky by mˇelynabízet možnost odstínit vývojáˇreod podp ˚urnýchtechnologií (HTTP, SQL), ˇcímžby dovolily vývojáˇrípˇresunoutpozornost k tvorbˇesamotné apli- kaˇcnílogiky. Zároveˇnby mˇelynabízet komponentní architekturu, pomocí které by bylo možno dosáhnout znovupoužitelnosti vyvinutých komponent.

• Oddˇeleníprezentaˇcnívrstvy Framework má nabízet možnost prezentaˇcnívrstvu plnˇeoddˇelitod ostatních vrstev. Tento požadavek vzešel z nutnosti tvorby prezentaˇcnívrstvy v grafických studiích, u kterých se nepˇredpokládáznalost technologie Java.

• Oddˇelenípersistentní vrstvy Jedním z d ˚uležitýchpožadavk ˚uje i oddˇelenípersistentní vrstvy z d ˚uvodumožného nahrazení této persistentní vrstvy jinou (napˇr.Hibernate za EntityBeany v pˇrípadˇe nedostateˇcnéhovýkonu).

• Striktní oddˇelenívšech vrstev ale není žádoucí, protože hlavnˇeu jednodušších apli- kací vede ke zbyteˇcnémuzesložitˇenínávrhu.

Použití aplikaˇcníhoframeworku na druhou stranu sebou pˇrínášíi tato rizika:

6 3. COTOJEFRAMEWORK

• snížení výkonu aplikace – vˇetšinouplatí: Címˇ obecnˇejšíjsou komponenty frameworku, tím k vˇetšídegradací výkonu samotné aplikace dochází. Typickým pˇríklademjsou komponenty pro objekovˇe-relaˇcnímapování.

• nemožnost modifikace frameworku – at’ už se jedná pˇrímoo chybu a nebo jenom o nevhodné „chování“ samotného frameworku, je modifikace samotného frameworku hodnˇeobtížná, jelikož mají frameworky pro svoji univerzálnost docela ˇcastovelmi vysokou vnitˇrnísložitost. Navíc se modifikací frameworku vystavujeme riziku ne- kompatibility s novˇejšímiverzemi frameworku. Doba ˇrešenínahlášených chyb se u framework ˚u,které jsou poˇrádve fázi vývoje, pˇrímoodráží v dobˇepro vyˇrešení problému v naší implementaci. Navíc u framework ˚u,u kterých byl již vývoj zasta- ven, je šance k opravˇezjištˇenýchchyb hodnˇemalá. Tímto vzniká pˇrímázávislost na dodavateli frameworku.

7 Kapitola 4 Proˇcframeworky v J2EE

Platforma J2EE je spolu s platformou .NET, od spoloˇcnostiMicrosoft, vnímána jako plat- forma pro vývoj rozsáhlých podnikových aplikací. Mohlo by to tedy vést k názoru, že im- plementace J2EE by mˇelaplnˇepostaˇcovatpro vývoj jakékoliv podnikové aplikace. Pˇribliž- sím pohledu na to, co nám jednotlivé implementace J2EE nabízí, ale zjistíme, že sice máme k dispozici obrovské množství low-level komponent, ale jejich vzájemné propojení a sa- motný zp ˚usobjak vytvoˇritrobustní a rozšíˇritelný systém už J2EE ani jednotlivé implemen- tace nepˇredepisují.Pomocí J2EE je tedy možné vytváˇreti ponˇekudnepˇrehlednéjednovrstvé aplikace, realizující v jedné vrstvé jak prezentaci a aplikaˇcnílogiku, tak i pˇrístupk dat ˚um, což se nám m ˚užehodit k rychlému prototypování a tvorbˇemalých aplikací. U rozsáhlejších systém ˚usi ale se samotným J2EE nevystaˇcíme,jelikož tvorba aplikací v samotném J2EE se- bou nese netriviální složitost samotného návrhu a implementace. Tímto vzniká prostor pro nasazení J2EE framework ˚u,které nás mají odstínit od ˇcastose opakujících a standardizova- telných operací typu autentizace, pˇrístupk databázi a nebo verifikace zadávaných hodnot v pˇrípadˇewebových aplikací. Pro srovnání bychom mohli komponenty implementace J2EE pˇrirovnat ke stavebním blok ˚um,kdežto framework by pak spíš pˇripomínalucelené funkˇcníjednotky a kostru sa- motné stavby. Framework nám tedy nabízí jakousi formu, do které pouze implementujeme požadovanou obchodní logiku a napojení, a správné využití komponenet samotného J2EE má již na starosti samotný framework. Jistým mezistupnˇemmezi J2EE a frameworkem jsou návrhové vzory, které se snaží ar- chitektonicky pˇredepsatstavbu podnikových aplikací. Typickým pˇríklademnávrhového vzoru, nad kterým staví hodnˇeframework ˚u,je návrhový vzor MVC (Model-View-Controler) definující rozdˇeleníwebových aplikací do vrstev:

• Control vrstva realizující samotnou navigaˇcnílogiku se dál dle J2EE dˇelí:

– Front Controller – centralizovaný bod pˇrístupu(single point of access) pro za- sílání klientských požadavk ˚u – Application Controller – navazuje na Front Controller a realizuje samotnou na- vigaˇcnílogiku, tj. navigaci mezi stránkami a dalšími controllery. Pˇrinášívyšší flexibilitu pˇripˇridávánídalší aplikaˇcnílogiky implementující obchodní logiku – Content Object – pˇredstavujeobal (zapouzdˇrení– wrapper) informace pro kon- krétní protokol (HttpServletRequest).

8 4.1. PRÍSTUPAUTORAKFRAMEWORKˇ UM˚

• View vrstva realizující samotnou vizuální ˇcástaplikace a interakci s uživatelem

– View helper – obsahuje doporuˇcenípro implementaci vizuálních komponent s minimem aplikaˇcnílogiky.

• Model (Business) vrstva uchovávající jak samotná data tak i aplikaˇcnílogiku se dál dˇelí:

– Business object – základní prvek pro implementaci aplikaˇcnílogiky. Pˇríkladem je SessionBean. – Data transfer object (DTO) – nosiˇcdat mezi vrstami aplikace – Data access object – objekt zprostˇredkujícímapování dat mezi persistentní a aplikaˇcnívrstvou. Pˇríklademje EntityBean. – Session facade – objekt zapouzdˇrujícívˇetšípoˇcetBusiness objekt ˚u.Sám o sobˇe nevykonává aplikaˇcnílogiku, pouze pˇresmˇerovává volání k pˇríslušnýmbusi- ness objekt ˚um.

4.1 Pˇrístupautora k framework ˚um

Jako Java programátor jsem se k webovým framework ˚umdostal v rámci projektu. Nˇejaké znalosti s prací s HTTP, XML, HTML a dalšími technologiemi jsem získal již v pr ˚ubˇehustu- dií, praktické zkušenosti však pˇrinášelaž projekt. Jelikož jsem se tvorbˇewebových aplikací zatím ve vˇetšímnevˇenoval,nejsem tedy ovlivnˇenzaužívanými zp ˚usobytvorby webových aplikací. V rámci seznamování s jednotlivými reprezentanty webových framework ˚ujsem tedy byl v roli zaˇcáteˇcníka.D ˚uvodempro srovnávání byl konkrétní požadavek rozhodnout, který produkt by se v dalších fázích projektu mˇelpoužít. Jelikož ve vˇetšinesrovnání, které jsou dostupné na internetu, bylo subjektivní zhodnocení, které spíš pˇripomínávyzdvihnutí jednoho produktu pˇredostatními, pokusil jsem se to srovnání vzít od zaˇcátku.Zaˇcaljsem tedy shánˇenímdostupných informací od výrobc ˚u,vzorových program ˚u,a na základˇenich jsem se snažil pochopit zp ˚usobjakým fungují a jak zaˇcíttvoˇritjednoduchou aplikaci sám. Docela dobrým zp ˚usobem,jak se seznámit s frameworkem, bylo zkoumání demo aplikací a jejich úprava. Takto máme k dispozici funkˇcníaplikaci, kterou si pouze upravíme aby splˇnovalanaše požadavky. Zároveˇntakto získáme i strukturu projektu a skripty sloužící k sestavení aplikace. Prvním z popisovaných framework ˚ubude webový framework Struts, u kterého si uve- deme jeho základní nedostatky. Následnˇesi pak uvedeme, jakým zp ˚usobemtyto nedostatky ˇrešíwebový framework Stripes, který vznikl právˇek vyˇrešenítˇechtonedostatk ˚ua je pˇrí- mou konkurencí frameworku Struts 2 (nástupce Struts). Nakonec si pˇredstavímeframework Jboss Seam, který ˇrešítvorbu webových aplikací trochu jiným zp ˚usobem(JSF místo JSP, ge- nerování kódu, EJB) než Struts a Stripes. Srovnání tedy bude provedeno mezi frameworky

9 4.1. PRÍSTUPAUTORAKFRAMEWORKˇ UM˚

Struts a Stripes a mezi Stripes a Jboss Seam. Vzorová aplikace bude implementována s po- mocí frameworku Stripes a frameworku Jboss Seam, pˇriˇcemžpˇripopisu bude kladen d ˚uraz na popis pracnosti a jednoduchost seznámení s frameworkem.

4.1.1 Vývojové prostˇredí Podobnˇejako si uživatelé poˇcítaˇc˚uvolí sv ˚ujoblíbený webový prohlížeˇc,volí si i programá- toˇrisvoje oblíbené vývojové prostˇredía pokud to jen trochu jde, snaží se používat pouze toto a plnˇeho využít. Ve stejné situaci jsem byl na zaˇcátkutaké, i když je pravda, že jsem mˇeldvˇevybraná vývojová prostˇredía sice a NetBeans. Pro lepší srovnání jsem se ale rozhodl, že vzorové aplikace a celková práce s frameworky by mˇelabýt demonstrována v prostˇredíjednom, a tak padla volba na Eclipse. Významným kritériem tedy byla ne jenom samotná tvorba aplikace v tomto prostˇredí, ale i zprovoznˇenídostupných vzorových aplikací jednotlivých framework ˚ua jejich upravi- telnost v prostˇredíEclipse. To všechno by ve výsledku mˇelovést k popisu, jak se dá zaˇcít s frameworkem úplnˇeod zaˇcátku,tj. od stažení potˇrebéhoSW až k první vlastní aplikaci.

10 Kapitola 5 Referenˇcníframework Jakarta Struts

Jedním z nejjednodušších webových framework ˚upostavených na návrhovém vzoru MVC je open-source webový framework Jakarta Struts. Jedná se o poˇrádnejpoužívanˇejšíframework pro tvorbu weobých aplikací. Tento framework nám poslouží jako referenˇcní,v ˚uˇcikterému pak bude provedeno srovnání. Struts není plnohodnotným MVC frameworkem, jelikož obsahuje pouze Control vrstvu. Front controller je implementován jako ActionServlet a Application controller je implemen- tován jako RequestProcessor. Tímto je umožnˇenonapojení dalších komponent (objektovˇe- relaˇcnímapování, pro asynchronní validace vstupních dat a podobnˇe),které ale již nejsou souˇcástíStruts. Základ Struts tvoˇrícentrální ActionServlet, který provádí volání tˇrídy obsluhující daný požadavek na základˇeurl a centrálního konfiguraˇcníhosouboru struts- config.xml. Jednou z nejvíce kritizovaných vlastností Strutsu je množství konfiguraˇcních soubor ˚ua složitý vývoj aplikace v týmu, jelikož je nutná koordinace pˇrieditování tˇechto konfiguraˇcníchsoubor ˚u.V pˇrípadˇerozsáhlejší aplikace je pak udržovatelnost a pˇrehlednost konfiguraˇcníchsoubor ˚uzásadním problémem. Na druhou stranu je k dispozici podpora mnoha WYSIWYG vývojových prostˇredí(NetBeans, Eclipse), které se snaží tuto problema- tiku alespoˇnˇcásteˇcnˇeˇrešit.Další nevýhodou je velké množství obslužních tˇríd,jelikož k ob- sluze každé uživatelské operaci je potˇrebnájedna Action tˇrída.Pˇripoužívání Struts není vývojáˇrodstínˇenod použitých prostˇredk˚u,a z tohoto d ˚uvoduje minimálnˇenutná znalost HTTP protokolu, HTML, JSP i jazyka Java, co u vˇetšíchprojekt ˚ubrání oddˇelenívývoje gra- fické stránky od aplikaˇcnílogiky.

11 Kapitola 6 Stripes

6.1 Pˇredstavení

Stripes je prezentaˇcníframework pro vývoj webových aplikací v Javˇe. Podnˇetempro vznik byla tyto nedostatky frameworku Struts:

• rozsáhlost konfiguraˇcníchsoubor ˚u

• udržovatelnost konfiguraˇcníchsoubor ˚u

• netriviální doba potˇrebnápro základní seznámení s frameworkem a vyrobení první funkˇcníaplikace

Stripes silnˇevyužívá anotace a generické datové typy, vyžaduje Javu 1.5 a webový kon- tejner podporující Servlets 2.4 a JSP 2.0.

6.1.1 Základní cíle frameworku

• usnadnit vývoj webových aplikací

• nabídnout jednoduché a zároveˇnrobustní ˇrešeníobvyklých problém ˚u

• minimalizovat objem poˇcáteˇcníchznalostí, které je tˇrebazískat pro vývoj pomocí Stripes

• umožnit jednoduché rozšiˇrováníframeworku

6.2 Pˇrínosy

• žádné externí nastavování stránek ˇci akcí, ActionBeans jsou nalezeny automaticky, konfigurují se anotacemi

• binding engine, který vytvoˇríi komplexní sítˇeobjekt ˚uz parametr ˚urequestu - na- pˇríkladz parametr ˚ujako jsou jméno, pˇríjmenía položky adresy umí sestavit objekt Clovˇekaˇ pod nˇejnavázat objekt Adresa a takto nám vyrobit pˇrímoinstanci JPA En- tity

12 6.3. STRUTS VS. STRIPES

• jednoduchý systém pro kontroly a konverze, s podporou lokalizace

• možnost znovupoužití ActionBeans pˇritvorbˇeview

• podpora indexovaných atribut ˚u- libovolná promˇennána formuláˇrim ˚užeobsahovat díky indexu víc hodnot

• podpora více událostí pro formuláˇre

• podpora pro upload soubor ˚u

• podpora postupného vývoje (možnost testovat JSP stránky již pˇredvytvoˇrenímActi- onBean)

6.3 Struts vs. Stripes

6.3.1 Množství soubor ˚ua konfigurace

6.3.1.1 Struts Vytvoˇreníjednoduché stránky s formuláˇremve Struts zahrnuje velké množství soubor ˚ua konfigurací:

• JSP stránka

• tˇríduodvozenou od Action s metodou execute()

• FormBean držící data

• zaregistrování form-bean a akcí do struts-config.xml, namapování URL na tˇrídua výsledk ˚una zobrazení JSP

• použítí forward

• záznam v tiles-defs.xml pro složení JSP stránky z více komponent (konfigurace tzv. Struts Tiles)

Navíc fakt, že veškerá konfigurace je v jedné monolitické XML konfiguraci, brání efektiv- nímu týmovému vývoji aplikace.

6.3.1.2 Stripes Stejná situace se ve Stripes ˇrešípomocí:

• JSP stránka

• ActionBean (tˇrídaimplementující tento interface) s anotacemi:

13 6.3. STRUTS VS. STRIPES

– @UrlBinding - pro mapování požadavku na ActionBean – @HandlesEvent - pro namapování událostí na metody ActionBeanu

Obˇeanotace slouží k pˇremapování,bez nich jsou vytvoˇrenystandardní mapování (podle jména Beanu, respektive podle jmen metod Beanu). Všechny informace jsou tedy uloženy na jediném místˇe.

• Metoda pro zpracování HTTP požadavku se nemusí jmenovat execute(), ale jakko- liv, jen musí být veˇrejnáa mít návratový typ Resolution. Takových metod m ˚užebýt v jednom ActionBean nˇekolik.Výsledkem metody není identifikátor, který by bylo nutné v konfiguraˇcnímsouboru namapovat na další akci nebo zobrazení JSP, ale ob- jekt Resolution, který pˇrímourˇcuje,kam se pˇredáˇrízenía jeho konkrétní podtyp specifikuje, zda se ˇrízenípˇredávnitˇrnˇe(ForwardResolution) nebo pˇresmˇerováním prohlížeˇce(RedirectResolution).

• Úlohu FormBean zastává opˇetActionBean

• Stripes obsahuje i vylepšený nástroj pro skládání stránek, ekvivalentní Struts Tiles. Odpadá nutnost mít samostatný koniguraˇcnísoubor tiles-defs.xml. StaˇcívytvoˇritJSP stránku se šablonou stránky () a v dalších JSP stránkách se pak na tuto šablonu odkazovat ().

6.3.2 Postupný vývoj 6.3.2.1 Struts Struts vyhodí vyjímku, když k v JSP stránce nenalezne pˇríslušnýform bean.

6.3.2.2 Stripes Lze zkoušet jednotlivé ˇcásti,vazby jsou volnˇejší.

6.3.3 Vnoˇrenéatributy 6.3.3.1 Struts Struts umožˇnujívnoˇrovatatributy, a pak se na nˇeodvolávat. Avšak v pˇrípadˇe,že máme napˇríkladatribut ve formuláˇriosoba.adresa.radek1, Struts se jej pokusí nastavit i v pˇrípadˇe, že osoba, ˇciadresa má hodnotu null. Takže je zapotˇrebínejdˇrívevytvoˇritinstance objekt ˚u, na kterých chceme používat vnoˇrenéatributy.

6.3.3.2 Stripes Stripes tyto objekty, pokud mají bezparametrické konstruktory, vytvoˇrí,spojí, uloží do Acti- onBeanu a nastaví na nich atributy. Navíc podporuje tvorby všech druh ˚ukolekcí.

14 6.3. STRUTS VS. STRIPES

6.3.4 Validace

6.3.4.1 Struts Struts Validator vyžaduje další XML konfiguraci, která se musí udržovat v souladu s for- muláˇrem.Struts Validator není pˇrímospojen s konverzí typ ˚u.Nejdˇrívese napˇríkladpracnˇe kontroluje, že String obsahuje datum a pak se musí provést samotná konverze.

6.3.4.2 Stripes Stripes staví kontrolu pˇrímona konverzi. Deklarativní definicí, tj. pomocí anotací @Validate- NestedProperties a @Validate, se dˇelajíjednoduché kontroly, napˇr.zda je položka vyplnˇena, kontrola délky, jednoduchý regulární výraz atd. Poté se provede konverze. Pokud tato selže, vygenerují se chybové hlášky. Proto ke kontrole hodnot staˇcínapsat kvalitní konvertor, nebo využít vestavˇené. Složitˇejšíkontroly je možné dát do samostatných metod s anotací @ValidationMethod.

6.3.5 Null

6.3.5.1 Struts Když z textového pole z FormBean, které uživatel nevyplnil, naˇcítámeatribut typu int, Struts i Stripes vyplní implicitnˇehodnotu 0. Odlišné chovaní je však u zpracování typu Integer. Struts opˇetdoplní implicitní 0, Stripes hodnotu null. Pokud dojde ke znovuzobra- zení formuláˇre,Struts na místo prázdného pole (tak jak jej uživatel odeslal) doplní 0. To lze obejít jen použitím Stringu a vlastnoruˇcníkonverzí.

6.3.5.2 Stripes Stripes na základˇeomezenosti formuláˇrovýchHTML prvk ˚upˇredpokládá,že prázdné pole znamená nevyplnˇenouhodnotu, tedy null. ActionBean tedy není nucen sám interpretovat prázdný atribut typu String.

6.3.6 Více akcí

6.3.6.1 Struts Ve Struts je obtížné vytvoˇritformuláˇr,který by mˇelvíce tlaˇcítek,kde každé vyvolává jinou akci. DispatchAction vyžaduje aby všechna tlaˇcítkamˇelastejnou hodnotu atributu name a pro vyvolání akce používá atribut value (nápis na tlaˇcítku),což zp ˚usobípotíže pˇrilokalizaci.

6.3.6.2 Stripes Stripes podporuje více akcí. Používá pˇrímoatribut name, a podle nˇejspustí správnou me- todu.

15 6.4. KONFIGURACE

6.3.7 HTML znaˇcky 6.3.7.1 Struts Struts používá ponˇekuddelší jména pro znaˇckyjako jsou styleClass a nebo property. Dlouhé názvy znaˇcekm ˚užoubýt nepraktické a nepˇrehledné.

6.3.7.2 Stripes Stripes používá jednodušší jména pro znaˇckya jejich atributy, napˇr.class místo styleClass, name místo property atd. Vˇetšinaatribut ˚uje velmi podobných ˇcishodných. Pˇrevodz HTML znaˇcekna Stripes znaˇckyje tedy jednodušší, než je tomu u Struts.

6.4 Konfigurace

Stripes se zavádí pomocí filtru StripesFilter a servletu Servlet Dispatcher. Dále je potˇreba do seznamu knihoven (classpath) pˇridatstripes.jar, common-logging.jar, cos.jar (pro upload soubor ˚u)a ognl.jar (Object Graph Navigation Language, využívané pro nastavování atri- but ˚uActionBean ˚u).Všechny ActionBeans si Stripes nalezne automaticky pˇrinasazení apli- kace do webového kontejneru a tato operace m ˚užebýt ˇcasovˇenároˇcná,zvlášt’ pokud apli- kace obsahuje velké množství knihoven. Nakonec je zapotˇrebívytvoˇritStripesResources.properties, který obsahuje lokalizované chybové hlášky vzniklé pˇrivalidaci a konverzi hodnot. PˇríkladStripesResources.properties: converter.number.InvalidNumber=Hodnota ({1}) zadaná v poli {0} není císlo!ˇ

Stripes nepotˇrebuježádné konfiguraˇcnísoubory, protože využívá:

• anotace zavedené v Java 5.0

• princip convention-over-configuration zavedený v Ruby-On-Rails - není napˇríklad nutné nastavovat cesty, pokud se použije standardní uspoˇrádánísoubor ˚u

16 Kapitola 7 Jboss Seam

7.1 Pozadí

Jak již název tohoto frameworku napovídá, Jboss Seam pochází ze stejné dílny jako aplikaˇcní server Jboss, konkrétnˇetedy od Middleware. Jedná se o open-source framework licencován pod LGPL (GNU Lesser General Public License), která v podstatˇeznamená, že každému je povoleno kopírovat a šíˇritdoslovné kopie tohoto licenˇcního dokumentu, ale není dovoleno jej mˇenit.V praxi nám to pak nabízí možnost tento framework používat bez nutnosti zakoupení licencí, co je urˇcitˇevýznamným faktorem pˇrivolbˇeframeworku hlavnˇe pro komerˇcníprojekty. Duchovním otcem a vedoucím projektu není nikdo jiný než Gavin King, iniciátor objek- tovˇerelaˇcníhoframeworku Hibernate, který se tˇešívysoké popularitˇemezi programátory Java aplikací. Gavin King je zároveˇnvedoucím specifikaˇcníkomise pro WebBeans, která je specifikací pro sjednocení JSF a EJB komponentního modelu a která by mˇelabýt budouc- ností ve vývoji webových aplikací na platformˇeJava EE 6. Tímto se pro Jboss Seam jako základ WebBeans otevírají možnosti integrace pˇrímodo platformy Java 6, co by mohlo do budoucna pˇrínésturˇcitˇezajímavé možnosti využití.

7.2 Historie verzí

• JBoss Seam 1.2

– 1.2.1 GA (27.03.2007) - bˇežínad aplikaˇcnímserverem Jboss verze 4.0, vyžaduje ale instalaci s pomocí JEMS installer spolu s ejb3 nebo ejb3-clustering profile. Nestaˇcítedy pouze stáhnout a nakonfigurovat základní verzi aplikaˇcníhoser- veru, je nutná instalace.

• JBoss Seam 2.0 - bˇežínad JBoss Application Server 4.2, pro napsaní a sestavení apli- kace ale není AS vyžadován

– 2.0.2.SP1 (28.05.2008) - vylepšení výkonu, Seam-Gen využívá nástroj Maven – 2.0.3.CR1 (13.06.2008) - obsahuje framework Facelets pro Jboss verze 5

• JBoss Seam 2.1

17 7.3. PRÍNOSYˇ

– 2.1.0.SP1 (13.06.2008) - vylepšený Seam-Gen – 2.1.1.CR2 (08.12.2008) - podpora OpenId (standard pro externí autentizaci ve webových aplikacích), vylepšení výkonu, prozatím poslední verze

7.3 Pˇrínosy

Jboss Seam je vlastnˇejakýmsi propojením J2EE frameworku JSF (Java Server Faces) pro pre- zentaˇcnívrstvu a EJB (Enterprise Java Beans) pro aplikaˇcnívrstvu. Pˇripoužití JSF a EJB bylo donedávna nezbytností vkládat mezi tyto dva frameworky další tˇrídy, které sice umožˇno- valy propojení vyzuální ˇcástis logikou aplikace, ale s obchodní logikou aplikace pˇrímone- souvisely a dˇelalynávrh aplikace složitˇejším.Pˇríklademtakových tˇrídjsou tzv. DTO (Data Transfer Objects) pro pˇrenosdat mezi vrstvami aplikace. Jedním z hlavních pˇrínos˚uje právˇe eliminace nutnosti vytváˇrettato propojení. Pokud by si ale nˇekdopˇráltyto ˇcástipsát ruˇcnˇe, je tato možnost v tomto frameworku zachována. V praxi se pak programátor vˇenujevíce programování samotné logiky aplikace, než podp ˚urnýchtˇríd,což s sebou nese jak snížení chybovosti tak i zvýšení produktivity programátor ˚ua udržitelnosti aplikací. Druhým, neménˇevýznamným, pˇrínosemje pak tzv. správa stavovosti (Stateful Manage- ment). PˇredJboss Seam byl jediným prakticky použitelným zp ˚usobempro ukládání stavo- vých informací použití HTTP Session. Tímto zp ˚usobembylo možné ˇrešitproblém bezesta- vovosti HTTP protokolu, co s sebou pˇrínášeloproblémy se správou dlouhých sezení (pro- blémy s alokací pamˇeti).Pokud se navíc pro ukládání statových informací navíc využívala i databáze, vedlo to ke zpomalování reakcí aplikace na uživatelské podnˇetya k zvýšené zátˇeži databáze. AutoˇriJboss Seam se tedy inspirovali frameworkem EJB a pro ukládání stavových informací použili stavové EJB komponenty (Stateful EJB Session Beans). Použítí EJB pro jed- noduché aplikace se m ˚užejevit jako povˇestný"kanon na vrabce", a dokonce pak m ˚uževést i k snížení výkonu aplikace díky režii EJB kontejneru aplikaˇcníhoserveru. Z tohoto d ˚uvodu z ˚ustalazachována možnost naprogramovat ukládání stavových informací s použitím HTTP Session. Rozhodnutí tedy i v tomto pˇrípadˇez ˚ustávána programátorovi, ˇcímžho nenutí mˇe- nit svoje zaužívané postupy. Vzhledem k tomu, že používání anotací se v prostˇredí Java 5 osvˇedˇcilojako vhodný pro- stˇredekk zpˇrehlednˇenía zjednodušení kódu, pˇrinášíJboss Seam rozšíˇreníi v této oblasti. Toto rozšíˇreníspoˇcíváv pˇridáníanotací specifických pro Jboss Seam k EJB komponentám. Tyto anotace pak promˇeníJPA Entity Beany na model a EJB Session Beans na Event Han- dlery (tzv. koncept Unified Components). Tímto odpadá nutnost používat tradiˇcníCont- roller (pˇripoužití JSF pro View jsou to JSF Backing Beans) v MVC (Model-View-Controller) návrhovém vzoru. K dalším nesporným pˇrínos˚umpoužití Jboss Seam pak patˇrí:

• Aplikaˇcníˇcást

– správa transakcí a výjimek

18 7.3. PRÍNOSYˇ

– správa komponent a jejich stavu v r ˚uznýchscopes/kontextech – injekce, outjekce a bijekce komponent – podpora aplikaˇcníchkonverzací – podpora tzv. workspaces, umožˇnujícíautonomní funkci aplikace ze dvou zálo- žek téhož browseru (každá záložka má vlastní tzv. conversation-id) – integrace ˇrízeníaplikace business procesy pomocí frameworku JBoss jBPM (Java Business Process Management) – podpora pro JBoss Drools a autorizaci pomocí tzv. sémantických pravidel – jednoduché programování CRUD (Create-Retrieve-Update-Delete) databázo- vých aplikací v podobˇepˇredpˇripravenýchtˇrída komponent v Seam CRUD Ap- plication Framework – podpora pro EJB3 komponenty stejnˇetak jako obyˇcejnéPOJO (Plain Old Java Object) objekty – podpora pro testování - obsahuje vestavˇenýaplikaˇcníserver JBoss a integruje testovací framework TestNG – podpora konverzací i ve webových službách - libovolná Seam komponenta m ˚užebýt webovou službou – integrace jakyka Groovy - objektovˇeorientovaného jazyka, který je skriptovací alternativou k jazyku Java – podpora pro Hot Deploy - nasazování zmˇenbez nutnosti restartování celé apli- kace

• Prezentaˇcníˇcást

– injekce Faces Messages pro pˇredánízpráv z EJB uživateli - jedná se o pohodlnou formu jak zobrazovat výsledek provedené akce uživateli – vylepšení JSF o sadu komponent a UI znaˇcek – JBoss EL - rozšíˇreníUnified Expression Language o pˇrímévolání libovolné me- tody backing bean komponenty z view – Seam filter - automatická správa parametr ˚uHTTP dotazu a trigger akcí pˇrizob- razení JSF stránek – podpora pro Facelets jako view technologii – podpora pro jako alternativy k JSF – automatické vystavování kolekcí dat jako DataModel JSF tabulek (tzv. Seam Data-Binding Framework) – podpora generování e-mail ˚u,PDF a RichText dokument ˚u

19 7.4. PODPORA VÝVOJE

– propojení validací modelu s prezentaˇcnívrstvou (projekce Hibernate validátor ˚u do JSF formuláˇr˚u) – podpora Bookmarkable Web Pages - možnost jednoduše vytvoˇritstránky apli- kace odpovídající REST (Representational State Transfer) konceptu pro design distribuované architektury – definice vlastních chybových stránek pro jednotlivé typy vyjímek – debug stránka JBoss Seam Debug Page s konfigurovatelným obsahem (pˇrehled zahájených konverzací, kontexty jednotlivých kontextech, pˇrehlednývýpis vý- jimek i s pˇríˇcinamiatd.) – podpora pro open-source AJAX (Asynchronous JavaScript and XML) ˇrešenípo- stavených na JSF - JBoss AJAX RichFaces, ajax4jsf, ICEfaces

7.4 Podpora vývoje

Vˇetšinaframework ˚u,které nabízí víc než jen triviální rozšíˇrenípoužitých koncept ˚ua fra- mework ˚u,vyžaduje pro svoji ˇcinnostvˇetšímnožství knihoven (konkrétních verzí) a kon- krétní strukturu samotné aplikace. Vyvinout i jednoduchou aplikaci bez podpory vývojo- vého prostˇredía nebo dostateˇcnˇerozsáhlých pˇríklad˚um ˚užebýt pro programátora doslova noˇcním ˚urou. Naštˇestíse ale u Jboss Seam rozhodl Red Hat jít trochu jiným smˇerem. Souˇcástídistribuce je 23 vzorových aplikací, které byly donedávna vystaveny pˇrímona stránkách projektu. Tyto pˇríkladyjsou dobˇreokomentované (i složitˇejší aplikace Seam Booking se dá díky tomu dobˇrepochopit), a díky použití Maven jsou i snadno sestavitelné a spustitelné na aplikaˇcním serveru Jboss 4.2. Na obrázku 7.1 je jedna z obrazovek aplikace Seam Booking, na které m ˚užemev pravé ˇcástividˇetdetailní popis použité vlastnosti frameworku. Další pom ˚uckouje rozšíˇreníJboss Tools pro vývojové prostˇredíEclipse, které obsahuje podporu Jboss Seam. Toto rozšíˇrenípomáha pˇrizakládání projektu, urˇcujestrukturu pro- jektu, zjednodušuje nasazení a dokonce díky integraci s aplikací seam-gen dovoluje i gene- rování vzorových formuláˇr˚ua aplikaˇcnílogiky pro manipulaci s databází. S pomocí seam- gen je pak tvorba jednoduché aplikace pro manipulaci dat v databází triviální, jelikož se staˇcínapojit na již existující databázová schémata a seam-gen vygeneruje základní obra- zovky i obslužní kód. Jako odrazový m ˚ustekpro programátory v Jboss Seam je to pˇríjemné zjednodušení. SpoleˇcnostRedHat dokonce pˇricházís upravenou verzí vývojového prostˇredíEclipse, nazvanou RedHat Developer Studio, která má dokonce Jboss Seam pˇrimointegrováno. Toto vývojové prostˇredíje narozdíl od Eclipse již placené, byla ale uvolnˇenai verze Release Can- didate 1, kterou je možné vyzkoušet i bez zakoupení licence. Tato verze vývojového studia ale není již nadále podporována výrobcem, a nelze ji použít pro komerˇcníúˇcely.

20 7.5. STRUKTURA SEAM PROJEKTU

Obrázek 7.1: Seam Booking - náhled obrazovky

7.5 Struktura Seam projektu

Jboss Seam pˇredepisuje,jak má vypadat struktura projektu a samotného EARu (Enterpripse ARchive - zabalená aplikace). Po sestavení dostaneme následující strukturu: mywebapp.ear |- SeamPhoneBook.war |- web pages (*.xhtml Facelets) |- CSS |- images |- WEB-INF |- web.xml - WEB deployment descriptor |- faces-config.xml - standard JSF configuration |- navigation.xml - JSF page navigation rules

21 7.5. STRUKTURA SEAM PROJEKTU

|- components.xml - Seam specific options |- pages.xml - Seam pages settings (page flow, actions) |- jboss-web.xml - Jboss specific deployment descriptor |- log4j.xml - log4j configuration |- classes |- messages_en.properties |- META-INF |- orm.xml |- persistence.xml |- lib |- jsf-facelets.jar - Facelets library |- jboss-seam-debug.jar - Seam Debug library |- jboss-seam-ui.jar - Seam UI libary |- antlr.jar - tag support |- ajax4jsf-1.1.1-SNAPSHOT.jar |- commons-beanutils-1.7.0.jar |- commons-collections-3.1.jar |- commons-digester-1.6.jar |- jboss-seam-debug.jar |- jboss-seam-ioc.jar |- jboss-seam-mail.jar |- jboss-seam-pdf.jar |- jboss-seam-remoting.jar |- jboss-seam-ui.jar |- jsf-facelets.jar |- oscache-2.3.2.jar |- richfaces-3.0.1-SNAPSHOT.jar |- SeamPhoneBook-ejb.jar |- Java classes |- seam.properties - prázdný, existuje-li, hledá Seam komponenty |- components.properties |- META-INF |- persistence.xml - JPA settings |- ejb-jar.xml - EJB deployment descriptor |- antlr-2.7.6.jar |- antlr-3.0ea8.jar |- commons-jci-core-1.0-406301.jar - Jakarta Commons JCI Core |- commons-jci-janino-2.4.3.jar - Jakarta Commons JCI Compiler - Janino |- drools-compiler-3.0.5.jar |- drools-core-3.0.5.jar |- el-ri.jar - Expression Language Reference Impl. |- janino-2.4.3.jar |- jboss-seam.jar - Seam Core library |- jbpm-3.1.4.jar - JBPM - Java Business Process Management META-INF SeamPhoneBook-ejb.jar SeamPhoneBook.war security.drl

22 7.6. VLASTNOSTI JBOSS SEAM PODROBNEJIˇ stringtemplate-2.3b6.jar |- META-INF |- application.xml - Mail EAR deployment descriptor |- jboss-app.xml - JBoss specific descriptor

7.6 Vlastnosti Jboss Seam podrobnˇeji

V této kapitole se podíváme na zajímavé vlastnosti tohoto frameworku podrobnˇeji.

7.6.1 Spojení EJB3 komponenty a JSF stránky

Spojení aplikaˇcnía prezentaˇcnívrstvy je pˇrimoˇcaré.Na obrázku 7.2 je uveden pˇríkladstránky, na které vidíme pˇrímévolání metody a pˇredáníparametr ˚udo prezentaˇcnívrstvy.

password

* required fields

Obrázek 7.2: Ukázka napojení aplikaˇcnía prezentaˇcnívrstvy

V uvedeném výtahu ze vzorové aplikaci vidíme pˇríménavázání položky password, ve formuláˇrina položku usersHome.instance.password, která je pˇrímopoložkou entity Users. Tímto nám odpadá nutnost dopisovat jakýkoliv kód pro pˇrenosz/do prezentaˇcnívrstvy. Tlaˇcítkoje pak pˇrímonapojeno na metodu usersHome.persist, která je dokonce díky EJB3 již implementována, tudíž i v tomto pˇrípadˇebylo provedeno maximální možné zjednodušení. Projevuje se tady síla využítí JPA a minimalizace ruˇcnˇepsaného kódu. Pokud tato metoda má návratový typ String, pak je standardnˇedle specifikace JSF event handleru klíˇcemdo JSF

23 7.6. VLASTNOSTI JBOSS SEAM PODROBNEJIˇ

Page Flow a udává, na kterou JSF stránku má být uživatel pˇresmˇerován na základˇevýsledku provedení metody.

7.6.2 Scopes/kontexty pro Seam komponenty Jak již bylo uvedeno, Seam pˇrínášímožnosti ukládání informací o sezení do vlastních kon- text ˚u.Tˇechtokontext ˚uje dokonce nˇekolik: • Stateless – bezestavové komponenty • Event – pr ˚ubˇehjednoho JSF requestu • Page – komponenta vztažená ke stránce, je pˇrístupnábˇehemvšech akcí odeslaných z jedné JSF stránky • Conversation – jádro Seamu, konverzace = série požadavk ˚uza úˇcelempˇredemda- ného cíle • Session – správa jako HTTP Session Object, platné po dobu platnosti sezení • Business process – tento kontext slouží pro dlouhotrvající business procesy spravo- vané pomocí JBoss jBMP frameworku, tento kontext m ˚užebýt rozprostˇrendokonce mezi více uživatel ˚u • Application – globální kontext držící statické informace, není vztažen k webovým uživatel ˚um Kontext dané Seam komponenty a dokonce i JPA Entity se pak pouze nadeklaruje pomocí anotace @Scope (napˇríklad@Scope(SESSION)) a to následnˇezaruˇcuje,že se poté všechny injekce a outjekce s touto komponentou budou dít v Session kontextu. Stavovost komponent mimo jiné také eliminuje vliv tlaˇcítkaZpˇetv prohlížeˇci.Nikdy se nestane, že by uživatel po kliknutí na tlaˇcítko„Zpˇet“dostal neplatný stav aplikace.

7.6.3 Seam konverzace Jedním ze zajímavých kontext ˚u,které nám Seam pˇrínášíje Conversation. Dle definice je konverzace (Long Running Conversation) sousledností nˇekolikapožadavk ˚u,které v koneˇc- ném d ˚usledkutvoˇrícelek, mající nˇejakýcíl. Takovým cílem m ˚užebýt odbavení nákupního košíku nebo dokonˇcenípr ˚uvodce. Konverzace je ˇrízenaanotacemi, komponenta je oznaˇcenajako @Conversational a me- tody spouštˇejícía ukonˇcujícíkonverzaci jako @Begin a @End. Bˇehemkonverzace jsou auto- maticky dostupné objekty v kontextu konverzace. Rozšíˇrenímkonverzací na tzv. konkurentní konverzace (Concurrent Conversations) se dostáváme k tzv. Workspace. V jednom prohlížeˇcim ˚užemena více záložkách provádˇet více konverzací (vyˇrizovánívíce objednávek najednou), pˇriˇcemžpro každou záložku máme vlastní konverzaci. Tato možnost je dána pˇresunemstavovosti z HTTP Session do stavové EJB komponenty. Mezi jednotlivými konverzacemi je pak možné programovˇekomunikovat.

24 7.6. VLASTNOSTI JBOSS SEAM PODROBNEJIˇ

7.6.4 Validace vstupních dat formuláˇr˚u

Jednou z ˇcastovyužívaných vlastností formuláˇr˚uje kontrola jejich vyplnˇení.U tˇechtokon- trol se definovaly kontrolované položky pˇrímo v definicích stránky a následnˇese pak po- dobné kontroly definovaly opˇetovnˇena aplikaˇcníúrovni u JPA Entit. Díky propojení JSF a EJB se Seamu povedlo odstranit tuto duplicitu a definice validaˇcníchkritérií si JSF stránky pˇrebírajípˇrímoz JPA Entit. Formuláˇrovéznaˇckystaˇcípouze uzavˇrítdo nepárové znaˇcky . Tento krok pˇrispívák udržovatelnosti kódu. Podporovány jsou validace definované knihovnou Hibernate Validators, kde jsou imple- mentovány všechny potˇrebnéanotace od rozsahových @Length, @Max, @Min, pˇresˇcasové @Past, @Future, specializované jako @Email, @Size, @Range až napˇr.po nastavitelný @Pat- tern.

7.6.5 Tvorba CRUD aplikací

Aplikace manipulující s databází ˇcastoobsahují tzv. CRUD (Create-Retrieve-Update-Delete) operace. K implementaci tˇechtooperací se používá návrhový vzor DAO (Data Access Ob- ject), jednotlivé objekty jsou ale vˇesmˇestotožné. Jboss Seam proto obsahuje již pˇredpˇripra- vené komponenty, ze kterých lze DAO objekty sestavovat. Máme tedy na výbˇer, zda chceme CRUD operace implementovat pomocí Seam tˇrídy EntityHome, a nebo dokonce se CRUD operace dají implementovat deklarativnˇev XML souboru components.xml. Samozˇrejmostíje zachování klasického DAO pˇrístupus nativním SQL, dokonce tento pˇrístupSeam, v pˇrípadˇeaplikace generované s pomocí seam-gen, sám používá.

7.6.6 Integrace Business Process Managementu

Vˇetšinapodnikových aplikací implementuje business procesy a pravidla. Business proce- sem rozumíme obvykle nˇejakýúkol, sled událostí, který musí být proveden v daném poˇradí r ˚uznýmiuživateli. Business procesy a pravidla jsou definovány analytikem v analytické fázi projektu. O míˇrenaplnˇenídefinicí se pak rozhoduje na základˇetestování aplikace (whitebox a blackbox testování). Propojení analytické a vývojáˇrsképráce se snaží dosáhnout v sou- ˇcasnostipopulární koncepty BPM (Business Process Management) a SOA (Service Orien- ted Architecture). Ty umožˇnujíanalytikovi, na základˇegrafické vizualizace implementace, zkontrolovat, zda jsou business procesy implementovány korektnˇe,dokonce pak je možné business pravidla redefinovat graficky, bez zásahu do kódu. Implementace konceptu BPM je v pˇrípadˇeSeamu ˇrešenapomocí jBPM, který opˇetpo- chází od skupiny Jboss. V praxi to pak m ˚užeznamenat napˇr.nadefinování akce uživatelského rozhraní (napˇr. kliknutí na tlaˇcítkowebové aplikace), která spustí business process. Metody, které tento proces spouštˇejí,potom staˇcípouze oznaˇcitanotací @CreateProcess. Metody, které startují nebo ukonˇcujíurˇcitýúkol oznaˇcímeanotacema @BeginTask a @EndTask. Tímto máme na- definován sled úkol ˚u,díky ˇcemužpak jBPM provádí business procesy. Seam navíc obsahuje

25 7.6. VLASTNOSTI JBOSS SEAM PODROBNEJIˇ speciální UI znaˇcky, které umožˇnujívypisovat informace o procesech (stavové informace).

7.6.7 JBoss Expression Language Jboss Seam pˇrínášírozšíˇreníi v pˇrípadˇeUnified Expression Language z JSP a JSF. Jako no- vinku máme k dispozici možnost vyvolávání metod z view pomocí teˇckovénotace a do- konce možnost tˇemtometodám pˇrímoz View pˇredávatparametry. To m ˚uževést opˇetke zjednodušení tvorby aplikace, jelikož odpadá nutnost mezivrstev. Pro rozsáhlejší aplikace je ale potˇreba,z d ˚uvoduudržovatelnosti a pˇrehlednostikódu, používat tyto zp ˚usobyvolání metod s rozvahou. Obcházení tˇrívrstvéarchitektury pomocí takovýchto zkratek by se nám nemuselo z dlouhodobého hlediska vyplatit. Plugin v Jboss Tools nám navíc umožˇnujei automatické doplˇnovánífunkcí v EL výra- zech, co vývojáˇríurˇcitˇeocení. Jboss Expression Language je navíc možné využívat i k defi- nici parametr ˚unapˇr.v OQL dotazech, v XML konfiguraˇcníchsouborech nebo v pravidlech JBoss Rules.

7.6.8 Generování PDF a e-mail ˚u Seam obsahuje knihovnu jboss-seam-pdf.jar pro vytváˇrení PDF dokument ˚ua knihovnu jboss-seam-mail.jar pro tvorbu e-mail ˚u.Díky tˇemtoknihovnám a nˇekolikaUI znaˇckám(roz- šíˇrenéJSP znaˇcky)m ˚užemenadefinovat Facelets stránku, kterou nám pak Seam pˇrevede do PDF formátu a nebo e-mailu. Odpadá tak nutnost používat dodateˇcnéšablonovací fra- meworky jako iReport nebo FreeMarker pro tvorbu tisknutelných dokument ˚u.Na obrázku 7.3 je uveden pˇríkladdefinice PDF dokumentu s využitím Jboss Seam. Uživatel #{user.id}

Obrázek 7.3: Pˇríkladdefinice PDF dokumentu

7.6.9 Integrace s JBoss Rules U vˇetšinywebových aplikací se nevyhneme ˇrízenípˇrístupupomocí seznam ˚uuživatel ˚ua uživatelských rolí. Problémem se pak stává fakt, že definice pˇrístupovýchpráv pak máme na nˇekolikamís- tech aplikace, nˇekterédokonce duplicitnˇe.Pˇríklademm ˚užebýt definice povolených akcí pro danou roli, podmínˇenégenerování ˇcástístránek dle role pˇrihlášenéhouživatele anebo

26 7.6. VLASTNOSTI JBOSS SEAM PODROBNEJIˇ oznaˇckováníjednotlivých metod na stranˇebusiness logiky pro ˇrízenípˇrístupuk tˇemtome- todám. Navíc pak samotná autentizace a autorizace (vyhledání uživatele podle zadaného jména, ovˇeˇreníhesla a pˇridˇelenípráv) bývá ˇrešenaprogramovˇea nˇekdytaky na více mís- tech. Udržovat a nebo dokonce modifikovat takto nastavenou autorizaci je pak nesnadný úkol. Tuto situaci se snaží ˇrešitframework Jboss Rules (v minulosti pod názvem Drools) po- mocí konceptu Rule-Based Security. Tento koncept je založen na tzv. pravidlech (Rules), které definují pˇrístupovápráva k atomickým akcím (tˇrebauživatel m ˚užeprohlížet historii, smí editovat hesla a podobnˇe).Takto nadefinovaná pravidla lze poté využívat v rámci celé aplikace. Jboss Seam tento framework integruje, je tedy možné ho využít v plném rozsahu. Pˇríkladdefinice pravidla je uveden na obrázku 7.4 Pˇredmetodu kterou chceme ˇríditpomocí Jboss Rules pak staˇcídoplnit anotaci @Rest- rict#{s:hasPermission(parametry)} a pravidlo pak nadefinovat v konfiguraˇcnímsouboru. rule CanUserEditContract when c: PermissionCheck(name == "manager", action == "editContract") Role(name == "admin") then c.grant() end;

Obrázek 7.4: Pˇríkladdefinice pravidla

Parametry pro metodu hasPermission m ˚užemevyplˇnovatsami a nebo je Seam nadefi- nuje jako název komponenty a metody. Pomocí tˇechtoparametr ˚upotom volíme, které pra- vidlo se má aplikovat, tudíž jméno pravidla je libovolné. Toto ˇrízenípravidly m ˚užemepoužívat i na prezentaˇcnívrstvˇea mít tak definici pravidel na jednom místˇea to v konfiguraˇcnímsouboru frameworku Jboss Rules.

27 Kapitola 8 Praktické srovnání

8.1 Požadavky na vzorovou aplikaci

Pro srovnání praktické použitelnosti jednotlivých framework ˚ujsem se rozhodl vytvoˇritjed- noduchou webovou aplikací pˇredstavujícítelefonní seznam. Tato aplikace bude nabízet (funkˇcnípožadavky):

• pˇrihlášeníuživatele pomocí jména a hesla

• správu uživatelských úˇct˚u(pˇridání,mazání a modifikace uživatelského úˇctu)

• pˇridávánítelefonních ˇcísel,pˇriˇcemžtelefonní ˇcíslose bude skládat z pˇredvolbya ˇcíslasamotného

• zobrazení seznamu evidovaných telefonních ˇcísel

• úprava evidovaných záznam ˚u

• mazání telefonních ˇcísel

• ukládání dat v relaˇcnídatabázi - uživatelských úˇct˚ui telefonních ˇcísel

Dále tato aplikace bude splˇnovattyto požadavky (nefunkˇcnípožadavky):

• zamezení manipulace s daty bez pˇrihlášení

• umožnit odlášení

• logování vlastní ˇcinnosti

• možnost volby jazyka - lokalizace do ˇceštinya angliˇctiny

Cílem ale není tvorba dokonale odladˇenéaplikace, jako spíše pˇredvedenímožností fra- mework ˚ua popis pracnosti tvorby dané aplikace. Obˇevzorové aplikace budou využívat fyzický datový model uvedený na obrázku 8.1.

28 8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

Obrázek 8.1: Datový model

8.2 Proces tvorby vzorových aplikací

8.2.1 Aplikace SeamPhoneBook

Pro seznámení s frameworkem Jboss Seam velice dobˇreposlouží demo aplikace, které jsou pˇrímosouˇcástidistribuce frameworku. Tyto demo aplikace byly dokonce nˇejakoudobu (do srpna 2008) dostupné i online pˇrimona domovské stránce projektu, takže bylo možné si jednotlivé pˇríkladyvyzkoušet pˇrímoze stránek a až následnˇesi je zprovoznit u sebe. Nejzajímavˇejšíz tˇechtodemo program ˚ubyla z mého pohledu docela komplexní aplikace SeamBooking. Jednalo se o rezervaˇcnísystém, který je výbornˇeokomentovaný, u každé operace je popsáno co dˇeláa jakým zp ˚usobemje realizována. I vzhledem ke komplexnosti funkcionality aplikace (pˇrihlášení,vyhledávání hotelu, zadávání rezervaˇcníchúdaj ˚uaž po zobrazení rezervací) byl kód pˇrehlednýa pochopitelný. Ke zprovoznˇenítˇechtodemo aplikací na vlastním poˇcítaˇcije nutné si kromˇevývojového prostˇredía Javy nainstalovat a seznámit se s programem Maven. Maven je nástroj pro au- tomatizováné sestavování aplikací, jedná se o následovníka nástroje Ant, na kterém budou vzorové aplikace postaveny. Zprovoznˇenía sestavení tˇechtovzorových program ˚utedy žádá trochu zkoumání, možná by nebylo na škodu, kdyby demo aplikace byly dostupné rovnou jako projekt v Eclipse s využitím Antu.

29 8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

Zajímavým produktem, který mi výraznˇeulehˇcilprácí s tímto frameworkem, je vývojové prostˇredíRedHat Developer Studio. Toto vývojové prostˇredív sobˇeintegruje Jboss Tools a Seam-Gen a tím nabízí pˇrimopodporu pro Jboss Seam. Jboss Tools slouží ke správˇeapli- kaˇcníhoserveru Jboss pˇrímoz vývojového prostˇredí,možnost automatického nasazování aplikací. Zároveˇntoto rozšíˇrenípomáhá pˇriladˇeníaplikací, jelikož je možné ladit aplikaci ve vývojovém prostˇredípˇrímonad aplikaˇcnímserverem, a to vše bez zdlouhavého nasta- vování. Seam-gen je nástroj pro zakládání projekt ˚ua generování jednoduchých stránek pro pˇristupk databázi. Díky tomuto prostˇredíje sestavení vlastní aplikace dokonce rychlejší, než rozchození pˇriloženýchdemo program ˚u.Pro tvorbu vzorových aplikací jsem se tedy rozhodl nahradit Eclipse prostˇredímRedHat Developer Studio. Po nainstalování a spuštˇeníRedHat Developer Studia verze CR1 jsem si zvolit adresáˇr, který ma být tzv. "Workbench", tj. pracovní plochou, do které se ukládají všechny projekty. Obsah tohoto adresáˇrese nachází na pˇriloženémmédiu k této práci. V tomto adresáˇribude zároveˇnumístnˇenai databáze k tˇemtovzorovým aplikacím. Pro vytvoˇreníprojektu pro SeamPhoneBook jsem použil rozšíˇreníSeam-Gen, které je souˇcástítohoto vývojového prosˇredí.Založil jsem si Seam Web Project a pojmenoval ho Se- amPhoneBook. Pˇrizakládání projektu jsem si v pr ˚uvodcizvolil použití Java Persistence, jelikož ho využijeme pro napojení k databázi. Je výhodou, že pˇrímopˇrivytváˇreníprojektu si programátor m ˚užezvolit typ databáze, na kterou se chce napojit, název schématu a taky pˇrimonázev tzv. package (slouží k organizaci java tˇríd,fyzicky package pak odpovídá ad- resárové struktuˇreprojektu). Nastavením tˇechtoparametr ˚utedy pˇrímourˇcujemestrukturu projektu a zakládáme tak kostru budoucí aplikace. Po potvrzení parametr ˚unám SeanGen rovnou vygeneruje 4 projekty:

• SeamPhoneBook - obsahuje definici uživatelského rozhraní

• SeamPhoneBook-ear - pˇredstavujesamotnou aplikaci (tzv. EAR = Enterprise Ar- chive) a obsahuje všechny knihovny, které budou souˇcástíaplikace. Dále pak ob- sahuje XML soubor s definici tzv. DataSource, tj. zdroj dat pˇredstavujícíadresu k da- tabázi, jméno a heslo pro pˇripojení.Souˇcasnˇese na tomto místˇenastavuje který ovla- daˇcse pro napojení k databázi má použít. Tyto parametry jsou vyplnˇenyna základˇe údaj ˚unastavených v rámci vytváˇreníprojektu.

• SeamPhoneBook-ejb - obsahuje aplikaˇcníˇcásta tedy všechny java tˇrídykteré se sta- rají o vykonávání logiky aplikace

• SeamPhoneBook-test - obsahuje testovací tˇrídya další konfiguraˇcnísoubory, do kte- rých v jednoduchých aplikacích není tˇrebazasahovat

Tímto nám vznikla dobˇrespravovatelná a rozdˇelenástruktura projektu. Díky generování této kostry pomocí Seam-Gen máme jistotu, že všechny aplikace postavené nad framewor- kem Seam mají stejnou strukturu, pokud se ovšem nˇekdonerozhodne stanovit si strukturu sám a poskládat si celou aplikaci ruˇcnˇebez využití Seam-Gen. Takto vytvoˇrenouaplikaci, která sice zatím neobsahuje žádnou logiku, m ˚užemerovnou nasadit na vestavˇenejaplikaˇcní

30 8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ server Jboss bez jakékoliv další konfigurace. To výrazne urychluje "rozjezd" projektu, pro- tože se ihned po vygenerování projektu dostáváma k sestavitelné a nasaditelné verzi a tedy m ˚užemerovnou pˇristoupipk tvorbˇesamotné logiky, o zbytek se nám stará již samotný fra- mework. Po stanovení základní struktury je potˇrebasi vytvoˇritdatabázi, kterou bude aplikace vy- užívat. Pˇrístupbottom-up, tj. nejdˇrívvytvoˇritdatabázi a pak až k ní aplikaci, je tady zvolen zámˇernˇe.abychom si pˇredvedliproces generování obslužných stránek. Popis databáze se nachází v souboru DBCreate.sql, jedná se o dvˇejednoduché tabulky Users a Phone_Numbers, pˇriˇcemžtabulka Phone_Numbers má cizí klíˇcna tabulku Users. Tento skript si spustíme nad databázi Derby a ten nám vytvoˇríodpovídající schéma a tabulky. Pro manipulaci s databázi je vhodné si do RedHat Developer Studia doinstalovat rozšíˇreníQuantum DB. Je potˇrebnépoˇcítats tím, že si tyto aplikace, které pracují s jednou Derby databázi, mohou tuto databázi zamykat. Tento fakt je zp ˚usobentím, že jsem si zvolil Derby Embeded databázi a to znamená, že se k jedné databázi m ˚užepˇripojitpouze jedna aplikace. Rešenímˇ je bud’ vypnutí aplikaˇcníhoserveru pˇripráci s Quantum DB a nebo vy- pnutí Quantum DB a restartování vývojového prostˇredí.Nejedná se o pohodlný pˇrístup, ale vzhledem k jednoduchosti skriptu to v tomto pˇrípadˇenevadí. Další alternativou by bylo použití jiného typu databáze. Po vytvoˇrenídatabáze a tabulek pak vyvoláme nad projektem Seam Generate Entities, zadáme Reverse Engineer from database a Seam-Gen nám do pˇredem nadefinovaných pac- kage vytvoˇrítyto tˇrídy:

• Entity (tˇrídyreprezentující ˇrádkytabulky), EntityHome (tˇrídypro manipulaci s ob- sahem tabulek)

• speciální tˇrídyEntityQuery, které slouží k manipulaci se seznamy a realizují vyhle- dávání záznamu v databázi

Všechny tyto tˇrídyjsou vygenerovány do projektu SeamPhoneBook-ejb. Seam-Gen doplní tyto tˇrídyi o logování pomocí knihovny log4j, takže i tuto ˇcástmáme alespoˇnz ˇcástipokry- tou a není potˇrebalog4j do projektu integrovat. Seam-Gen nám zároveˇndo projektu SeamPhoneBook vygeneruje i prezentaˇcníˇcástapli- kace, a to konkrétnˇeformuláˇrepro zobrazování seznam ˚u,editaci jednotlivých záznam ˚ua taky pro pˇridávánía rušení záznam ˚u.Vzniknou nám tak základní obrazovky naší aplikace, které nám umožˇnujíplnohodnotnou manipulaci s daty v databázi. Takto vygenerované stránky jsou pˇrehlednéa mají dobˇreodladˇenéchování, takže se již nemusíme starat, ve který moment probíhá samotná modifikace dat v databází. Programátor je tak odstínˇenjak od samotného SQL, tak i od správy transakcí a stará se hlavnˇeo další doupravení vizuální ˇcástiaplikace, popˇrípadˇepak o doplˇnovánídalší logiky. V našem pˇrípadˇejsme tedy s tvorbou aplikace SeamPhoneBook témˇeˇru konce, staˇcído- programovat logiku ohlednˇepˇrihlašováníuživatel ˚u,ke které nám Seam-Gen pˇredgeneroval tˇrídy, takže staˇcíjenom doplnit samotné ovˇeˇreníjména a hesla v databázi a i proces pˇrihlá- šení máme hotový. Seam se zároveˇnstará o zabezpeˇcenípˇristupu k jednotlivým stránkám,

31 8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ takže nemusíme ˇrešitzda se nepˇrihlášenýuživatel m ˚užedostat ke stránkám pro zobra- zování seznam ˚u.Takto vzniklou aplikaci staˇcíuž jenom lokalizovat, doupravit menu pro pˇrístupk jednotlivým stránkám a základní aplikaci máme hotovou. Na obrázku 8.2 je náhled obrazovky aplikace SeamPhoneBook. Vzhled aplikace odpo- vídá šablonˇeseam-gen, pˇrípadnéúpravy se dají provádˇetdíky zmˇeneCSS (Cascading Style Sheet - kaskádové styly) stylu.

Obrázek 8.2: SeamPhoneBook

8.2.2 Aplikace StripesPhoneBook

V pˇrípadˇeframeworku Stripes byla situace výraznˇesložitˇejší.Souˇcástídistribuce verze 1.4.3 byly sice 3 demo aplikace, ale pro úˇcelyseznámení s frameworkem byly prakticky nepouži- telné. Jedná se o dvˇeverze kalkulaˇckya jednu vzorovou implementaci nástroje pro záznam chyb. Obdobná situace s dostupnými demo aplikacemi byla i na internetu. Souˇcástídistri- buce je ale seznam všech znaˇceki s popisem a ukázkou použítí, takže jako podklad pro vývoj je to celkem dobˇrepoužitelné. Po delším hledání jsem nakonec našel malou aplikaci Glossary - jedná se o implemen- taci jednoduchého slovníku. Tato vzorová aplikace byla dostupná pˇrímove formˇeprojektu pro vývojové prostˇredíEclipse. Zprovoznˇenítéto aplikace tedy spoˇcívalopouze v impor- tování tohoto projektu do pracovní plochy (tzv. Workspace) vývojového prostˇredíRed Hat Developer Studio. Tato vzorová aplikace se dá tedy použít jako základ aplikace StripesPhoneBook. Apli- kace je postavená na JSP stránkách a DAO voláních. Stripes obsahuje vlastní knihovnu UI znaˇcek,které rozšiˇrujímožnosti manipulace s formuláˇrem,práci s odkazy a podobnˇe.Apli-

32 8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ kace Glossary obsahovala i nˇekolikobrazovek, které plnily funkcionalitu pro zobrazování seznamu a úpravu jejího obsahu. Pˇríslušnéobslužní Java tˇrídyobsahovaly pˇrímévolání databáze, které bylo v tomto pˇrípadˇeˇrešenopomocí pˇrímýchJDBC (Java DataBase Con- nectivity) volání, tzv. DAO volání. Jelikož tato vzorová aplikace byla funkˇcnía splˇnovala požadavky, nebyl d ˚uvodtento zp ˚usobnapojení k databázi pˇreprogramovávat. Úprava aplikace Glossary spoˇcívalav tˇechtozmˇenách: • úprava SQL volání pro napojení k databázi StripesPhoneBookDB

• úprava JSP stránek pro zobrazování a úpravu záznam ˚u- telefonní ˇcíslaa seznam uživatel ˚u

• pˇridáníautentizaˇcnístránky a autentizaˇcnílogiky

• definice stránek, ke kterým je nutná autentizace

• doplnˇenímožnosti odhlášení

• lokalizace Jelikož je RedHat Developer Studio postaveno nad vývojovým prostˇredímEclipse, byla úprava JSP stránek pomocí vestavˇenéhoJSP Editoru pohodlná. Po celou dobu úpravy JSP stránek má programátor k dispozici náhled, díky kterému m ˚užekontrolovat, jak bude fi- nální stránka strukturována. Bylo by ale asi vhodnˇejší,pokud by se stránky v náhledu zob- razovaly vˇcetnˇeCSS stylu, jelikož by tak mˇelprogramátor k dispozici skuteˇcnoupodobu stránky. Dalším pˇrínosemvývojového prostˇredíbyla tzv. Jboss Tools Palette, která obsaho- vala seznamy JSF (Java Server Faces) znaˇcek.Jelikož je ale tato aplikace postavená na JSP bez využití frameworku JSF, nebylo možné této výhody využít. Napojení k databázi pomocí SQL volání nutí programátora seznámit se s jazykem SQL a s datovým modelem aplikace. U aplikace StripesPhoneBook je datový model jednodu- chý a jednotlivé SQL pˇríkazysloužící k obsluze uživatelských požadavk ˚ubyly jednoduché, pˇrítomnostpˇrímýchSQL volání v kódu nebyl v tomto pˇrípadˇeproblémem. Veškerou autentizaˇcnílogiku bylo nutné doprogramovat, ovˇeˇreníhesla bylo založeno na vyhledání zadaného jména uživatele pomocí SQL pˇríkazuv databázi a porovnání hesla získaného z databáze s heslem zadaným uživatelem. Pˇrihlašovacístránka sestávala z for- muláˇrepro zadání jména a hesla a ze zobrazení chybové hlášky v pˇrípadˇeneúspˇešného ovˇeˇreníuživatele. Zobrazení chybových hlášek spoˇcívalave vytvoˇrenítzv. ExceptionBean, tj. tˇrídykterá drží samotnou chybovou hlášku. Tato tˇrídase pak zaregistrovala do Session a v pˇrihlašovacíJSP stránce se pak tato tˇrídapomocí znaˇcky zpˇrístupnilaa její obsah zobrazil. Rízeníˇ autentizace, tj. vynucení autentizace bylo ˇrešenopomocí tzv. Filtru, tj. pomocí tˇrídy, která obsahuje metodu doFilter. Tato metoda se, po zaregistrování v souboru web.xml, provádí u každého volání. Definice stránek u kterých se má provádˇetautentizace tedy spo- ˇcívalav nadefinování seznamu URL. V našem pˇrípadˇeseznam obsahoval stránky, které ne- podeléhají autentizaci (pˇrihlašovacístránka samotná vˇcetnˇetzv. Action ˇcásti).Pˇresmˇerování

33 8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ na pˇrihlašovacíobrazovku se provádí, pokud není v Session nastaveno jméno uživatele, u všech stránek, které mají URL, které není v seznamu. Odhlášení se provádí pomocí zneplatnˇeníHTTP Session a pˇresmˇerování na úvodní stránku. Tímto zp ˚usobemmáme vynucené pˇrihlášeníi v pˇrípadˇepoužití tlaˇcítkaZpˇetv prohlížeˇci. Lokalizace v našem pˇrípadˇeznamená vytvoˇrenía zaregistrování tˇrídy, která je potom- kem tˇrídynet.sourceforge.stripes.localization.DefaultLocalePicker. Tato tˇrídaobsahuje me- tody pro zmˇenutzv. Locale, tj. jazyka. Komunikace s touto tˇrídouprobíhá prostˇrednic- tvím parametr ˚uHTTP dotazu a aktuální nastavení se ukládá do Session. K definici lo- kalizovaných text ˚ujsou použity soubory StripesResources_cs.properties a StripesResour- ces_en.properties, ve kterých se jednotlivé texty definují pomocí klíˇc˚u.Pro použití lokalizo- vaného textu je možné použít znaˇckumessage, ve které se uvede klíˇctextu, který chceme zobrazit. Pˇríkladpoužití lokalizovaného textu v JSP stránce je uveden na obrázku 8.3 a pˇríklad definice lokalizovaného textu do ˇceštinyje uveden na obrázku 8.4.

Obrázek 8.3: Ukázka použití lokalizovaného textu v JSP stránce application.title=StripesPhoneBook 1.0.1

Obrázek 8.4: Definice lokalizovaného textu do ˇceštiny- StripesResources_cs.properties

Všechny uvedené tˇrídymusí být napsány ruˇcnˇe,neexistuje generátor tˇechtotˇríd.Je tedy nutností si strukturu projektu a návrh tˇríddobˇrepromyslet, aby bylo možné aplikaci upra- vovat a udržovat. Pˇripoužití tˇrívrstvéarchitektury a dobˇrenavržené struktuˇreaplikace je možné docílit vysoké znovupoužitelnosti tˇrída snížit tak pracnost psaní aplikací v tomto frameworku.

34 8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

Obrázek 8.5: StripesPhoneBook

35 Kapitola 9 Závˇer

Zkoumáním framework ˚uStripes a Jboss Seam jsem se seznámil s problematikou webových aplikací a zp ˚usobyimplementací funkˇcnícha nefunkˇcníchpožadavk ˚u.Oba uvedené fra- meworky pˇrinášívlastní ˇrešenía nabízí podobný rozsah funkcionality. Výrazným rozdílem je podpora generování tˇríd,JSF stránek a celých projekt ˚uv pˇrípadˇeJboss Seam a volnost programátora za cenu vyšší pracnosti v pˇrípadˇeframeworku Stripes. Programátoˇri,kteˇrímají zkušenosti s frameworkem Struts budou spíš naklonˇenifra- meworku Stripes, jelikož to pro nˇeznamená vylepšení tohoto frameworku bez nutnosti pˇre- dˇelávatvýraznˇejiž existující vlastní tˇrídya zaužíváné techniky psaní aplikací. Nevýhodou je vyšší pracnost psaní aplikací a chybˇejícílepší podpora vývojového prostˇredí. Framework Jboss Seam je vhodné použít v aplikacích, u kterých je možné využít pˇrinosy tohoto frameworku. Jedná se tedy o aplikace, které budou postaveny na technologii JSF pro vizuální ˇcástaplikace a technologie EJB a anotací pro aplikaˇcníˇcást.Jelikož je použití anotací a EJB (hlavnˇezjednodušení JPA Entit proti Entity tˇrídámz EJB verze 2.1) hlavním pˇrínosem prostˇredíJava EE verze 5, znamená pˇrechodna tento framework využití tohoto prostˇredí na maximum. Programátoˇri,kteˇríteprve zaˇcínajís tvorbou aplikací, anebo chtˇejíjít s dobou budou asi spíš preferovat tento framework, jelikož jim to výraznˇeulehˇcítvorbu aplikací. Možnost generování tˇríd z databázových schémat se v tomto pˇrípadˇem ˚užestát dobrým základem, pro složité databázové schémata (vˇetšímnožství cizích klíˇc˚ua dalších provázání tabulek) je ale pˇrínosaplikace Seam-Gen minimální. Díky použítí JSF a možnosti pˇrímého volání aplikaˇcnívrstvy z prezentaˇcnívrtsvy se opˇetdostáváme k zjednodušení kódu, pro vývoj aplikací s požadavkem na vysoký výkon práce s databázi se ale zaˇcnoupˇrínosytohoto frameworku ztrácet. Vzhledem k faktu, že se Jboss Seam má stát základem pro webové aplikace postavené nad prostˇredímJava EE 6, je asi budoucnost tohoto frameworku ménˇe ohrožena než v pˇrípadeframeworku Stripes. Oba tyto frameworky mají své pro a proti, volba je tedy na programátorovi a odvíjí se hlavnˇeod povahy aplikace a zkušeností programátora. Ideální je seznámit se s obˇemafra- meworky a být tak flexibilnˇejšía efektivnˇejšípˇritvorbˇeaplikace. Vzhledem k lepší podpoˇrevývojového prostˇredía charakteru aplikace bych se pˇríklánˇel k frameworku Jboss Seam, jelikož vedlo plné využití jeho vlastností výrazné snížení složi- tosti vývoje. Generováním projektu a rozsáhlejší kolekcí vzorových aplikací bylo seznámení a tvorba první aplikace pˇríjemnˇejšía rychlejší. V ˇcasedokonˇcovánítéto diplomové práce (listopad-prosinec 2008) byla uvedena další verze frameworku Jboss Seam, verze 2.1.1.GA, pˇrinášejícíjak opravu chyb, zvýšení výkonu,

36 9. ZÁVERˇ tak i další vylepšení funkcionality (podpora iText pro generování PDF dokument ˚u,Seam- Gen generuje i projekty pro vývojové prostˇredíIntelliJ IDEA). Poslední verze frameworku Stripes, verze 1.5, byla uvedena v srpnu 2008, nicménˇena stránkách projektu poˇráddochází k doplˇnovánídokumentace a WIKI stránek. Je tedy patrné, že oba uvedené frameworky jsou nadále vyvíjené a podporované, zaˇcít s libovolným z nich tedy není z hlediska opravy pˇrípadnýchchyb rizikové.

37 PˇrílohaA A

Odkazy na použitý software: Jboss Seam Framework 1.2.1 GA Maven 2.0.9 Stripes 1.4.3 RedHat Developer Studio CR1 - již staženo z oficiálních stránek

38 PˇrílohaB B

Souˇcástípráce je i pˇriloženéCD, kde jsou k dispozici jednotlivé ukázky:

• zdrojový kód této práce ve formátu XML

• zdrojový kód této práce ve LATEX • tato práce ve formátu PDF, vygenerovaná pomocí aplikace XT, XSL styl ˚ua systému LATEX • tato práce ve formátu HTML vygenerovaná aplikací XT a XSL styl ˚upro transformaci do HTML

• zdrojový kód aplikace SeamPhoneBook

• zdrojový kód aplikace StripesPhoneBook

• pracovní plocha vývojového prostˇredíRedHat Developer Studio

• RedHat Developer Studio CR1

• zdrojové kódy, dokumentace a demo aplikace k Jboss Seam 1.2.1.GA

• zdrojové kódy, dokumentace a demo aplikace k Stripes 1.4.3

39 Literatura

[1] Tim, F.: Stripes Documentation, Stripes Framework, Jul 21, 2006.

[2] Ferschmann, P.: JBoss Seam... naše zkušenosti , SoftEU s.r.o., 27. února 2008.

[3] Kuba, R.: Stripes, Ústav výpoˇcetnítechniky MU, 23.1.2007.

[4] Kubásek, I.: Pˇredstaveníaplikaˇcníhoframeworku JBoss Seam, Lukáš Kubásek, Febru- ary 17th, 2008.

[5] Ten Good Reasons To Use Seam, Stripes Framework, Jul 21, 2006.

[6] Válek, O.: Framework Stripes, OndˇrejVálek.

40