64
MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Srovnání J2EE integraˇ cních framework ˚ u DIPLOMOVÁ PRÁCE Bc. Daniel Gajdoš Brno, jaro 2009

Diplomová práce - formát pdf

  • Upload
    trannga

  • View
    269

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Diplomová práce - formát pdf

MASARYKOVA UNIVERZITA

FAKULTA INFORMATIKY

}w���������� ������������� !"#$%&'()+,-./012345<yA|Srovnání J2EE integracních

frameworku

DIPLOMOVÁ PRÁCE

Bc. Daniel Gajdoš

Brno, jaro 2009

Page 2: Diplomová práce - formát pdf

Prohlášení

Prohlašuji, že tato diplomová práce je mým puvodním autorským dílem, které jsem vypra-coval samostatne. Všechny zdroje, prameny a literaturu, které jsem pri vypracování použí-val nebo z nich cerpal, v práci rádne cituji s uvedením úplného odkazu na príslušný zdroj.

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

ii

Page 3: Diplomová práce - formát pdf

Shrnutí

Cílem této práce je predstavení standardu J2EE, jeho pozice na trhu, význam frameworku,základní charakteristika vybraných frameworku, vzorová implementace jednoduché apli-kace s využitím techto frameworku, srovnání složitosti implementace, citelnosti a podporyvývojových nástroju. Na záver bude popsán proces seznamování a implementace jednot-livých aplikací, parametrické srovnání frameworku,shrnutí zjištených faktu a doporucení,kdy je vhodné nekterý z popisovaných frameworku použít.

iii

Page 4: Diplomová práce - formát pdf

Klícová slova

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

iv

Page 5: Diplomová práce - formát pdf

Predmluva

„Projekt je casove ohranicené úsilí smerující k vytvorení unikátního produktu nebo služby“[13].

Již tato základní definice obecného projektu v sobe obsahuje slovo unikátní. Jak ale vy-tváret unikátní projekty, když používaná technologie je všeobecne dostupná, tudíž ji máv rukou i konkurence?

Cílem každého projektu by melo být uspokojení potreb zákazníka. Míra úspešnosti pro-jektu se merí práve mírou spokojenosti a mírou naplnení ocekávání. Každý projekt je ohra-nicen jak casem, tak i zdroji. V rámci výberových rízení se firmy predhánejí nabízenou kva-litou, rychlostí dodávky, úrovní servisu a v neposlední rade cenou, za kterou jsou ochotniprojekt realizovat. Výsledkem úspešného boje obchodníku je získání zákazníka, získání pro-jektu a vidina budoucího zisku. Pak ale prichází reálný pohled na to, co s sebou projekt pri-náší, svoji složitost, množství omezení a rozsáhlost. A to je práve výzva, se kterou se musímeumet vyporádat. Potom prichází ta prednost, která nás delá jinými než konkurence a je jenna nás, jak dotycný projekt dopadne.

Jedním ze zpusobu, jak uspet ve složitém svete tvrdého obchodu, je mít konkurencnívýhody. Z hlediska IT to pak znamená mít dostatek zkušeností a hlavne znalostí, které po-vedou ke snižování pracnosti a tím i ke zvyšování zisku z projektu.

Od citatele této práce se ocekává základní znalost jazyka Java a zkušenosti s tvorbouwebové aplikace. Vhodná je i základní znalost návrhových vzoru.

v

Page 6: Diplomová práce - formát pdf

Obsah

1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Prístup autora k frameworkum . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Predstavení Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.1 Definice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Java EE Technologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.3 Výhody Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Co to je framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Proc frameworky v Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Jboss Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

5.1 Pozadí frameworku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.2 Historie verzí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.3 Vlastnosti frameworku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.4 Podpora vývojových prostredí . . . . . . . . . . . . . . . . . . . . . . . . . . . 155.5 Struktura Seam projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165.6 Vlastnosti Jboss Seam podrobneji . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5.6.1 Spojení EJB3 komponenty a JSF stránky . . . . . . . . . . . . . . . . . . 165.6.2 Kontexty pro Seam komponenty . . . . . . . . . . . . . . . . . . . . . . 165.6.3 Seam konverzace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185.6.4 Validace vstupních dat HTML formuláru . . . . . . . . . . . . . . . . . 185.6.5 Tvorba CRUD aplikací . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185.6.6 Integrace Business Process Managementu . . . . . . . . . . . . . . . . . 195.6.7 JBoss Expression Language . . . . . . . . . . . . . . . . . . . . . . . . . 195.6.8 Generování PDF a e-mailu . . . . . . . . . . . . . . . . . . . . . . . . . . 195.6.9 Integrace s JBoss Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205.6.10 Životní cyklus operace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

6 Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.1 Pozadí frameworku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.2 Clenení frameworku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256.3 Vlastnosti frameworku podrobneji . . . . . . . . . . . . . . . . . . . . . . . . . 27

6.3.1 Inversion of Control (IoC) . . . . . . . . . . . . . . . . . . . . . . . . . . 276.3.2 Dependency Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276.3.3 Životní cyklus operace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

6.4 Podpora vývojových prostredí . . . . . . . . . . . . . . . . . . . . . . . . . . . 286.5 Struktura Spring projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

7 Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327.1 Pozadí frameworku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327.2 Struktura frameworku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337.3 Vlastnosti frameworku podrobneji . . . . . . . . . . . . . . . . . . . . . . . . . 347.4 Podpora vývojových prostredí . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

8 Praktické srovnání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

vi

Page 7: Diplomová práce - formát pdf

8.1 Požadavky na vzorovou aplikaci . . . . . . . . . . . . . . . . . . . . . . . . . . 368.2 Proces tvorby vzorových aplikací . . . . . . . . . . . . . . . . . . . . . . . . . . 37

8.2.1 Vývojové prostredí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378.2.2 Aplikace SeamPhoneBook . . . . . . . . . . . . . . . . . . . . . . . . . . 388.2.3 Aplikace SpringPhoneBook . . . . . . . . . . . . . . . . . . . . . . . . . 418.2.4 Aplikace GrailsPhoneBook . . . . . . . . . . . . . . . . . . . . . . . . . 44

9 Parametrické srovnání frameworku . . . . . . . . . . . . . . . . . . . . . . . . . . . 479.1 Srovnávací kritéria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479.2 Test - rychlost zpracování požadavku . . . . . . . . . . . . . . . . . . . . . . . 479.3 Množství generovaného kódu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489.4 Množství konfiguracních souboru . . . . . . . . . . . . . . . . . . . . . . . . . 499.5 Velikost war balícku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499.6 Srovnávací tabulky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

10 Záver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51A Použitý software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52B Obsah priloženého nosice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53C Test - rychlost zpracování požadavku . . . . . . . . . . . . . . . . . . . . . . . . . . 54Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

vii

Page 8: Diplomová práce - formát pdf

Kapitola 1

Úvod

O nízké úspešnosti projektu víme všichni již delší dobu. Vzrustající konkurence tlací na sni-žování cen projektu, avšak vzrustající složitost procesu koncového zákazníka ke snižovánínákladu nijak neprispívá. Cím složitejší jsou vstupní požadavky, tím složitejší je i architek-tura celého rešení a tím vyšší by mela být i cena projektu.

V ideálním svete, kde bychom meli dostatek casu a zdroju, bychom si mohli dovolittvorit systémy s použitím základních technologií, jako jsou html, poprípade xhtml a jsp.Psát všechno pracne rucne by sice nebylo vhodné, ale vzhledem k neomezeným zdrojum bynám to vadit nemuselo a i chybovost rucne tvoreného obrovského množství kódu bychompri dostatku casu byli schopni minimalizovat.

Reálný svet je ale hodne vzdálený od sveta ideálního, termíny jsou pevné a rozpocet jevíce než omezený. Jak se s tím vyporádat? Omezit pracnost implementace a delat opravdujen to, co je nejnutnejší a co prináší skutecnou hodnotu zákazníkovi. Nakonec to je ve vetšineprojektu duvod, proc chce zákazník nový informacní systém - nepreje si pracovat neefek-tivne a „vyhazovat tak peníze oknem“.

Práve z tohoto duvodu vznikají technologie jako jsou pocítace, databáze, síte ... C, Java,Java EE. Smyslem techto technologií je pomáhat jak tvurcum, aby byla jejich práce jedno-dušší, tak hlavne cílovým zákazníkum, pro které jsou produkty urceny.

1.1 Prístup autora k frameworkum

Jako Java programátor jsem se k webovým frameworkum dostal v rámci nekolika projektu.Jisté znalosti s prací s HTTP, XML, HTML a dalšími technologiemi jsem získal již v pru-behu studií, praktické zkušenosti však prinášel až projekt. Jelikož jsem se tvorbe webovýchaplikací zatím ve vetší míre nevenoval, nejsem tedy ovlivnen zaužívanými zpusoby tvorbywebových aplikací. V rámci seznamování se s jednotlivými reprezentanty integracních fra-meworku jsem tedy byl v roli zacátecníka. Duvodem pro srovnávání byl konkrétní požada-vek rozhodnout, který produkt by se v dalších fázích projektu mel použít. Jelikož ve vetšinesrovnání, které jsou dostupné na internetu, bylo subjektivní zhodnocení, které spíš pripo-míná vyzdvihnutí jednoho produktu pred ostatními, pokusil jsem se toto srovnání vzít odzacátku. Zacal jsem tedy shromažd’ováním dostupných informací od výrobcu a vzorovýchprogramu a na základe nich jsem se snažil pochopit zpusob, jakým fungují a jak zacít tvo-rit jednoduchou aplikaci sám. Docela dobrým zpusobem, jak se seznámit s frameworkem,bylo zkoumání demo aplikací a jejich úprava. Takto máme k dispozici funkcní aplikaci, kte-

1

Page 9: Diplomová práce - formát pdf

1.1. PRÍSTUP AUTORA K FRAMEWORKUM

rou si pouze upravíme, aby splnovala naše požadavky. Zároven takto získáme i strukturuprojektu a skripty, sloužící k sestavení aplikace.

Na základe informací o dostupných produktech jsem pro srovnání vybral tri reprezen-tanty, mezi kterými bude provedeno srovnání.

2

Page 10: Diplomová práce - formát pdf

Kapitola 2

Predstavení Java EE

2.1 Definice

Co je to vlastne Java EE, nebo chcete-li J2EE?Jedná se o prístup (sadu pravidel, technologií, metod, doporucení), jak provádet design,

vývoj, nasazení a provozování vícevrstvých aplikací pomocí jazyka Java formou nekolikazákladních komponent.

Jedná se tedy pouze o standard, nikoliv o konkrétní produkt. Specifikace první verzetohoto standardu (verze 1.2) se datuje k prosinci 1999.

Do tohoto standardu patrí:

• Platforma Java EE - standardizovaná platforma, poskytující behové prostredí proJava EE aplikace.

• Soubor testu kompatibility Java EE - sada testu overujících, zda je urcitá platformaJava EE v souladu se standardem.

• Referencní implementace Java EE - implementace Java EE urcená pro prototypováníJava EE aplikací; poskytuje definici platformy Java EE.

• J2EE BluePrints - množina nejlepších osvedcených a doporucených postupu pri vý-voji vícevrstvých aplikací.

2.2 Java EE Technologie

Technologie, na kterých je Java EE založena:Technologie tretích stran:

• HyperText Transfer Protocol (HTTP) – komunikacní protokol pro podporu komuni-kace typu požadavek-odpoved’ (request/response).

• Object Request Brooker (ORB) - poskytuje základní funkcnost službám, jako jsou EJBkontejner a Naming service.

• Internet Inter-ORB protocol (IIOP) - komunikacní protokol technologie CORBA, umož-nující komunikaci CORBA objektu prostrednictvím Internetu.

3

Page 11: Diplomová práce - formát pdf

2.2. JAVA EE TECHNOLOGIE

Technologie Java Standard Edition (Java SE) - zdroj [10] :

• JDBC (Java DataBase Connectivity) data access API - komponenty pro pripojení da-tabází prostrednictvím standardizovaného rozhraní JDBC.

• Java Authentication and Authorization Service (JAAS) - podpora autentizace a auto-rizace pomocí LDAP a jiných úložišt’ prístupových práv.

• Java Connector Architecture (JCA) – rozhraní SPI (Service Provider Interface) propripojení k adaptérum externích ERP (Enterprise Resource Planning ) systému.

• Java API for XML Parsing (JAXP) – prostredky pro manipulaci s XML dokumenty,podpora XSL transformací.

• Java Servlets - trída generující dynamický obsah webových stránek.

• Remote Method Invocation (RMI)

– jedna z implementací 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í objektu komunikujících pres rozhraní RMI.

Technologie Java Enterprise Edition (Java EE) - zdroj [9] :

• Java API for XML-Based Web Services (JAX-WS) - rozhraní pro XML webové služby(vychází z JAX-RPC).

• Java API for XML-based RPC (JAX-RPC) - rozhraní pro XML vzdálené volání pro-cedur.

• Java API for XML Binding (JAXB) - navázání XML zpráv na jazyk Java.

• SOAP with Attachments API for Java (SAAJ) - komunikace za požití XML zprávSOAP protokolu.

• JavaServer Faces - prostredí pro vývoj webových uživatelských rozhraní.

• JavaServer Pages (JSP) - stránka složená z XML znacek, EL (Expression Language),JSTL a scriptletu Javy. Výsledkem jejího zpracování na serveru je odpoved’ na HTTPdotaz.

• JSP Standard Tag Library - knihovna znacek pro JSP.

4

Page 12: Diplomová práce - formát pdf

2.3. VÝHODY JAVA EE

• Enterprise JavaBeans (EJB) - standard pro tvorbu komponent serverové cásti aplikacezapouzdrujících obchodní logiku.

• J2EE Connector Architecture (JCA) - reší problematiku propojení aplikacních serveru.

• JavaBeans Activation Framework (JAF) - reší prístup k datum a jejich zapouzdrení.

• JavaMail – podpora pro práci s elektronickou poštou.

• Java Message Service API (JMS) - služba pro zajištení asynchronní komunikace.

• Java Persistence API (JPA) - ORM mapování pomocí anotovaných tríd.

• Java Transaction API (JTA)- objekty pro podporu lokálních a distribuovaných data-bázových transakcí.

2.3 Výhody Java EE

Jelikož je Java EE založena na jazyku Java, prináší s sebou tyto výhody:

• Nezávislost na operacním systému

Platformová nezávislost jazyka Java prináší možnost nasazení Java EE aplikací navšechny operacní systémy, pro které existuje Java Runtime a príslušná implementaceaplikacního serveru. Umožnuje tedy vývoj a nasazení na ruzných operacních systé-mech.

• Nezávislost na konkrétní implementaci aplikacního serveru

Dle standardu mají být aplikace prenositelné mezi jednotlivými aplikacními servery.Vzhledem k ruzným rozšírením aplikacních serveru je však tato prenositelnost hodneomezená. Typickým príkladem je problematika objektove-relacního mapování, kteréje definováno na jednotlivých aplikacních serverech ruzne (napríklad na Websphereje nutné dodatecné mapování ve vlastních konfiguracních souborech).

• Existence návrhových vzoru

Jedná se o proverené postupy a zpusoby návrhu, které usnadnují a optimalizují re-šení casto se vyskytujících problému. Mezi návrhové vzory patrí mimo návrhovýchvzoru pro samotný jazyk Java i návrhové vzory pro implementaci obchodní logiky apro prezentacní vrstvu.

• Otevrenost

Jelikož je Java EE pouze specifikací a predpisem, je implementace závislá na konkrét-ním dodavateli. Java EE ale zavazuje dodavatele k dodržování standardu a dílcíchspecifikací (specifikace EJB, JSP, servlet), což vede k modulárnímu návrhu (vytvo-rení jednotlivých API jejich propojení dle specifikace) jednotlivých implementací a

5

Page 13: Diplomová práce - formát pdf

2.3. VÝHODY JAVA EE

možností tyto implementace modifikovat. Typickým príkladem je využití technologiewebových služeb, která umožnuje nahradit implementaci JAX-WS za implementaciAxis bez nutnosti modifikace rozhraní. Dokonce otevrením zdrojových kódu Javy(14. listopadu 2006 pod licencí GNU General Public License verze 2 [20]) se vytvárítlak na otevírání jednotlivých implementací, což vede jak k snižování chybovosti, taki k snižování nákladu na porízení techto implementací.

• Množství implementací

Java EE bylo akceptováno a implementováno ve velkém množství významných fi-rem jako jsou IBM, RedHat, Oracle, SUN, címž vznikl velký tlak vedoucí k rychlémurozvoji a nasazování Java EE.

6

Page 14: Diplomová práce - formát pdf

Kapitola 3

Co to je framework

Jak již bylo zmíneno v úvodu, cílem projektu je tvorba systému, který prináší zákazníkoviocekávané chování, tj. implementuje funkcní i mimofunkcní požadavky, které kopírují ob-chodní procesy zákazníka. Tedy cokoliv, co s logikou techto procesu prímo nesouvisí, pri-náší zvyšování nákladu, ale neprináší zákazníkovi pridanou hodnotu. Typickým príklademmuže být rešení transakcního zpracování, prístupových práv nebo správa sezení (sessions),v prípade webových aplikací. Jelikož se nejedná o triviální oblasti navrhovaného systému,vyžádala by si jejich rucní implementace významnou cást zdroju, které by jinak mohly býtpoužity k rešení problému, které s implementací logiky obchodních procesu prímo souvisí.Jelikož to vede k nežádoucímu zvyšování ceny a prodlužování casu potrebného k samotnéimplementaci, je prínosné tyto cinnosti minimalizovat. A práve tady se ke slovu dostávápojem framework. „Framework je softwarová struktura, která slouží jako podpora pri pro-gramování, vývoji a organizaci jiných softwarových projektu. Muže obsahovat podpurnéprogramy, knihovnu API, návrhové vzory nebo doporucené postupy pri vývoji“ [1]. Fra-meworku existuje nekolik druhu:

• Aplikacní framework - oznacuje sadu vzájemne propojených již existujících kompo-nent, které fungují jako základ pro vývoj aplikací a poskytují podporu pro již zmínenépodpurné procesy.

• Webový aplikacní framework - oznacuje framework navržený pro podporu vývojedynamických webových stránek, webových aplikací a webových služeb.

• Integracní framework - oznacuje framework, umožnující propojení jiných frameworku(jejich integraci) pri tvorbe složitejších aplikací. Tímto zpusobem je možné integrovatframeworky všech trí druhu.

Na obrázku 3.1 je znázorneno rozdelení logiky systému mezi tu, která souvisí s obchodnílogikou, a tu, kterou za nás reší použitý aplikacní framework.

Bez ohledu na druh by framework mel mít tyto vlastnosti:

• Stanovuje základní architekturu projektu - vetšinou základní typy tríd, které aplikacitvorí. Tímto usnadnuje pochopení a rychlejší seznámení se s aplikacemi, které jsoupostavené nad stejným frameworkem.

7

Page 15: Diplomová práce - formát pdf

3. CO TO JE FRAMEWORK

Obrázek 3.1: Aplikacní framework

• Reší technické (low-level) problémy - vetšinou implementacne nárocné. Low-levelkomponenty jsou vetšinou obecne použitelné, proto se jejich zarazením do aplikac-ního frameworku muže dosáhnout vysoké znovupoužitelnosti. Jedná se o již zmí-nené problémy, které s obchodní logikou cílového zákazníka prímo nesouvisí.

• Poskytuje podporu pro implementaci samotné obchodní logiky.

• Definuje proces vývoje – nejedná se tedy pouze o kolekci komponent, které za násvyreší cást problému, ale stanovuje i pravidla, která vedou k zefektivnení a stan-dardizování samotného procesu vývoje, címž opet snižuje riziko prekrocení limituprojektu.

• Podpora Rich Internet Application - jedná se o podporu pro tenké webové klienty po-skytující funkce desktopových klientu. Príkladem jsou možnosti zobrazování grafu,tabulek, práce se záložkami, podpora pro upload souboru.

• Podpora vývojových prostredí - tento požadavek vznikl jako reakce na dostupnostuživatelsky príjemných nástroju pro platformu .NET. Bez podpory vývojového pro-stredí je obtížný návrh hlavne vizuální cásti aplikace a rychlé prototypování.

• Zrychlení vývoje, vyšší úroven abstrakce a znovupoužitelnost - frameworky by melynabízet možnost odstínit vývojáre od podpurných technologií (HTTP, SQL), címž bydovolily vývojári presunout pozornost k tvorbe samotné aplikacní logiky. Zárovenby mely nabízet komponentní architekturu, pomocí které by bylo možno dosáhnoutznovupoužitelnosti vyvinutých komponent.

• Oddelení prezentacní vrstvy - framework má nabízet možnost prezentacní vrstvuplne oddelit od ostatních vrstev. Tento požadavek vzešel z nutnosti tvorby prezen-

8

Page 16: Diplomová práce - formát pdf

3. CO TO JE FRAMEWORK

tacní vrstvy v grafických studiích, u kterých se nepredpokládá znalost programo-vání.

• Oddelení persistentní vrstvy - jedním z duležitých požadavku je i oddelení persi-stentní vrstvy z duvodu možného nahrazení této vrstvy jinou (napr. Hibernate zaEntityBeany v prípade nedostatecného výkonu).

• Volitelné oddelení vrstev - striktní oddelení všech vrstev muže u jednodušších apli-kací vést ke zbytecným komplikacím návrhu.

Použití aplikacního frameworku na druhou stranu s sebou prináší i tato rizika:

• Snížení výkonu aplikace – vetšinou platí: Cím obecnejší jsou komponenty frameworku,tím k vetší degradaci výkonu samotné aplikace dochází. Typickým príkladem jsoukomponenty pro objektove-relacní mapování.

• Nevhodnost modifikace frameworku – at’ už se jedná prímo o chybu a nebo je-nom o nevhodné „chování“ samotného frameworku, je modifikace samotného fra-meworku hodne obtížná, jelikož mají frameworky pro svoji univerzálnost zpravidlavelmi vysokou vnitrní složitost. Navíc se modifikací frameworku vystavujeme rizikunekompatibility s novejšími verzemi frameworku. Doba rešení nahlášených chyb seu frameworku, které jsou stále ve fázi vývoje, prímo odráží v dobe pro vyrešení pro-blému v naší implementaci. Navíc u frameworku, u kterých byl již vývoj zastaven, ješance k oprave zjištených chyb hodne malá. Tímto vzniká prímá závislost na doda-vateli frameworku.

9

Page 17: Diplomová práce - formát pdf

Kapitola 4

Proc frameworky v Java EE

Java EE je spolu s .NET, od spolecnosti Microsoft, vnímána jako platforma pro vývoj roz-sáhlých podnikových aplikací. Mohlo by to tedy vést k názoru, že implementace Java EEby mela plne postacovat pro vývoj jakékoliv podnikové aplikace. Pri bližším pohledu nato, co nám jednotlivé implementace Java EE nabízí, ale zjistíme, že sice máme k dispoziciobrovské množství low-level komponent, ale jejich vzájemné propojení a samotný zpusobjak vytvorit robustní a rozšíritelný systém už Java EE ani jednotlivé implementace neprede-pisují. Pomocí Java EE je tedy možné vytváret i ponekud neprehledné jednovrstvé aplikace,realizující v jedné vrstve jak prezentaci a aplikacní logiku, tak i prístup k datum, což se námmuže hodit k rychlému prototypování a tvorbe malých aplikací. U rozsáhlejších systémusi ale možná se samotným Java EE nevystacíme, Jelikož tvorba aplikací v samotném JavaEE s sebou nese netriviální složitost samotného návrhu a implementace, je vhodné u roz-sáhlejších systému využít vhodný Java EE framework. Dobre zvolený framework nás máodstínit od casto se opakujících a standardizovatelných operací typu autentizace, prístupuk databázi a nebo verifikace zadávaných hodnot v prípade webových aplikací.

Pro srovnání bychom mohli komponenty implementace Java EE prirovnat ke staveb-ním blokum, kdežto framework by pak více pripomínal ucelené funkcní jednotky a kostrusamotné stavby. Framework nám tedy nabízí formu, do které pouze implementujeme po-žadovanou obchodní logiku a napojení, ale správné využití komponent samotného Java EEmá již na starosti samotný framework.

Jistým mezistupnem mezi Java EE a frameworkem jsou návrhové vzory, které se snažíarchitektonicky predepisovat stavbu podnikových aplikací. Typickým príkladem návrho-vého vzoru, nad kterým staví hodne frameworku, je návrhový vzor MVC (Model-View-Controller), který definuje rozdelení webových aplikací do trech vrstev:

• Controller vrstva realizující samotnou navigacní logiku se dál dle Java EE delí:

– Front Controller – centralizovaný bod prístupu (single point of access) pro zasí-lání klientských požadavku.

– Application Controller – navazuje na Front Controller a realizuje samotnou na-vigacní logiku, tj. navigaci mezi stránkami a dalšími controllery. Prináší vyššíflexibilitu pri pridávání další aplikacní logiky, implementující obchodní logiku.

– Content Object – predstavuje obal (zapouzdrení – wrapper) informace pro kon-krétní protokol (HttpServletRequest).

10

Page 18: Diplomová práce - formát pdf

4. PROC FRAMEWORKY V JAVA EE

• View vrstva, realizující samotnou vizuální cást aplikace a interakci s uživatelem

– View helper – obsahuje doporucení pro implementaci vizuálních komponents minimem aplikacní logiky.

• Model (Business) vrstva uchovávající jak samotná data, tak i aplikacní logiku se dáldelí na:

– Business object – základní prvek pro implementaci aplikacní logiky. Príklademje SessionBean.

– Data transfer object (DTO) – nosic dat mezi vrstvami aplikace.

– Data access object – objekt zprostredkující mapování dat mezi persistentní aaplikacní vrstvou. Príkladem je EntityBean.

– Session facade – objekt zapouzdrující vetší pocet Business objektu. Sám o sobenevykonává aplikacní logiku, pouze presmerovává volání k príslušným busi-ness objektum.

11

Page 19: Diplomová práce - formát pdf

Kapitola 5

Jboss Seam

5.1 Pozadí frameworku

Jak již název tohoto frameworku napovídá, Jboss Seam pochází ze stejné dílny jako aplikacníserver Jboss, konkrétne tedy od Red Hat Middleware. Jedná se o open-source frameworklicencován pod LGPL (GNU Lesser General Public License), která v podstate znamená, žekaždému je povoleno kopírovat a šírit doslovné kopie tohoto licencovaného produktu, alenení dovoleno jej menit. V praxi díky tomu máme možnost tento framework používat beznutnosti zakoupení licencí, což je významným faktorem pri volbe frameworku hlavne prokomercní projekty.

Duchovním otcem a vedoucím projektu není nikdo jiný než Gavin King, iniciátor objek-tove relacního frameworku Hibernate, který se teší vysoké popularite mezi programátoryJava aplikací. Gavin King je zároven vedoucím specifikacní komise pro WebBeans (Java Spe-cification Request 299), která je specifikací pro sjednocení JSF a EJB komponentního modelu,a která by mela být budoucností ve vývoji webových aplikací na platforme Java EE 6. Tímtose pro Jboss Seam jako základ WebBeans otevírají možnosti integrace prímo do platformyJava 6, což by mohlo do budoucna prinést zajímavé možnosti využití.

5.2 Historie verzí

Text v tomto odstavci byl cerpán z oficiálních stránek frameworku [14].

• JBoss Seam 1.2

– 1.2.1 GA (27.03.2007) - beží nad aplikacním serverem Jboss verze 4.0, vyžadujeale instalaci s pomocí JEMS instalátoru (nástroj pro instalaci balícku na základepredkonfigurovaných profilu) spolu s ejb3 nebo ejb3-clustering (podpora probeh aplikace v klastru) profilu. Nestací tedy pouze stáhnout a nakonfigurovatzákladní verzi aplikacního serveru - je nutná instalace.

• JBoss Seam 2.0 - pro svuj beh vyžaduje JBoss Application Server verze 4.2 a vyšší, pronapsání a sestavení aplikace ale není aplikacní server vyžadován

– 2.0.2.SP1 (28.05.2008) - vylepšení výkonu, nástroj Seam-Gen využívá produktpro sestavování aplikací Maven.

12

Page 20: Diplomová práce - formát pdf

5.3. VLASTNOSTI FRAMEWORKU

– 2.0.3.CR1 (13.06.2008) - obsahuje objektove orientovaný framework pro webovéaplikace Facelets (JavaServer Faces View Definition Framework) pro aplikacníserver Jboss verze 5 a vyšší.

• JBoss Seam 2.1

– 2.1.0.SP1 (13.06.2008) - vylepšený nástroj Seam-Gen.

– 2.1.1.GA (22.12.2008) - podpora OpenId (standard pro externí autentizaci vewebových aplikacích), vylepšení výkonu, podpora frameworku IceFaces (pre-zentacní cást).

– 2.1.2.CR1 (13.04.2009) - podpora pro aplikacní server Glassfish, doplnení logic-kých operátoru (AND a OR) do SQL omezení.

5.3 Vlastnosti frameworku

Jboss Seam je propojením Java EE frameworku JSF (Java Server Faces) nebo IceFaces proprezentacní vrstvu a EJB (Enterprise Java Beans) pro aplikacní vrstvu. Pri použití JSF a EJBbylo donedávna nezbytností vkládat mezi tyto dva frameworky další trídy, které sice umož-novaly propojení vizuální cásti s logikou aplikace, ale s obchodní logikou aplikace prímo ne-souvisely a delaly návrh aplikace složitejším. Príkladem takových tríd jsou tzv. DTO (DataTransfer Objects) pro prenos dat mezi vrstvami aplikace. Jedním z hlavních prínosu je práveeliminace nutnosti vytváret tato propojení. Pokud by si ale nekdo prál zvolené cásti psátrucne, je tato možnost ve frameworku zachována. V praxi se pak programátor venuje víceprogramování samotné logiky aplikace než podpurných tríd, což s sebou nese jak sníženíchybovosti, tak i zvýšení produktivity programátoru a udržitelnosti aplikací.

Druhou, neméne významnou vlastností je tzv. správa stavovosti (Stateful Management).Pred Jboss Seam byl jediným prakticky použitelným zpusobem pro ukládání stavových in-formací použití HTTP Session. Tímto zpusobem bylo možné rešit problém bezestavovostiHTTP protokolu, což s sebou prinášelo problémy se správou dlouhých sezení (problémys alokací pameti). Pokud se navíc pro ukládání stavových informací využívala i databáze,vedlo to ke zpomalování reakcí aplikace na uživatelské podnety a ke zvýšené záteži data-báze. Autori Jboss Seam se tedy inspirovali technologií EJB a pro ukládání stavových infor-mací použili stavové EJB komponenty (Stateful EJB Session Beans). Použití EJB pro jedno-duché aplikace se muže jevit jako povestný „kanón na vrabce“, a dokonce pak muže vést ike snížení výkonu aplikace díky režii EJB kontejneru aplikacního serveru. Z tohoto duvoduzustala zachována možnost naprogramovat ukládání stavových informací s použitím HTTPSession. Rozhodnutí tedy i v tomto prípade zustává na programátorovi.

Vzhledem k tomu, že používání anotací se v prostredí Java 5 osvedcilo jako vhodný pro-stredek ke zprehlednení a zjednodušení kódu, prináší Jboss Seam rozšírení i v této oblasti.Toto rozšírení spocívá v pridání anotací specifických pro Jboss Seam k EJB komponentám.Tyto anotace pak promení JPA Entity Beany (trídy mapující databázové tabulky do jazyka

13

Page 21: Diplomová práce - formát pdf

5.3. VLASTNOSTI FRAMEWORKU

Java) na model a EJB Session Beany (trídy technologie EJB obsahující samotnou logiku apli-kace) na Event Handlery (jedná se o koncept Unified Components sjednocující view a busi-ness vrstvu). Tímto odpadá nutnost používat tradicní Controller (pri použití JSF pro Viewjsou to JSF Backing Beans) v MVC (Model-View-Controller) návrhovém vzoru.

K dalším duležitým vlastnostem frameworku Jboss Seam pak patrí:

• Aplikacní cást

– správa transakcí a výjimek,

– správa komponent a jejich stavu v ruzných kontextech (scope),

– injekce, outjekce a bijekce komponent,

– podpora aplikacních konverzací,

– podpora tzv. workspaces, umožnující autonomní funkci aplikace ze dvou zálo-žek téhož prohlížece (každá záložka má vlastní tzv. conversation-id),

– integrace rízení aplikace business procesy pomocí frameworku JBoss jBPM (JavaBusiness Process Management),

– podpora pro JBoss Drools a autorizaci pomocí tzv. sémantických pravidel,

– jednoduché programování CRUD (Create-Retrieve-Update-Delete) databázovýchaplikací v podobe predpripravených tríd a komponent v Seam CRUD Appli-cation Framework,

– podpora pro EJB3 komponenty stejne tak jako obycejné POJO (Plain Old JavaObject) objekty,

– podpora pro testování - obsahuje vestavený aplikacní server JBoss a integrujetestovací framework TestNG,

– podpora konverzací i ve webových službách - libovolná Seam komponenta mužebýt webovou službou,

– integrace jazyka Groovy - objektove orientovaného jazyka, který je skriptovacíalternativou k jazyku Java,

– podpora pro nasazování zmen bez nutnosti restartování celé aplikace (jedná seo princip Hot Deploy).

• Prezentacní cást

– injekce Faces Messages pro predání zpráv z EJB uživateli - jedná se o pohodlnouformu, jak zobrazovat výsledek provedené akce uživateli,

– vylepšení JSF o sadu komponent a znacek uživatelského rozhraní,

– JBoss EL - rozšírení Unified Expression Language (jazyk pro získávání hodnotz objektu do JSP stránek pomocí JSTL znacek) o prímé volání libovolné metodytrídy business vrstvy z view,

14

Page 22: Diplomová práce - formát pdf

5.4. PODPORA VÝVOJOVÝCH PROSTREDÍ

– Seam filter - automatická správa parametru HTTP dotazu a spouštec akcí prizobrazení JSF stránek,

– podpora pro Facelets jako view technologii,

– podpora pro Google Web Toolkit (framework pro tvorbu webových aplikacís využitím technologie Asynchronous JavaScript and XML) jako alternativy k JSF,

– automatické vystavování kolekcí dat jako datový model JSF tabulek (tzv. SeamData-Binding Framework),

– podpora generování e-mailu, PDF a RichText dokumentu,

– propojení validací modelu s prezentacní vrstvou (projekce Hibernate validátorudo JSF formuláru),

– podpora Bookmarkable Web Pages, díky které máme možnost jednoduše vy-tvorit stránky aplikace odpovídající REST (Representational State Transfer) kon-ceptu pro design distribuované architektury,

– definice vlastních chybových stránek pro jednotlivé typy výjimek,

– ladící stránka JBoss Seam Debug Page s konfigurovatelným obsahem (prehledzahájených konverzací, jednotlivých kontextu, prehledný výpis výjimek i s prí-cinami atd.),

– podpora pro open-source AJAX (Asynchronous JavaScript and XML) rešení po-stavených na JSF - JBoss AJAX RichFaces, ajax4jsf, ICEfaces.

5.4 Podpora vývojových prostredí

Mnoho frameworku, které nabízejí víc než jen triviální rozšírení použitých konceptu a tech-nologií, vyžaduje pro svoji cinnost vetší množství knihoven (konkrétních verzí) a konkrétnístrukturu samotné aplikace. Vyvinout i jednoduchou aplikaci bez podpory vývojového pro-stredí a nebo dostatecne rozsáhlých príkladu muže být pro programátora doslova nereši-telný problém.

V prípade Jboss Seam se spolecnost Red Hat rozhodla jít trochu jiným smerem. Soucástídistribuce je 23 vzorových aplikací, které byly donedávna (do srpna 2008) vystaveny prímona stránkách projektu. Nyní je ale potreba si vzorové aplikace rozebehnout na vlastním apli-kacním serveru. Tyto príklady jsou dobre okomentované (i složitejší aplikace Seam Bookingse dá díky tomu dobre pochopit), a díky použití Maven jsou i snadno sestavitelné a spus-titelné na aplikacním serveru Jboss 4.2. Na obrázku 5.1 je jedna z obrazovek aplikace SeamBooking, na které mužeme v levé cásti videt detailní popis použité vlastnosti frameworku.

Další pomuckou je sada rozšírení Jboss Tools pro vývojové prostredí Eclipse, které ob-sahuje podporu Jboss Seam. Toto rozšírení pomáhá pri zakládání projektu, urcuje strukturuprojektu, zjednodušuje nasazení a dokonce díky integraci s aplikací seam-gen dovoluje igenerování vzorových formuláru a aplikacní logiky pro manipulaci s databází. S pomocí

15

Page 23: Diplomová práce - formát pdf

5.5. STRUKTURA SEAM PROJEKTU

seam-gen je pak tvorba jednoduché aplikace pro manipulaci dat v databází triviální, jelikožse stací napojit na již existující databázová schémata a seam-gen vygeneruje základní obra-zovky i obslužný kód. Jako odrazový mustek pro programátory v Jboss Seam je to príjemnézjednodušení.

Spolecnost RedHat dokonce prichází s upravenou verzí vývojového prostredí Eclipse,nazvanou RedHat Developer Studio, která má Jboss Seam prímo integrován. Toto vývojovéprostredí je na rozdíl od Eclipse již placené, byla ale uvolnena i verze Release Candidate 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 (v únoru 2008 byla stažena z oficiálních stránek projektu), anelze ji použít pro komercní úcely. Spolecnost RedHat provedla prejmenování tohoto pro-duktu na JBoss Developer Studio a nabízí jej sice jako open source produkt, ale pouze pozakoupení licence.

5.5 Struktura Seam projektu

Jboss Seam predepisuje, jak má vypadat struktura projektu a samotného EARu (EnterpriseARchive - zabalená aplikace).

Po sestavení dostaneme strukturu uvedenou na Obr. 5.2:

5.6 Vlastnosti Jboss Seam podrobneji

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

5.6.1 Spojení EJB3 komponenty a JSF stránky

Spojení aplikacní a prezentacní vrstvy je prímocaré. Na príkladu 5.6.1 je uvedena stránka,na které vidíme prímé volání metody a predání parametru do prezentacní vrstvy.

V uvedeném výtahu ze vzorové aplikace vidíme prímé navázání položky password, veformulári na položku usersHome.instance.password, která je prímo položkou entity Users.Tímto nám odpadá nutnost dopisovat jakýkoliv kód pro prenos z/do prezentacní vrstvy.Tlacítko je pak prímo napojeno na metodu usersHome.persist, která je dokonce díky EJB3 jižimplementována, tudíž i v tomto prípade bylo provedeno maximální možné zjednodušení.Projevuje se tady síla využití JPA a minimalizace rucne psaného kódu. Pokud tato metodamá návratový typ String, pak je standardne dle specifikace JSF event handleru klícem do JSFPage Flow a udává, na kterou JSF stránku má být uživatel presmerován na základe výsledkuprovedení metody.

5.6.2 Kontexty pro Seam komponenty

Jak již bylo uvedeno, Seam prináší možnosti ukládání informací o sezení do vlastních kon-textu. Techto kontextu je dokonce nekolik:

16

Page 24: Diplomová práce - formát pdf

5.6. VLASTNOSTI JBOSS SEAM PODROBNEJI

<s:decorate id="passwordDecoration" template="layout/edit.xhtml"><ui:define name="label">password</ui:define><h:inputTextarea id="password"

cols="80"rows="3"required="true"value="#{usersHome.instance.password}"/>

</s:decorate><div style="clear:both">

<span class="required">*</span>required fields

</div><div class="actionButtons">

<h:commandButton id="save"value="Save"action="#{usersHome.persist}"disabled="#{!usersHome.wired}"rendered="#{!usersHome.managed}"/>

Príklad 5.6.1: Ukázka napojení aplikacní a prezentacní vrstvy

• Stateless – bezestavové komponenty, do kterých je možné ukládat informace, kteréjsou dostupné po dobu použití této komponenty,

• Event – prubeh jednoho JSF requestu,

• Page – komponenta vztažená ke stránce, je prístupná behem všech akcí odeslanýchz jedné JSF stránky,

• Conversation – jádro Seamu, konverzace je série požadavku za úcelem predem da-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 muže být rozprostren dokoncemezi více uživatelu,

• Application – globální kontext, držící statické informace, není vztažen k webovýmuživatelum.

Kontext dané Seam komponenty a dokonce i JPA Entity se pak pouze nadeklaruje pomocíanotace @Scope (napríklad @Scope(SESSION)) a to následne zarucuje, že se poté všechnyinjekce a outjekce s touto komponentou budou dít v Session kontextu.

Stavovost komponent mimo jiné také eliminuje vliv tlacítka Zpet v prohlížeci. Nikdy senestane, že by uživatel po kliknutí na tlacítko „Zpet“ dostal neplatný stav aplikace.

17

Page 25: Diplomová práce - formát pdf

5.6. VLASTNOSTI JBOSS SEAM PODROBNEJI

5.6.3 Seam konverzace

Jedním ze zajímavých kontextu, které nám Seam prináší je Conversation. Dle definice jekonverzace (Long Running Conversation) sousledností nekolika požadavku, které v konec-ném dusledku tvorí celek, mající nejaký cíl. Takovým cílem muže být odbavení nákupníhokošíku nebo dokoncení pruvodce.

Konverzace je rízena anotacemi, komponenta je oznacena jako @Conversational a me-tody spouštející a ukoncující konverzaci jako @Begin a @End. Behem konverzace jsou auto-maticky dostupné objekty v kontextu konverzace.

Rozšírením konverzací na tzv. konkurentní konverzace (Concurrent Conversations) sedostáváme k tzv. Workspace. V jednom prohlížeci mužeme na více záložkách provádetvíce konverzací (vyrizování více objednávek najednou), pricemž pro každou záložku mámevlastní konverzaci. Tato možnost je dána presunem stavovosti z HTTP Session do stavovéEJB komponenty. Mezi jednotlivými konverzacemi je pak možné programove komunikovat.

5.6.4 Validace vstupních dat HTML formuláru

Jednou z casto využívaných vlastností HTML formuláru je kontrola jejich vyplnení. U techtokontrol se definovaly kontrolované položky prímo ve zdrojovém kódu tríd generujícíchstránky a následne se pak podobné kontroly definovaly opetovne na aplikacní úrovni u JPAEntit (kontroly položek byly dány fyzickým datovým modelem). Díky propojení JSF a EJBse Seamu povedlo odstranit tuto duplicitu a definice validacních kritérií si JSF stránky pre-bírají prímo z JPA Entit. K využití této funkcionality stací formulárové znacky uzavrít donepárové znacky <s:validate/>. Tento krok prispívá k udržovatelnosti kódu.

Podporovány jsou validace definované knihovnou Hibernate Validators, kde jsou imple-mentovány všechny potrebné anotace od rozsahových @Length, @Max, @Min, pres casové@Past, @Future, specializované jako @Email, @Size, @Range až napr. po nastavitelný @Pat-tern.

5.6.5 Tvorba CRUD aplikací

Aplikace manipulující s databází casto obsahují tzv. CRUD (Create-Retrieve-Update-Delete)operace. K implementaci techto operací se používá návrhový vzor DAO (Data Access Ob-ject), jednotlivé objekty jsou ale vesmes totožné. Jboss Seam proto obsahuje již predpripra-vené trídy, ze kterých lze DAO objekty sestavovat.

Máme tedy na výber, zda chceme CRUD operace implementovat pomocí Seam trídyEntityHome, a nebo dokonce se CRUD operace dají implementovat deklarativne v XMLsouboru components.xml. Samozrejmostí je zachování klasického DAO prístupu s nativnímSQL, dokonce tento prístup Seam, v prípade aplikace generované s pomocí seam-gen, sámpoužívá.

18

Page 26: Diplomová práce - formát pdf

5.6. VLASTNOSTI JBOSS SEAM PODROBNEJI

5.6.6 Integrace Business Process Managementu

Vetšina podnikových aplikací implementuje business procesy a pravidla. Business proce-sem rozumíme obvykle nejaký úkol, sled událostí, který musí být proveden v daném po-radí (nekdy je nutná i koordinace mezi ruznými uživateli). Business procesy a pravidla jsoudefinovány analytikem v analytické fázi projektu. O míre naplnení definicí se pak rozho-duje na základe testování aplikace (whitebox a blackbox testování). Propojení analytickéa vývojárské práce se snaží dosáhnout v soucasnosti populární koncepty BPM (BusinessProcess Management) a SOA (Service Oriented Architecture). Ty umožnují analytikovi nazáklade grafické vizualizace implementace zkontrolovat, zda jsou business procesy imple-mentovány korektne, dokonce je pak možné business pravidla redefinovat graficky, bez prí-mého rucního zásahu do kódu.

Implementace konceptu BPM je v prípade Seamu rešena pomocí jBPM, který opet po-chází od skupiny Jboss.

V praxi integrace business process managementu pak muže znamenat napr. nadefino-vání akce uživatelského rozhraní (napr. kliknutí na tlacítko webové aplikace), která spustíbusiness process. Metody, které tento proces spouštejí, potom stací pouze oznacit anotací@CreateProcess. Metody, které startují nebo ukoncují urcitý úkol, oznacíme anotacemi @Be-ginTask a @EndTask. Tímto máme nadefinován sled úkolu, díky cemuž pak jBPM provádíbusiness procesy. Seam navíc obsahuje speciální UI znacky, které umožnují vypisovat infor-mace o procesech (stavové informace).

5.6.7 JBoss Expression Language

Jboss Seam prináší rozšírení i v prípade Unified Expression Language z JSP a JSF. Jako no-vinku máme k dispozici možnost vyvolávání metod z view pomocí teckové notace a do-konce možnost temto metodám prímo z View predávat parametry. To muže vést opet kezjednodušení tvorby aplikace, jelikož odpadá nutnost mezivrstev. Pro rozsáhlejší aplikaceje ale potreba, z duvodu udržovatelnosti a prehlednosti kódu, používat tyto zpusoby vo-lání metod s rozvahou. Obcházení trívrstvé architektury pomocí takovýchto zkratek by senemuselo z dlouhodobého hlediska vyplatit.

Plugin v Jboss Tools nám navíc umožnuje i automatické doplnování funkcí v EL vý-razech, což vývojári ocení. Jboss Expression Language je navíc možné využívat i k definiciparametru napr. v OQL dotazech, v XML konfiguracních souborech nebo v pravidlech JBossRules.

5.6.8 Generování PDF a e-mailu

Seam obsahuje knihovnu jboss-seam-pdf.jar pro vytvárení PDF dokumentu a knihovnujboss-seam-mail.jar pro tvorbu e-mailu. Díky temto knihovnám a nekolika UI znackám (roz-šírené JSP znacky) mužeme nadefinovat Facelets stránku, kterou nám pak Seam prevededo PDF formátu a nebo e-mailu. Odpadá tak nutnost používat dodatecné šablonovací fra-meworky jako iReport nebo FreeMarker pro tvorbu tisknutelných dokumentu. Na obrázku

19

Page 27: Diplomová práce - formát pdf

5.6. VLASTNOSTI JBOSS SEAM PODROBNEJI

5.6.2 je uveden príklad definice PDF dokumentu s využitím Jboss Seam.

<p:document title="Moje první Seam PDF" author="Daniel Gajdoš"><p:image alignment="right" wrap="true" value="/obr1.jpg" /><p:font size="12">

<p:paragraph spacingBefore="16"spacingAfter="40"> Uživatel #{user.id}

</p:paragraph></p:font>

</p:document>

Príklad 5.6.2: Príklad definice PDF dokumentu

5.6.9 Integrace s JBoss Rules

U vetšiny webových aplikací se nevyhneme rízení prístupu pomocí seznamu uživatelu auživatelských rolí.

Problémem se pak stává fakt, že definice prístupových práv pak máme na nekolika mís-tech aplikace, nekteré dokonce duplicitne. Príkladem muže být definice povolených akcípro danou roli, podmínené generování cástí stránek dle role prihlášeného uživatele anebooznackování jednotlivých metod na strane business logiky pro rízení prístupu k temto me-todám. Navíc pak samotná autentizace a autorizace (vyhledání uživatele podle zadanéhojména, overení hesla a pridelení práv) bývá rešena programove a nekdy taky na více mís-tech. Udržovat a nebo dokonce modifikovat takto nastavenou autorizaci je pak nesnadnýúkol.

Tuto situaci se snaží rešit framework 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í prístupová práva k atomickým akcím (uživatel muže prohlížet historii, editovathesla a podobne). Takto nadefinovaná pravidla lze poté využívat v rámci celé aplikace. JbossSeam tento framework integruje, je tedy možné ho využít v plném rozsahu. Definice pravi-dla je uvedena na príkladu 5.6.3

Pred metodu, kterou chceme rídit pomocí Jboss Rules, pak stací doplnit anotaci ve tvaru@Restrict#{s:hasPermission(parametry)} a pravidlo pak nadefinovat v konfiguracním sou-boru.

Parametry pro metodu hasPermission mužeme vyplnovat sami a nebo je Seam doplníjako název komponenty a metody. Pomocí techto parametru potom volíme, které pravidlose má aplikovat, tudíž jméno pravidla je libovolné.

Toto rízení pravidly mužeme používat i na prezentacní vrstve. Definici pravidel tedymužeme mít na jednom míste a to v konfiguracním souboru frameworku Jboss Rules.

20

Page 28: Diplomová práce - formát pdf

5.6. VLASTNOSTI JBOSS SEAM PODROBNEJI

rule CanUserEditContractwhen

c: PermissionCheck(name == "manager", action == "editContract")Role(name == "admin")

thenc.grant()

end;

Príklad 5.6.3: Príklad definice pravidla

5.6.10 Životní cyklus operace

Framework Seam prináší i významné rozšírení životního cyklu zpracování JSF operace,které by melo vést opet ke zjednodušení kódu. Na obrázku 5.3 je uveden životní cyklusJSF operace a rozšírení, které prináší Seam. (zdroj obrázku: [15])

Na uvedeném obrázku vidíme, na kterých místech framework Seam doplnuje funkcio-nalitu konverzací a také místo, kde se provádí propojení mezi modelem a view.

21

Page 29: Diplomová práce - formát pdf

5.6. VLASTNOSTI JBOSS SEAM PODROBNEJI

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

22

Page 30: Diplomová práce - formát pdf

5.6. VLASTNOSTI JBOSS SEAM PODROBNEJI

Obrázek 5.2: Struktura Seam projektu

23

Page 31: Diplomová práce - formát pdf

5.6. VLASTNOSTI JBOSS SEAM PODROBNEJI

Obrázek 5.3: Životní cyklus

24

Page 32: Diplomová práce - formát pdf

Kapitola 6

Spring

6.1 Pozadí frameworku

Stejne jako vetšina frameworku i Spring má za cíl zjednodušení vývoje aplikací v jazyceJava. Zjednodušení v pojetí Spring znamená (zdroj textu: [18]):

• odstranení tesných vazeb mezi POJO (Plain Old Java Object - jednoduché Java ob-jekty) a jednotlivými vrstvami aplikace použitím návrhového vzoru Inversion of Con-trol (IoC). IoC spocívá v rízení chodu aplikace (instanciování konkrétní trídy imple-mentující dané rozhraní, volání konkrétní metody a podobne) z vnejšku (pomocí kon-figurace nebo prímo aplikacním serverem),

• možnost volby mezi implementací business vrstvy aplikace pomocí EJB nebo POJO,což vede k odstranení závislosti mezi architekturou a implementací,

• použití vlastností EJB [transakce, vzdálené volání procedur (RPC) pomocí RMI nebowebových služeb] bez nutnosti použít EJB,

• možnost volby mezi implementací integracní vrstvy (spojení s databází) pomocí ORM(Object Relation Mapping) nebo JDBC. V prípade ORM máme k dispozici ruzné im-plementace, napr. ORM knihovnu Hibernate nebo jednodušší Java EE technologiiJava Data Objects,

• zjednodušení práce s komponentami Java EE (JMS, JDBC, JCA nebo JNDI a další)pomocí abstrakce,

• zjednodušení tvorby a používaní jednotkových testu (unit testy),

• správa a konfigurace business komponent.

6.2 Clenení frameworku

Framework Spring je vnitrne clenen na moduly (viz. obrázek 6.1 ze zdroje [18]). Jednotlivémoduly je možné využívat v rámci tzv. kontejneru, tj. prostredí ve kterém probíhá životnícyklus objektu, spravovaných pomocí Springu.

25

Page 33: Diplomová práce - formát pdf

6.2. CLENENÍ FRAMEWORKU

Obrázek 6.1: Struktura frameworku Spring

• Spring Core modul - jedná se o základní modul frameworku, který poskytuje funkci-onalitu IoC formou tzv. dependency injection (specifický typ IoC). Základem tohotomodulu je trída BeanFactory, která má na starosti životní cyklus jednotlivých POJOobjektu. Ten v tomto prípade zahrnuje tyto operace:

– vytvorení objektu,

– nastavení vazeb mezi objekty,

– inicializace objektu,

– propagace objektu,

– zrušení objektu pri zastavení kontejneru.

• Spring Context modul - modul v roli prostredníka mezi klientským kódem a Bean-Factory umožnující transparentnejší inicializaci objektu (obdoba funkcionality JNDIu EJB).

• Spring DAO (Data Access Object) modul - jedná se o modul zastrešující práci s JDBCAPI. Umožnuje odstranení opakujícího se kódu (získání spojení s databází, vytvárenítzv. SQL statementu, procházení výsledku SQL dotazu a další) a reší problematikutransakcí deklarativním zpusobem. Zároven zajišt’uje konverzi SQL výjimek na hie-rarchii behových výjimek.

• Spring AOP (Aspect Oriented Programming) modul - modul zajišt’ující funkciona-litu aspektového programování, která spocívá v oddelení casto se opakujícího kódu

26

Page 34: Diplomová práce - formát pdf

6.3. VLASTNOSTI FRAMEWORKU PODROBNEJI

(logování, správa transakcí) do tzv. aspektu. Tyto aspekty je možné deklarativnímzpusobem aplikovat na libovolný POJO objekt. Využití této vlastnosti pak vede kezvýšení udržovatelnosti a citelnosti kódu, muže ale zpusobovat problémy pri ladeníaplikací.

• Spring ORM (Object Relational Mapping) modul - modul, zastrešující napojení k ORframeworkum - Hibernate, JDO, Toplink a další.

• Spring Web modul - modul, zajišt’ující podporu napojení na web frameworky - Struts,JSF, WebWork. Dále pak nabízí podporu pro upload souboru, práci s tzv. cookies(ukládání a ctení nastavení na strane prohlížece) a internacionalizaci.

• Spring Web MVC (Model View Controller) modul - nabízí implementaci tohoto ar-chitektonického vzoru [11] ve webových aplikacích.

6.3 Vlastnosti frameworku podrobneji

Spring je nekdy definován jako odlehcený IoC kontejner, i když ve skutecnosti nabízí mno-hem víc než jenom funkcionalitu IoC. Duvodem pro toto oznacení je, že spolu s AOP je IoCnejcastejší duvod pro využití Springu. Použitý zdroj textu: [17].

6.3.1 Inversion of Control (IoC)

Tento návrhový vzor reší problematiku vazeb mezi objekty, které jsou provázány na úrovnizdrojového kódu. Príkladem takovéto tesné vazby je trída Zboží a trída Obchod kdy Obchodmanipuluje s objekty trídy Zboží. Trída Obchod se tedy musí starat o vytvárení a inicializaciobjektu trídy Zboží a v prípade zmeny implementace trídy Zboží (vytvorení potomka tétotrídy) je nutné zasahovat i do trídy Obchod.

Princip IoC reší tuto situaci tím, že se pouze definuje rozhraní, které musí trída Zbožíimplementovat. Následne se pak ve tríde Obchod objevuje pouze práce s tímto rozhraníma s metodami, které toto rozhraní (a nutne i trídy které ho implementují) nabízí. Volba kon-krétní implementace daného rozhraní se pak volí napríklad pomocí konfigurace a je tedymožné ji menit bez rekompilace kódu. Tímto zpusobem je zrušena vysoká závislost mezijednotlivými objekty a dostáváme se k modulárnímu návrhu aplikace.

6.3.2 Dependency Injection

Dependency Injection je specifickým prípadem použití IoC návrhového vzoru. Jedná se o re-šení zpusobu dosazení (napojení) konkrétních implementací daného rozhraní.

Existují tyto základní typy vložení: [18]

• Setter injection - vložení se provádí pomocí set metod (setter). Tento zpusob vkládánínabízí framework Spring. Nevýhoda tohoto modelu je možnost vytvorit trídy bez

27

Page 35: Diplomová práce - formát pdf

6.4. PODPORA VÝVOJOVÝCH PROSTREDÍ

nadefinovaných vazeb, která pak zpusobuje problémy pri prístupu k nedefinovanýchobjektum.

• Constructor injection - vložení se provádí pres konstruktor dané trídy. Tento zpu-sob vkládání nabízí framework Spring a PicoContainer (IoC kontejner). Nevýhodoutohoto modelu je nutnost modifikace kódu pro podporu jednotkových testu.

• Interface injection - vložení se provádí pres definované rozhraní. Tento zpusob vklá-dání nabízí IoC framework Avalon (soucást projektu Apache Excalibur).

6.3.3 Životní cyklus operace

Na obrázku 6.2 je uvedeno schéma životního cyklu zpracování dotazu a vytvorení odpo-vedi. V rámci tohoto zpracování je provedeno mapování ovladacu za behu na základe kon-figurace. (zdroj obrázku: [19])

Na uvedeném obrázku vidíme, na kterých místech framework Seam doplnuje funkcio-nalitu konverzací a také místo, kde se provádí propojení mezi modelem a view.

6.4 Podpora vývojových prostredí

Pro framework Spring máme k dispozici nekolik rozšírení (doplnku, pluginu) pro vývo-jové prostredí Eclipse. Pokud si vybereme plugin SpringIDE, získáme možnost pohodlnejiupravovat konfiguraci parametru frameworku Spring v rámci aplikace.

Zajímavejším rešením je sada pluginu Skyway Visual Perspectives od spolecnosti Sky-way Software. Tato sada prináší možnost programování v grafickém režimu.

Na obrázku 6.3 je ukázka definice procesu ukládání telefonního císla. Mužeme si zdevšimnout možnosti definovat i jednotlivé rozhodovací stromy a vytváret tím i složitejší de-finice metod. Na obrázku 6.4 pak vidíme vygenerovaný kód. Príjemnou vlastností je, ževygenerovaný kód obsahuje i primerenou úroven logování. Tímto zpusobem je jednak mi-nimalizován rucne psaný kód (a tím i chybovost) a taky vizualizován prubehy metod. Díkyvizualizaci je možné provádet napríklad revizi kódu za pomoci bez znalosti programování(analytici, zákazník) a dokonce je možné uvedené vizualizace použít i v dokumentaci. Tentozpusob programování pripomíná principy servisne orientovaných architektur (SOA), kon-krétne pak definici volání webových služeb pomocí jazyka BPEL (Business Process Execu-tion Language).

6.5 Struktura Spring projektu

Po vygenerování projektu pomocí pluginu Skyway Visual Perspecitves dostaneme dva pro-jekty. První projekt obsahuje grafické definice služeb, kontroleru a entit. Druhý projekt s prí-ponou -Web obsahuje samotné generované trídy, konfiguracní soubory a knihovny potrebnépro beh aplikace. V ideálním prípade pak programování probíhá pouze v prvním projektu,

28

Page 36: Diplomová práce - formát pdf

6.5. STRUKTURA SPRING PROJEKTU

Obrázek 6.2: Životní cyklus

tj. v grafickém režimu. Zasahovat do projektu -Web je potreba v prípade použití dalšíchknihoven, které není možné využít v grafickém režimu a nebo v prípade, že chceme vy-generovaný kód upravit. Modifikací vygenerovaných tríd ale ztratíme možnost tyto trídynadále udržovat v grafickém režimu.

29

Page 37: Diplomová práce - formát pdf

6.5. STRUKTURA SPRING PROJEKTU

Obrázek 6.3: Ukázka vývojového prostredí Skyway Visual Perspectives

30

Page 38: Diplomová práce - formát pdf

6.5. STRUKTURA SPRING PROJEKTU

Obrázek 6.4: Ukázka vygenerovaného kódu

31

Page 39: Diplomová práce - formát pdf

Kapitola 7

Grails

7.1 Pozadí frameworku

Posledních nekolik let získávají na popularite tzv. skriptovací jazyky. Duvodem je strmákrivka ucení, tj. cas nutný k seznamování se s jazykem pred tvorbou první funkcní aplikace,je krátký. Pri tomto posuzování se predpokládá, že má programátor jen minimální zkuše-nosti s daným jazykem. Zdroj textu: [7]

Další výhodou skriptovacích jazyku je, že kód je prekládán (interpretován) až za behu ane v bode kompilace. Díky této vlastnosti je rychlejší korekce chyb, jelikož není potreba kódzdlouhave kompilovat, poprípade pak nasazovat. Nevýhodou interpretace za behu je vyššísložitost ladení aplikace a také odhalení prípadných chyb až za behu.

Mezi nejoblíbenejší skriptovací jazyky patrí PHP, Python, Perl, JavaScript, Ruby a nebo iunixový shell.

Práve oblíbenost skriptovacích jazyku vedla k pokusum o integraci s jazykem Java. Mo-tivací pro toto spojení je plné využití prínosu obou prístupu (napríklad ORM mapovánípomocí knihovny Hibernate a procházení kolekcí pomocí zkrácené syntaxe skriptovacíhojazyka). Jedním z takovýchto produktu je i jRuby pricemž se ve skutecnosti jedná o imple-mentaci interpreteru jazyka Ruby v Jave. Tímto zpusobem bylo provedeno spojení jazykaJava s jazykem Ruby. Známým frameworkem, postaveným nad jazykem Ruby, je webovýaplikacní framework „Ruby on Rails“ s otevreným zdrojovým kódem.

Novejším skriptovacím jazykem silne inspirovaným jazyky Ruby, Python, Perl a Small-talk je jazyk Groovy (zdroj [6]). Tento jazyk je oznacován jako alternativa a nebo dokoncejako další generace jazyka Java. Práve nad tímto jazykem vznikl framework Grails (dríveoznacován jako Groovy on Rails). Cílem tohoto frameworku je vysoká produktivita díkypostavení na paradigmatu coding by convention (oznacován i jako Convention over con-figuration). Jedná se o snahu minimalizovat kód a konfiguracní soubory díky nutnosti de-finovat jen nestandardní vlastnosti. Príkladem tohoto prístupu je mapování mezi tabulkouv databázi s názvem Kniha a trídou Kniha. Pokud název trídy odpovídá názvu tabulky, nenínutné toto konfigurovat. Jedná se v principu o zavedení konvencí (z toho pramení i názevparadigmatu), vedoucí ke zmenšení rozsahu rucne psaného kódu. Žádoucí ale je, aby kon-vence nebránily ve flexibilite, tj. pokud chce programátor definovat mapování jinak, melaby být tato možnost zachována.

Snaha o integraci s jazykem Java není pouze ze strany skriptovacích jazyku, ale i plat-forma Java se snaží integraci podporovat. Dukazem toho je i specifikacní proces JSR 223,

32

Page 40: Diplomová práce - formát pdf

7.2. STRUKTURA FRAMEWORKU

který definuje mechanizmus propojení mezi skriptovacími jazyky a platformou Java.Framework Grails se snaží využít maximum z jazyka Groovy a jazyka Java. Toho je docí-

leno plnou integrací obou jazyku, tj. je možné psát cást aplikace v jazyce Groovy (napríkladpráci s retezci a seznamy, ve kterých skriptovací jazyky vynikají svoji strucností) a dalšícásti (napojení k databázi) psát v jazyce Java. Jelikož máme k dispozici pro jazyk Java velkémnožství knihoven použitelných v rámci projektu nad frameworkem Grails, máme možnostprejít na jazyk Groovy postupne. Mužeme tedy zacít psát programy v Grails i bez použitíjazyka Groovy a nebo využít další frameworky jazyka Java.

7.2 Struktura frameworku

Obrázek 7.1: Struktura frameworku [12]

Na obrázku 7.1 jsou uvedeny frameworky a technologie, na kterých je framework Grailspostaven, tj. které frameworky a technologie integruje.

Mimo samotné platformy Java EE a jazyka Groovy patrí k duležitým komponentám fra-meworku Grails i další frameworky:

• Spring - integracní framework popisován v kapitole 6 této práce. V principu se jednáo IoC kontejner rídící tvorbu objektu a vazeb mezi nimi na základe konfiguracníchsouboru.

• Hibernate - populární nástroj pro objektove relacní mapování (ORM) mezi trídamijazyka Java a databázovými tabulkami.

33

Page 41: Diplomová práce - formát pdf

7.3. VLASTNOSTI FRAMEWORKU PODROBNEJI

• Sitemesh - jednoduchý framework pro tvorbu rozložení a vzhledu webových stráneka aplikací (více k problematice viz zdroj [16]).

7.3 Vlastnosti frameworku podrobneji

Mezi zajímavé vlastnosti frameworku Grails patrí:

• Implementace rízená modelem - programování zacíná napojením na databázi pomocítzv. doménových tríd (ekvivalent entit u technologie EJB nebo knihovny Hibernate).Implementace doménových tríd je možná v jazyce Groovy (tzv. Grails Object RelationMapping) a nebo pomocí nástroje Hibernate. V prípade mapování pomocí Hibernatemáme k dispozici i reverzní mapování, tj. vytvorení doménových tríd z již existu-jící databáze. Tímto zpusobem je možné vygenerovat doménové trídy i z rozsáhlýchdatových modelu.

• Scaffolding - automatické generování obslužného kódu a stránek (Grails Server Pages- obdoba JSP) z definovaného modelu.

• Konvence - již pri zakládání projektu nutí framework dodržovat konvence ohledneumístení tríd. Mezi další konvence patrí názvy doménových tríd GSP stránek a po-dobne. Pri dodržování konvencí není potreba definovat mapování na databázové ta-bulky a další konfiguraci. Prípadná konfigurace je možná pomocí anotací. Konfigu-rovat je nutné pouze odchylky od konvencí.

• Služby - tvorba specifických tríd (soubory s príponou Service psané v jazyce Groovy)obsahujících znovupoužitelný kód. Použití techto tríd a jejich metod je pak možnépomocí automatického injektování (funkcionalita frameworku Spring). Odpadá tedynutnost inicializace tríd prímo v kódu. Díky použití frameworku Spring je možné irídit konkrétní injektování pomocí konfigurace.

• Pluginy - jedná se o komponenty, které je možné pridávat do aplikací a doplnovattak jednotlivé funkcionality. Tímto zpusobem je možné nadefinovat napríklad plu-gin pro autentizaci a ten pak používat napríc aplikacemi. Pluginy jsou publikovanéna stránce projektu (viz zdroj [5]). Díky této vlastnosti je možné relativne snadnopridávat funkcionalitu k aplikacím bez další konfigurace.

• Plánovac - v rámci frameworku je integrován plánovac úloh s otevreným kódemQuartz, pomocí kterého je možné definovat periody spouštení aplikací postavenýchnad tímto frameworkem.

• Podpora databázových prostredí - Grails standardne obsahuje tri prostredí (develo-pment, test, production), pricemž u každého prostredí je možné nadefinovat prístupdo jiné databáze. Tímto zpusobem mužeme snadno prepínat napríklad mezi testo-vací a vývojovou verzí databáze.

34

Page 42: Diplomová práce - formát pdf

7.4. PODPORA VÝVOJOVÝCH PROSTREDÍ

• Podpora testování díky možnosti definovat jednotkové testy pomocí tríd v jazyceJava (JUnit testy) a nebo pomocí tríd GroovyTestCase, které jsou dokonce genero-vány. Integracní testování probíhá pomocí tzv. protéz (mock objektu) a tímto zpuso-bem je umožneno testovat konkrétní vrstvy aplikace izolovane.

• Vývojové prostredí - framework prináší možnost generovat jednotlivé trídy pomocípríkazového rádku a nástroje grails. Tímto zpusobem je možné generovat samotnéprojekty, doménové trídy, obslužné trídy (kontroléry) a nebo i vytvorit balícek apli-kace ve formátu war. Prozatím ale neexistuje plugin, který by umožnil volání tohotonástroje prostrednictvím vývojového prostredí.

7.4 Podpora vývojových prostredí

Pro pohodlnou práci s tímto frameworkem jsou k dispozici tzv. pluginy pro jednotlivé vývo-jové prostredí. Ty umožnují kontrolu a zvýraznování syntaxe jazyka Groovy a v nekterýchprípadech také automatické doplnování syntaxe.

Pro zvolené vývojové prostredí Eclipse je k dispozici plugin GroovyEclipse, který nabízítyto funkcionality:

• spouštení aplikací ve vestaveném webovém kontejneru Jetty,

• ladení aplikace (debugging) prímo z vývojového prostredí Eclipse,

• tvorba doménových a testovacích tríd, u kterých plugin generuje pouze jejich kostru,kterou je nutné doplnit,

• editace GSP stránek pomocí zvýraznování a automatickému doplnování syntaxe,

• spouštení jednotkových testu vytvorením konfigurace ve vývojovém prostredí.

35

Page 43: Diplomová práce - formát pdf

Kapitola 8

Praktické srovnání

8.1 Požadavky na vzorovou aplikaci

Pro srovnání praktické použitelnosti jednotlivých frameworku jsem se rozhodl vytvorit jed-noduchou webovou aplikaci, predstavující telefonní seznam.

Tato aplikace bude nabízet (funkcní požadavky):

• prihlášení uživatele pomocí jména a hesla,

• správu uživatelských úctu (pridání, mazání a modifikace uživatelského úctu),

• správu kontaktu (pridání, mazání a modifikace kontaktu) k danému uživatelskémuúctu,

• správu telefonních císel (pridání, mazání a modifikace telefonního císla) k danémukontaktu, pricemž telefonní císlo se bude skládat z predvolby a císla samotného,

• zobrazení seznamu evidovaných uživatelských úctu, kontaktu a telefonních císel,

• ukládání dat v relacní databázi - uživatelských úctu, kontaktu i telefonních císel.

Dále tato aplikace bude splnovat tyto mimofunkcní požadavky:

• zamezení manipulace s daty bez prihlášení,

• umožnení odhlášení,

• logování vlastní cinnosti,

• možnost volby jazykového prostredí aplikace - lokalizace do ceštiny a anglictiny.

Primárním cílem vytvárené aplikace je demonstrace možností jednotlivých frameworkua popis pracnosti tvorby aplikace s použitím zvoleného vývojového prostredí Eclipse.

Všechny tri vzorové aplikace budou využívat totožný fyzický datový model (viz obrázek8.1).

36

Page 44: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

Obrázek 8.1: Fyzický datový model

8.2 Proces tvorby vzorových aplikací

8.2.1 Vývojové prostredí

Podobne, jako si uživatelé pocítacu volí svuj oblíbený webový prohlížec, volí si i progra-mátori své oblíbené vývojové prostredí a pokud to jen trochu jde, snaží se používat pouzetoto a plne ho využít. Ve stejné situaci jsem byl zpocátku také, i když je pravda, že jsem meldve vybraná vývojová prostredí a sice Eclipse a NetBeans. Pro lepší srovnání bylo ale du-ležité, aby vzorové aplikace a celková práce s frameworky byla demonstrována v prostredíjednom. Vzhledem k dostupnosti rozšírení (pluginum) k jednotlivým frameworkum, padlavolba na Eclipse. Duvodem práve pro toto vývojové prostredí byla sada pluginu SkywayPerspectives (pro podporu tvorby aplikací nad frameworkem Spring), která existuje pouzepro vývojové prostredí Eclipse.

37

Page 45: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

8.2.2 Aplikace SeamPhoneBook

Pro seznámení s frameworkem Jboss Seam velice dobre poslouží demo aplikace, které jsouprímo soucástí distribuce frameworku. Tyto demo aplikace do srpna 2008 bežely online,prímo na domovské stránce projektu, takže bylo možné si jednotlivé príklady vyzkoušet aaž následne je zprovoznit.

Nejzajímavejší z techto demo programu byla z mého pohledu komplexní aplikace Seam-Booking. Jednalo se o rezervacní systém, který je výborne okomentovaný. U každé operaceje popsáno, jakou plní funkcionalitu a jakým zpusobem je realizována. Navzdory komplex-nosti funkcionality aplikace (prihlášení, vyhledávání hotelu, zadávání rezervacních údajuaž po zobrazení rezervací) byl kód prehledný a pochopitelný.

Ke zprovoznení techto demo aplikací na vlastním pocítaci je nutné si krome vývojovéhoprostredí a Javy nainstalovat a seznámit se s programem Maven. Maven je nástroj pro au-tomatizované sestavování aplikací, jedná se o následovníka nástroje Ant, na kterém jsoudodané vzorové aplikace postaveny. Zprovoznení a sestavení techto vzorových programutedy vyžaduje jistou práci, bylo by vhodnejší, kdyby demo aplikace byly dostupné prímove forme projektu pro vývojové prostredí Eclipse s využitím Antu.

Zajímavým produktem, který výrazne ulehcuje práci s tímto frameworkem, je sada do-plnku (pluginu) Jboss Tools a Seam-gen pro vývojové prostredí Eclipse. Seam-gen je ex-terní nástroj pro zakládání projektu a generování jednoduchých stránek pro prístup k data-bázi. Jboss Tools slouží ke správe aplikacního serveru Jboss prímo z vývojového prostredía nabízí možnost automatického nasazování aplikací. Zároven toto rozšírení pomáhá priladení aplikací, jelikož je možné ladit aplikaci ve vývojovém prostredí prímo nad aplikac-ním serverem, bez zdlouhavého nastavování. Díky kombinaci Jboss Tools a Seam-gen jemožné prímo ve vývojovém prostredí zakládat projekty pod frameworkem Seam a gene-rovat obslužné stránky (jednoduché CRUD aplikace) bez spouštení externích komponent.Takto založené projekty mají již nadefinovanou strukturu a pribaleny potrebné knihovnyframeworku. Díky takto nakonfigurovanému prostredí je sestavení vlastní aplikace dokoncerychlejší, než zprovoznení priložených demo programu.

Po nainstalování a spuštení Eclipse Ganymede (poslední verze vývojového prostredí Ec-lipse) si zvolíme adresár, který má být tzv. „Workspace“, tj. pracovní plochou, do které seukládají všechny projekty. Obsah tohoto adresáre se nachází na médiu, priloženém k tétopráci. V tomto adresári bude zároven umístena i databáze k temto vzorovým aplikacím. Dotohoto prostredí je potrebné si doinstalovat sadu pluginu JBossTools-2.1.2.GA. Je ale dule-žité instalovat poslední verze obou produktu, jelikož u starších verzí se objevovalo velkémnožství problému s kompatibilitou knihoven.

Pro vytvorení projektu pro SeamPhoneBook použijeme rozšírení Seam-Gen frameworkuSeam integrovaném v Jboss Tools. Založíme si Seam Web Project a pojmenujeme ho seam-PhoneBook (JbossTools upozornuje, že název projektu v Jboss Seam musí zacínat malýmpísmenem). Pri zakládání projektu si v pruvodci zvolíme použití Java Persistence, jelikožho využijeme pro napojení k databázi. Je výhodou, že prímo pri vytvárení projektu si pro-gramátor muže zvolit typ databáze, na kterou se chce napojit, název schématu, verze fra-

38

Page 46: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

meworku a také prímo název tzv. package (slouží k organizaci java tríd, fyzicky packagepak odpovídá adresárové strukture projektu). Nastavením techto parametru tedy prímo ur-cujeme strukturu projektu a zakládáme tak kostru budoucí aplikace nad konkrétní verzíSeamu.

Po potvrzení parametru nám SeanGen rovnou vygeneruje 4 projekty:

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

• SeamPhoneBook-ear - predstavuje samotnou aplikaci (tzv. EAR = Enterprise Archive)a obsahuje všechny knihovny, které budou soucástí aplikace. Dále pak obsahuje XMLsoubor s definicí tzv. DataSource, tj. zdroj dat predstavující adresu k databázi, jménoa heslo pro pripojení. Soucasne se na tomto míste nastavuje to, který ovladac se pronapojení k databázi má použít. Tyto parametry jsou vyplneny na základe údaju na-stavených v rámci vytvárení projektu.

• SeamPhoneBook-ejb - obsahuje aplikacní cást a tedy všechny java trídy, které se sta-rají o vykonávání logiky aplikace.

• SeamPhoneBook-test - obsahuje testovací trídy a další konfiguracní soubory, do kte-rých v jednoduchých aplikacích není treba zasahovat.

Tímto nám vznikne dobre spravovatelná a rozdelená 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 programátor nerozhodne stanovit sistrukturu sám a sestavit si celou aplikaci rucne bez využití Seam-Gen. Takto vytvorenouaplikaci, která zatím neobsahuje žádnou logiku, mužeme rovnou nasadit na vestavený apli-kacní server Jboss bez jakékoliv další konfigurace. To výrazne urychluje úvodní fázi im-plementace projektu, jelikož se ihned po vygenerování projektu dostáváme k sestavitelné anasaditelné verzi a mužeme pristoupit k tvorbe samotné logiky, o zbytek se nám stará jižsamotný framework.

Po stanovení základní struktury je potreba si vytvorit databázi, kterou bude aplikacevyužívat. Prístup bottom-up, tj. nejdrív vytvorit databázi a pak až k ní aplikaci, je v tomtoprípade zvolen zámerne, slouží k predvedení procesu generování obslužných stránek. Inici-alizacní SQL skript se nachází v souboru DBCreate.sql (obsažen na priloženém nosici), jednáse o tabulky Users, Contacts a Phone_Numbers, pricemž tabulka Phone_Numbers má cizíklíc na tabulku Contacts a tabulka Contacts má cizí klíc na tabulku Users.

Tento skript si spustíme nad databázi Derby a ten nám vytvorí odpovídající schéma atabulky. Pro manipulaci s databázi je vhodné si do Eclipse doinstalovat rozšírení QuantumDB. Je potreba pocítat s tím, že si tyto aplikace, které pracují s jednou Derby databází, mohoututo databázi zamykat. Tato situace nastane, pokud bychom si zvolili pro náš projekt typdatabáze Derby Embeded. Tento typ znamená, že se k jedné databázi muže pripojit pouzejedna aplikace. Rešením je bud’ vypnutí aplikacního serveru pri práci s Quantum DB, anebovypnutí Quantum DB a restartování vývojového prostredí. Nejedná se o pohodlný prístup,ale vzhledem k jednoduchosti skriptu to v tomto prípade nevadí. Pro pohodlný prístup

39

Page 47: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

si ale zvolíme typ Derby Network, který si nepouští aplikace prímo (jak je tomu u DerbyEmbeded), ale uživatel (príklad spuštení je na priloženém médiu).

Po vytvorení databáze a tabulek pak vyvoláme nad projektem Seam Generate Entities,zadáme Reverse Engineer from database a Seam-Gen nám do predem nadefinovaných ba-líku vytvorí tyto typy tríd:

• Entity (trídy reprezentující rádky tabulky), EntityHome (trídy pro manipulaci s ob-sahem tabulek).

• Speciální trídy EntityQuery, které slouží k manipulaci se seznamy a realizují vyhle-dávání záznamu v databázi.

Všechny tyto trídy budou vygenerovány do projektu SeamPhoneBook-ejb. Seam-Gen do-plní tyto trídy i o logování pomocí knihovny log4j, takže i tuto cást budeme mít alesponz cásti pokrytou a není potreba log4j do projektu integrovat.

Seam-Gen nám zároven do projektu SeamPhoneBook vygeneruje i prezentacní cást apli-kace, a to konkrétne formuláre pro zobrazování seznamu, editaci jednotlivých záznamu ataky pro pridávání a rušení záznamu. 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 prehledné a mají dobre odladené chování, takže se již nemusíme starat, vekterý moment probíhá samotná modifikace dat v databázi. Programátor je tak odstínen jakod samotného SQL, tak i od správy transakcí a stará se hlavne o další doupravení vizuálnícásti aplikace, poprípade pak o doplnování další logiky.

Vzhledem k tomu, že aplikace Seam-gen negeneruje stránky na základe vztahu mezi ta-bulkami, je nutné tuto cást logiky doprogramovat. Vygenerované trídy a stránky zajišt’ujípouze prístup k jednotlivým tabulkám a jejich propojení pomocí cizích klícu jak na úrovniJava kódu, tak i na úrovni JSP stránek jsou nejvetším problémem, který musíme u tohotoframeworku rešit. Úpravy spocívají v modifikaci SQL finderu, v prípade vyhledávání kon-taktu, abychom docílili toho, že se prihlášenému uživateli zobrazují pouze jeho kontakty ane všechny kontakty uložené v databázi. V rámci této funkcionality se dostaneme i k injekcia outjekci, jelikož potrebujeme vyrešit prenos identifikace prihlášeného uživatele z autori-zacní cásti do vyhledávácí logiky kontaktu.

V prípade vazby mezi kontakty a telefonními císly mužeme situaci rešit jednodušeji a topomocí predávání identifikace kontaktu mezi stránkami jako parametru.

V našem prípade budeme tedy s tvorbou aplikace SeamPhoneBook témer u konce. Stacídoprogramovat logiku ohledne prihlašování uživatelu, ke které nám Seam-Gen predgene-roval trídy, takže stací doplnit samotné overení jména a hesla v databázi a proces prihlá-šení tímto vytvoren. Seam se zároven stará o zabezpecení prístupu k jednotlivým stránkám,takže nemusíme rešit, zda se neprihlášený uživatel muže dostat ke stránkám pro zobra-zování seznamu. Tímto zpusobem vytvorenou aplikaci stací už jenom lokalizovat a finálníverze aplikace bude tímto pripravena.

Na obrázku 8.2 je náhled obrazovky aplikace SeamPhoneBook. Vzhled aplikace odpo-vídá šablone seam-gen, prípadné úpravy se provádí pomocí zmeny CSS (Cascading StyleSheet - kaskádové styly) stylu.

40

Page 48: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

Obrázek 8.2: SeamPhoneBook

8.2.3 Aplikace SpringPhoneBook

V prípade frameworku Spring je situace ohledne dostupných príkladu složitejší. Demo apli-kace predstavují jednotlivé funkcionality frameworku a chybí komplexnejší príklad, kterýby bylo možné využít pri tvorbe vzorové aplikace.

Pruzkum príkladu tedy ukoncíme a zacneme tvorit vzorovou aplikaci bez nich. Jelikožse mi u frameworku Seam osvedcilo rozšírení vývojového prostredí o pluginy JbossTools aSeam-gen, hledal jsem, zda neexistují podobné produkty i k frameworku Spring. K dispozicimáme jednodušší sadu pluginu SpringIDE pro úpravu konfiguracních souboru, která alesnižuje pracnost tvorby aplikace jen minimálne. Dalším produktem, který v našem prípadepoužijme, je sada pluginu Skyway Visual Perspectives.

Instalace této sady pluginu se však neobejde bez komplikací. Na stránkách výrobce jek dispozici verze 6.1 formou tzv. Update site (možnost doinstalovat do již existujícího vý-vojového prostredí) a pak verze 6.2, která ale existuje pouze jako samostatné vývojové pro-stredí (obsahuje v sobe i Eclipse). Pri instalaci verze 6.1 do vývojového prostredí, ve kterémjsou vyvíjeny i další vzorové aplikace, mužeme narazit na problémy s kompatibilitou kniho-ven a z toho duvodu je vhodnejší použít samostatné vývojové prostredí Skyway Visual Per-spectives 6.2. Pro úcely popisu vývoje aplikace by použití predpripraveného prostredí melovyhovovat, jelikož stejnou funkcionalitu mají prinášet i samostatné pluginy. Na stránkáchvýrobce jsou pro toto prostredí dostupné videotutoriály, které demonstrují práci s tímto pro-stredím.

Instalace a spuštení této verze vývojového prostredí by se melo obejít bez problému,první zádrhel ale nastane pri volbe pracovní plochy (Workspace). Toto prostredí totiž neu-

41

Page 49: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

možnuje volbu umístnení pracovní plochy, ale nastavuje cestu prímo do adresáre workspacepod vývojovým prostredím. Tento fakt je velice nepríjemný, jelikož se pak zbytek aplikacínachází na jiném míste. Pri pokusech o presun projektu na jiné místo bude docházet k pro-blémum pri zobrazování jednotlivých elementu (kontroleru, entit a podobne). Z tohoto du-vodu je SpringPhoneBook i na priloženém médiu v jiném adresári než projekt SeamPhone-Book.

Tvorba projektu zacíná založením Skyway projektu. V rámci zakládání projektu je možnézvolit jeho název, adresár, kam se budou ukládat modely, možnost zvolit zda se pro tvorbukomponent bude používat nástroj Maven a dále pak package, do kterých se mají genero-vat trídy. Volba, zda používat Maven, je na každém programátorovi - pri tvorbe vzorovéaplikace se nám neprojeví rozdíl ve vygenerovaném kódu pomocí nástroje Maven.

Po založení projektu musíme nadefinovat zdroj dat (DataStore). Tvorba DataStore spo-cívá ve volbe jeho jména a v následné konfiguraci. Po vytvorení si tedy nadefinujeme napo-jení k Derby databázi PhoneBookDB. Tady se ale objevil zásadní problém. Pri tzv. importudatových typu (generování entit) z databáze Derby se nám sice zobrazí seznam tabulek,samotný proces ale selže a žádné trídy se nevygenerují. Problém mužeme obejít importemdatových typu z databáze Oracle, ve které si vytvoríme stejné databázové schéma a ná-slednou rekonfigurací DataStore opet na Derby. Postup je to sice nepríjemný, ale vzhledemk tomu, že i na stránkách výrobce se objevují informace o obdobných problémech, budemeto považovat za nutnost. Na priloženém médiu jsou z tohoto duvodu priloženy i instalacnísoubory databáze Oracle (jedná se o volne dostupnou verzi Oracle Express Edition).

Po vygenerování entit (datových typu) je možné overit správnost vazeb mezi entitamidíky prehlednému grafickému editoru. Príjemnou vlastností tohoto prostredí je, že generujei vazby mezi entitami. Nad takto vygenerovanými entitami již stací vyvolat Scaffolding -> Generate CRUD a vygenerují se jak obslužné trídy (obsahující metody pro vyhledávánídle všech položek a pro manipulaci s daty), tak i jednotlivé stránky. Vygenerované stránkyale bohužel nerespektují vazby mezi tabulkami (které ale v entitách vygenerované jsou),je tedy nutné si je doupravit. Díky vygenerovaným relacím mezi entitami je ale úpravastránek, aby zobrazovaly kontakty k danému uživateli a následne pak telefonní císla prodaný kontakt, relativne jednoduchá. Stací dodefinovat metody pro vyhledávání záznamudle požadovaných parametru a pak upravit stránky, aby bylo možné zobrazovat a upravo-vat podrízené záznamy (kontakty pro uživatele a telefonní císla pro kontakty). Pri modi-fikaci kódu je praktickou vlastností zvoleného vývojového prostredí možnost editovat vevizuálním režimu. Tento zpusob programování umožnuje graficky definovat posloupnostoperací v rámci metody a prehledne definovat vstupní a výstupní parametry. Vývojové pro-stredí nám prehledným zpusobem nabízí seznamy metod jednotlivých tríd, které mužemepoužít. Takto generovaný kód je dokonce chránen proti modifikaci, takže máme zajištenoushodu mezi graficky vyobrazenou a skutecnou funkcionalitou dané metody. Muže se námale stát, že pri kontrole kódu se nekteré zmeny provedené v grafickém režimu do kódu ne-vygenerují a bude nutné je v grafickém režimu provést opakovane. Nemelo by se to stávatcasto, takže tento zpusob programování mohu jen doporucit, jelikož to prináší zprehled-není kódu. Doplnení logování pak znamená pouze zvolit grafický element logování (Log

42

Page 50: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

Message) a poté už jen nakonfigurovat (opet graficky), co presne se má do logu zapsat.Stanovení poradí operací v rámci metody pak provádíme propojováním uzlu v grafu a defi-nováním vstupního uzlu. Pokud nejaký uzel v grafu není dostupný ze vstupního uzlu, pakse v kódu vubec neobjevuje. Jedná se tedy o alternativu k zakomentovávaní metod, kdyfunkcionalitu v našem prípade máme nadefinovanou pouze v grafickém režimu, ale v kóduse neobjeví, dokud není skutecne používána. Tento zpusob opet prispívá k lepší citelnosti astandardizaci kódu, protože je styl psaní dán vývojovým prostredím a ne programátorem.Pokud takto vytvorený kód pracuje dle požadavku, tak je všechno v porádku - horší je, po-kud chce programátor kód optimalizovat nebo opravit, protože tuto možnost pri zachovánígrafického režimu nemá.

Další zajímavou vlastností frameworku a zvoleného prostredí je možnost ukládat pro-menné do jednotlivých kontroleru (trídy sdružující obslužní metody k dané entite) a využí-vat je mezi metodami. Jedná se o názorné použití injekce a outjekce, které je díky vizuálnímurežimu dobre prehledné. Vývojové prostredí dokáže rozpoznat, pokud by programátor melv definicích chyby (príkladem takových chyb je odstranení definice promenných a odkazo-vání se na ne nebo použití metod bez správne nadefinovaných vstupních parametru) a natyto chyby upozornuje.

Na obrázku 8.3 je náhled obrazovky aplikace SpringPhoneBook. Vzhled aplikace odpo-vídá šablone pluginu Skyway Visual Perspectives, prípadné úpravy se opet provádí pomocízmeny CSS stylu.

Obrázek 8.3: SpringPhoneBook

43

Page 51: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

8.2.4 Aplikace GrailsPhoneBook

V prípade tretího zvoleného frameworku bude situace ze zacátku nejsložitejší. Jelikož sejedná o framework Grails postavený nad skriptovacím jazykem Groovy, mužeme ocekávat,že zkušenosti s jazykem Java nebudou pri tvorbe aplikací v tomto frameworku použitelné.Proces tvorby vzorové aplikace v tomto frameworku tedy opet zacne zkoumáním dostup-ných materiálu a demo aplikací. Výborným materiálem je sada tutoriálu prímo na stránkáchprojektu (viz zdroj [4]), které, až na nekolik málo výjimek, obsahují pouze návody k využitíjednotlivých funkcionalit frameworku a chybí ucelenejší vzorový program, který by pred-stavil vlastnosti frameworku komplexneji.

Po seznámení se se základními vlastnostmi a možnostmi, které framework nabízí, ná-sleduje hledání vhodného rozšírení vývojového prostredí Eclipse. Pro samotný frameworkGrails zatím není k dispozici plugin pro toto vývojového prostredí, jsou ale k dispozici plu-giny pro vývojová prostredí NetBeans a IntelliJ IDEA. Užitecným pro nás bude plugin projazyk Groovy, který alespon nabízí kontrolu a doplnování syntaxe tohoto skriptovacího ja-zyka. V prípade kombinace jazyka Groovy s jazykem Java tento plugin oznacuje importo-vané Java trídy za neexistující, ale jinak by melo být psaní kódu bez problému.

Nejužitecnejším nástrojem, který nám výrazne ulehcí práci s tímto frameworkem budeframework sám. Po nainstalování frameworku, které spocívá v rozbalení archivu a rucnímnastavení cesty operacního systému, máme prostrednictvím príkazového rádku k dispozicipríkaz grails. Pomocí tohoto príkazu je práve možné využívat funkcionality frameworkupodporující tvorbu a testování aplikací. Po vyvolání príkazu grails help se nám zobrazí se-znam 40 príkazu, jejichž popis pak mužeme vyvolat opet pomocí nápovedy. V rámci práces frameworkem postupne využijeme tyto príkazy:

• create-app - založení projektu pro vývojové prostredí Eclipse,

• generate-all - generování obslužného kódu a stránek (tzv. scaffolding),

• war - sestavení aplikace do webového archivu (.war soubor),

• run-app - nasazení a spuštení aplikace ve vestaveném serveru.

Založení projektu tedy bude spocívat ve spuštení externího príkazu grails create-app a nade-finování názvu projektu GrailsPhoneBook. Tímto nám framework Grails vygeneruje projektna zvoleném míste a tento projekt poté bude možné rovnou importovat do vývojového pro-stredí Eclipse. Vygenerována bude jak samotná adresárová struktura, tak i základní konfi-guracní soubory a nadefinovány potrebné knihovny. Zároven bude nakonfigurována i pod-pora logování pomocí knihovny log4j, kterou pak bude možné bez další konfigurace zacítpoužívat pro logování cinnosti aplikace.

Takto vzniklou aplikaci bude možné rovnou vyzkoušet pomocí príkazu grails run-app,címž se provede nasazení aplikace a spuštení serveru na portu 8080 (císlo portu není možnémenit). Jedná se sice o prázdnou aplikaci pouze s jednoduchou úvodní stránkou, ale prootestování vytvoreného projektu je vhodné mít jednoduchý postup spuštení aplikace.

44

Page 52: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

Následuje již samotný proces tvorby aplikace. S využitím tutoriálu (viz zdroj [2]) a na-konfigurování prístupu k databázi v souboru DataSource.groovy si nakonfigurujeme prí-stup k databázi pomocí nástroje Hibernate. Framework nabízí i nativní formu napojení k da-tabázi bez Hibernate. Vzhledem k popisum rešení vazeb mezi tabulkami pomocí Hibernatea možnosti popisovat entity pomocí jazyka Java si ale zvolíme variantu s Hibernate. Pod-statná cást aplikace bude tedy realizována v jazyce Java s využitím knihovny Hibernate,takže bude možné framework Grails nasadit i na již existující projekty, kde již máme nade-finovanou integracní vrstvu k databázi pomocí Hibernate. Tímto je možné provést prechodz jazyka Java na jazyk Groovy postupne.

Tvorba entit pomocí Hibernate spocívá ve využití tzv. reverzní techniky. Ta se skládáz nakonfigurování prístupu k databázi (hibernate.cfg.xml) a výberu tabulek, ze kterých semá provést generování (seznam nakonfigurujeme v souboru hibernate.reveng.xml). Ná-sledne si vytvoríme konfiguraci Hibernate Code Generation Configuration, u které si na-definujeme, že se mají použít uvedené konfiguracní soubory. Spuštením této konfigurace sivygenerujeme entity k jednotlivým tabulkám. Nepríjemností ale bude, že Hibernate nedete-kuje vazby mezi tabulkami, a proto bude nutné do souboru hibernate.reveng.xml tyto vazbydodefinovat a entity znovu vygenerovat. Tímto se nám vygeneruje package org.domain.grailsphonebooka v nem trídy jazyka Java s anotacemi definující entity.

Na takto vygenerovaných tzv. doménových trídách (obdoba oznacení pro entity v jazyceJava) si následne vyvoláme externí príkaz grails generate-all, címž se vygenerují obslužnétrídy (tzv. Controllers, s príponou .groovy) a stránky (tzv. Views, s príponou .gsp). Taktodoupravenou aplikaci bude možné opet pomocí externího príkazu grails run-app otestovat.Vygenerované stránky umožnují prohlížení a editaci jednotlivých záznamu vcetne vazeb,tj. napríklad pri vytvárení kontaktu je možné vybrat ze seznamu uživatele, ke kterému sedaný kontakt má asociovat. Procházení mezi stránkami odpovídá datovému modelu, tj. zeseznamu uživatelu je možné prejít na zobrazení kontaktu pro konkrétního uživatele.

Doupravení aplikace tedy spocívá v doplnení metody pro vyhledávání kontaktu prokonkrétního uživatele a úpravu stránek pro zobrazení kontaktu pro aktuálne prihlášenéhouživatele.

Doplnení logiky ohledne prihlašování následne provedeme s využitím tutoriálu k plu-ginu JSecurity (viz zdroj [3]). Tímto vzniknou v databázi další tabulky obsahující informaceo rolích a uživatelích, kterí mají prístup k aplikaci.

Na obrázku 8.4 je náhled obrazovky aplikace GrailsPhoneBook. Vzhled aplikace odpo-vídá šablone nástroje grails, prípadné úpravy se opet provádí pomocí zmeny CSS stylu.

45

Page 53: Diplomová práce - formát pdf

8.2. PROCES TVORBY VZOROVÝCH APLIKACÍ

Obrázek 8.4: GrailsPhoneBook

46

Page 54: Diplomová práce - formát pdf

Kapitola 9

Parametrické srovnání frameworku

9.1 Srovnávací kritéria

V rámci predešlých kapitol byl popsán zpusob tvorby vzorové aplikace v jednotlivých fra-meworcích s použitím vybraných nástroju. Jedná se o srovnání ze subjektivního hlediska,jelikož složitost tvorby vzorových aplikací nebyla kvantifikovatelná.

Pro objektivnejší srovnání budou vytvorené vzorové aplikace hodnoceny podle techtokritérií:

• rychlost zpracování požadavku, tj. cas potrebný pro vygenerování a zobrazení HTMLstránky s odpovedí na daný uživatelský požadavek,

• množství generovaného kódu,

• množství konfiguracních souboru,

• velikost war balícku.

9.2 Test - rychlost zpracování požadavku

V rámci tohoto testu bude provedeno merení, jak dlouho trvá vyrízení uživatelského po-žadavku (vygenerování a zobrazení HTML stránky s odpovedí). Merení budou provedenynad tímto prostredím:

• OS - Windows XP

• CPU: 2.00 GHz, Intel Core2 Duo

• 3 GB RAM

• HDD 250 GB 7200 RPM

• webový prohlížec Mozilla Firefox v2.0.0.20

Konkrétní namerené hodnoty jsou uvedeny v príloze na konci této práce.V tomto testu dosáhl nejlepších hodnot (nejrychlejší odpoved’) framework Spring. Tento

framework prokázal témer lineární nárust casu zpracování vhledem k objemu zobrazova-ných dat.

47

Page 55: Diplomová práce - formát pdf

9.3. MNOŽSTVÍ GENEROVANÉHO KÓDU

Obrázek 9.1: Graf výsledku testu

V prípade frameworku Grails se jednalo o výrazný nárust casu zpracování dotazu v prí-pade 64000 záznamu a framework Seam u takovéhoto množství dat koncil chybou a z tohotoduvodu nebylo možné zmerit cas zpracování.

9.3 Množství generovaného kódu

V rámci tohoto srovnání bude posuzována délka Java/Groovy kódu bez kódu JSP/GSPstránek. Z posuzovaných zdrojových souboru budou vypušteny komentáre, jelikož tyto ne-mají vliv na funkcionalitu. Kód bude rozdelen do kategorií a posuzován podle celkovéhopoctu rádku a celkového poctu znaku po vynechání bílých znaku (mezery, zalomení rádku,tabelátory).

Posuzované parametry:

• celkový pocet rádku [celkove rádku],

• celkový pocet znaku bez bílých znaku [celkove znaku bez bílých znaku].

Výsledky srovnání zachycuje tabulka 9.1, ve které jsou mimo celkového souhrnu uve-deny i jednotlivé kategorie zdrojového kódu pro lepší srovnání podílu jednotlivých katego-rií na celkové velikosti generovaného zdrojového kódu.

Pri srovnání velikosti generovaného kódu se u frameworku Seam projevila výhoda pro-pojení JSF a EJB, jelikož výsledný kód obsahoval pouze entity a obslužné trídy pro obsluhutechto entit.

Obdobných výsledku dosáhl framework Grails, u kterého se projevila úspornost skrip-tovacího jazyka Groovy a definici mapování pomocí knihovny Hibernate.

48

Page 56: Diplomová práce - formát pdf

9.4. MNOŽSTVÍ KONFIGURACNÍCH SOUBORU

V prípade frameworku Spring bylo množství generovaného kódu výrazne vyšší. Duvo-dem je vygenerování velkého množství vyhledávacích metod v prípade DAO vrstvy (prímévolání databáze) a rovnež velikost kódu predstavujícího controller vrstvu.

9.4 Množství konfiguracních souboru

V tomto srovnání budeme srovnávat pocet a velikost konfiguracních souboru jednotlivýchaplikací.

V rámci srovnání množství a velikosti konfiguracních souboru (výsledky zachycené v ta-bulce 9.2) je srovnatelná velikost potrebné konfigurace mezi frameworky Grails a Seam az hlediska celkové délky je velikost konfigurace frameworku Spring témer dvojnásobná.Duvodem v prípade frameworku Spring byla rozsáhlá konfigurace mapování jednotlivýchURL na odpovídající trídy controller vrstvy.

9.5 Velikost war balícku

V tomto srovnání budeme srovnávat velikost aplikace zabalené do war balícku. V rámcitechto balícku jsou zapocítány i všechny potrebné knihovny daného frameworku a dalšíchpoužitých technologií.

Merené parametry:

• celková velikost v bytech - komprimovaná data (velikost war balícku) [war],

• celková velikost v bytech - nekomprimovaná data (velikost po rozbalení war balícku)[data],

• pocet knihoven [# knihoven],

• celková velikost knihoven v bytech - nekomprimované [knihovny],

• celková velikost kódu (bez knihoven) - nekomprimované [kód].

Výsledky tohoto srovnání zachycené v tabulce 9.3 poukazují na relativne rozsáhlé množ-ství dogenerovaného a preloženého kódu vzhledem k puvodní velikosti generovaného kóduv jazyku Groovy. V tomto prípade to ale znamená, že samotný framework dogeneroval vet-šinu kódu až v case prekladu, což v tomto prípade hodnotím jako príspevek k dobré citel-nosti a udržovatelnosti kódu.

Velikost samotného kódu (již preloženého do class souboru) v prípade frameworku Seama Spring odpovídá množství vygenerovaného zdrojového kódu. V prípade frameworkuSeam malé množství a celková velikost knihoven odpovídá využití technologií Java EE (JPAEntity a JSF), díky cemuž jsou další knihovny použity z behového prostredí (Java RuntimeEnvironment). V prípade frameworu Grails a Spring je srovnatelné jak množství, tak i cel-ková velikost knihoven.

49

Page 57: Diplomová práce - formát pdf

9.6. SROVNÁVACÍ TABULKY

9.6 Srovnávací tabulky

Framework Kategorie celkove rádku celkove znaku bez mezerGrails Kontrolery 419 8975Grails Domain - doménové trídy 324 5949Grails Souhrn 743 14924Seam Entity - doménové trídy 244 4155Seam Domain - doménové trídy 232 4622Seam Souhrn 476 8777Spring DAO - prístup k databázi 1804 50648Spring Domain - doménové trídy 953 17855Spring Service - služby 909 23455Spring Web - kontrolery 1648 43235Spring Souhrn 5314 135193

Tabulka 9.1: Množství generovaného kódu

Framework pocet souboru celková velikost v rádcích celková velikost v bytechGrails 8 324 11 206Seam 19 477 15 584

Spring 17 817 32 325

Tabulka 9.2: Množství konfiguracních souboru

war data # knihoven knihovny kódGrails 23 459 536 26 838 601 58 25 467 353 1 371 248Seam 9 975 784 11 631 545 22 11 523 788 107 757

Spring 19 412 129 21 738 138 64 21 422 279 315 859

Tabulka 9.3: Velikost war balícku

50

Page 58: Diplomová práce - formát pdf

Kapitola 10

Záver

Zkoumáním frameworku Jboss Seam, Spring a Grails jsem se seznámil s problematikouwebových aplikací a zpusoby implementací funkcních i mimofunkcních požadavku. Uve-dené frameworky prináší rozdílné rešení a nabízí podobný rozsah funkcionality. Díky pou-žitým vývojovým nástrojum byla tvorba vzorových aplikací podobná - ve všech trech prí-padech byla znacná cást kódu generována a následne doupravena, aby odpovídala poža-davkum. Zajímavým rešením byla možnost programovat v grafickém režimu v prípade fra-meworku Spring s použitím nástroje Skyway Visual Perspectives. Frameworky Jboss Seama Grails zaujaly množstvím vzorových aplikací a tutoriálu.

Já osobne doporucuji volit mezi temito frameworky na základe zkušeností s frameworkya technologiemi, na kterých jsou tyto integracní frameworky postaveny. Me osobne se nej-príjemneji pracovalo s frameworkem Grails, který jako jediný respektoval vazby mezi ta-bulkami, které byly vzhledem k povaze aplikace zásadní. Framework Grails bych zárovendoporucoval i programátorum, kterí mají zkušenosti s nástrojem Hibernate, jelikož je mo-hou pri tvorbe aplikací nad tímto frameworkem plne využít.

Framework Jboss Seam je vhodné použít v aplikacích, u kterých je možné využít prínosytohoto frameworku. Jedná se tedy o aplikace, které budou postaveny na technologii JSF provizuální cást aplikace a technologie EJB a anotací pro aplikacní cást. Jelikož je použití ano-tací a EJB (hlavne zjednodušení JPA Entit proti Entitám z EJB verze 2.1) hlavním prínosemprostredí Java EE verze 5, znamená prechod na tento framework využití tohoto prostredína maximum. Vzhledem k faktu, že se Jboss Seam má stát základem pro webové aplikacepostavené nad prostredím Java EE 6, je pravdepodobné, že si ve svete programátoru najdesvé príznivce.

Všechny uvedené frameworky mají své pro a proti, volba je tedy na programátorovi aodvíjí se hlavne od povahy aplikace a zkušeností programátora.

51

Page 59: Diplomová práce - formát pdf

Príloha A

Použitý software

Jboss Seam Framework 2.1.1 GA <http://www.seamframework.org/Download>Maven 2.0.9 <http://maven.apache.org/download.html>RedHat Developer Studio CR1 - již staženo z oficiálních stránek <http://www.jboss.

com/products/devstudio>Spring Framework <http://www.springsource.org/download>Skyway Visual Perspectives Community Edition 6.2 <http://www.skywaysoftware.

com/products/platform/>Grails 1.1 <http://www.grails.org/Download>Eclipse Ganymede <http://www.eclipse.org/downloads/packages/>Oracle Database 10g Express Edition <http://www.oracle.com/technology/products/

database/xe/index.html>

52

Page 60: Diplomová práce - formát pdf

Príloha B

Obsah priloženého nosice

Soucástí práce je i prilož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 formátu LATEX

• tato práce ve formátu PDF, vygenerovaná pomocí aplikace XT, XSL stylu a systémuLATEX

• tato práce ve formátu HTML vygenerovaná aplikací XT a XSL stylu pro transformacido HTML

• zdrojový kód aplikace SeamPhoneBook

• zdrojový kód aplikace SpringPhoneBook

• zdrojový kód aplikace GrailsPhoneBook

• pracovní plocha vývojového prostredí Skyway Visual Perspectives

• pracovní plocha vývojového prostredí Eclipse Ganymede

• Derby databázi PhoneBookDB

• inicializacní SQL skript

• instalacní soubory použitých produktu

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

53

Page 61: Diplomová práce - formát pdf

Príloha C

Test - rychlost zpracování požadavku

Merené parametry:

• cas do prvního byte [1. byte] - cas od kliknutí ve webovém prohlížecí do nacteníprvního byte odpovedi,

• cas do dokoncení [dokoncení] - cas od kliknutí ve webovém prohlížeci do zobrazenícelé stránky,

• velikost stránky [velikost] - kontrolní údaj, udávající velikost zobrazené stránky v byte,v rámcí trech merení (generování stejné stránky) by mel být tento údaj konstatní, je-likož se má jednat o totožné stránky.

54

Page 62: Diplomová práce - formát pdf

C. TEST - RYCHLOST ZPRACOVÁNÍ POŽADAVKU

Framework Tabulka 1. byte dokoncení velikostGrails Users - 40 záznamu 0,484 s 0,562 s 27,67 KBGrails Users - 40 záznamu 0,515 s 0,609 s 27,67 KBGrails Users - 40 záznamu 0,515 s 0,609 s 27,67 KBGrails Contacts - 1600 záznamu 3,484 s 4,437 s 771,91 KBGrails Contacts - 1600 záznamu 3,031 s 3,906 s 771,91 KBGrails Contacts - 1600 záznamu 3,016 s 3,953 s 771,91 KBGrails PhoneNumbers - 64000 záznamu 68,453 s 585,750 s 29,21 MBGrails PhoneNumbers - 64000 záznamu 68,063 s 571,219 s 29,21 MBGrails PhoneNumbers - 64000 záznamu 65,938 s 572,188 s 29,21 MBSeam Users - 40 záznamu 0,859 s 1,015 s 209,04 KBSeam Users - 40 záznamu 0,891 s 1,031 s 209,04 KBSeam Users - 40 záznamu 0,875 s 1,016 s 209,04 KBSeam Contacts - 1600 záznamu 19,531 s 20,703 s 1,30 MBSeam Contacts - 1600 záznamu 19,937 s 20,875 s 1,30 MBSeam Contacts - 1600 záznamu 19,593 s 20,718 s 1,30 MB

Spring Users - 40 záznamu 0,875 s 1,094 s 158,71 KBSpring Users - 40 záznamu 0,640 s 0,734 s 158,71 KBSpring Users - 40 záznamu 0,641 s 0,719 s 158,71 KBSpring Contacts - 1600 záznamu 0,609 s 1,500 s 852,40 KBSpring Contacts - 1600 záznamu 0,515 s 1,531 s 852,40 KBSpring Contacts - 1600 záznamu 0,484 s 1,390 s 852,40 KBSpring PhoneNumbers - 64000 záznamu 3,391 s 130,047 s 16,12 MBSpring PhoneNumbers - 64000 záznamu 2,907 s 144,704 s 16,12 MBSpring PhoneNumbers - 64000 záznamu 2,922 s 125,937 s 16,12 MB

Tabulka C.1: rychlost zpracování požadavku

55

Page 63: Diplomová práce - formát pdf

Literatura

[1] Kajnar, M.: Webový informacní systém pro prezentaci fotografií , <https://dip.felk.cvut.cz/browse/pdfcache/kajnam1_2007bach.pdf> , 19.06.2007. 3

[2] Grails - Hibernate Integration , Codehaus , <http://www.grails.org/Hibernate+Integration> , 24.3.2009. 8.2.4

[3] Grails - JSecurity Plugin - Quick Start Guide , Codehaus , <http://www.grails.org/JSecurity+Plugin+-+Quick+Start> , 30.3.2009. 8.2.4

[4] Grails - Tutorials , Codehaus , <http://www.grails.org/Tutorials> ,21.3.2009. 8.2.4

[5] Grails Plugins by Tag, Contegix , <http://www.grails.org/plugin/list> ,15.4.2009. 7.3

[6] Groovy - Wikipedie, otevrená encyklopedie, Wikipedie, <http://cs.wikipedia.org/wiki/Groovy> , 1.4.2009. 7.1

[7] Rocher, G.: The Definitive Guide to Grails, Apress , 978-1-59059-758-3, 11.12.2006. 7.1

[8] JSR 223: Scripting for the JavaTM Platform, Sun Microsystems , <http://jcp.org/en/jsr/detail?id=223> , 1.5.2009.

[9] Java EE Technologies at a Glance , Sun Microsystems, Inc. , <http://java.sun.com/javaee/technologies/> , 19.04.2009. 2.2

[10] Java SE Technologies at a Glance , Sun Microsystems, Inc. , <http://java.sun.com/javase/technologies/> , 19.04.2009. 2.2

[11] Dvorák, P.: Vývojové prostredí pro publikacní systém Atrium , <https://dip.felk.cvut.cz/browse/pdfcache/dvorap1_2008bach.pdf> , 10.12.2008. 6.2

[12] Pech, V.: Grails pro Java experty , JetBrains, Inc. , <http://java.cz/dwn/1003/23916_Grails.pdf> , 10.4.2009. 7.1

[13] Cápová, P.: Projekt podpory MSP pri cerpání prostredku ze zdroju EU , UniverzitaTomáše Bati ve Zlíne , 13.11.2008. (document)

[14] Seam Framework - Seam Downloads , Red Hat Middleware , <http://seamframework.org/Download> , 20.4.2009. 5.2

[15] Allen, D.: Seamless JSF, Part 1: An application framework tailor-made for JSF, CodeRyte, Inc. , <http://www.ibm.com/developerworks/java/library/j-seam1/> , 17.4.2007. 5.6.10

56

Page 64: Diplomová práce - formát pdf

[16] Pirek, J.: SiteMesh, <http://nb.vse.cz/~zelenyj/it442/eseje/xpirj03/sitemesh.htm> , 1.5.2009. 7.2

[17] Ladd, S. a Donald, K.: Expert Spring MVC and Web Flow, Apress , 978-1590595848 ,21.2.2006. 6.3

[18] Pichlík, R. a Pichlík, R.: Spring Framework - predstaveníJ2EE lightweight kontejneru , <http://interval.cz/clanky/spring-framework-predstaveni-j2ee-lightweight-kontejneru/> ,21. 10. 2005. 6.1, 6.2, 6.3.2

[19] Spring MVC Request Lifecycle Diagram, Jelsoft Enterprises Ltd. , <http://forum.springsource.org/showthread.php?t=21639> , 20.5.2009. 6.3.3

[20] Tiskové zprávy 2006 - Sun Microsystems uvolnuje technologii Java jako open source,Sun Microsystems , <http://cz.sun.com/tiskove_zpravy/2006/11/java.html> , 20.4.2009. 2.3

57