Nástroje a frameworky pro automatizovaný vývoj Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/
Proces vývoje webové aplikace Předepsaná adresářová struktura. Kompilace zdrojových kódů. Vytvoření archivu s předepsanou strukturou (WAR, EAR). Umístění archivu (kopírováním) na aplikační server.
Apache Ant Softwarový nástroj pro automatizované sestavení buildů. Podobný nástroji Make z unixového prostředí. Platformě nezávislý. Pro sestavení používá XML, kde je definován proces automatizace. Soubory pojmenovány build.xml.
Ant pro.net?
Ant pro.net dotnetexec - Spouštět skripty nunit - Spouštěn NUnit testy nant - Not Ant ->NAnt, buildovací nástroj pro.net msbuild - spouštět nástroj MSBuild wix - automatizované vytvoření MSI instalátorů
Maven Označován jako Ant na steroidech. Oproti Ant umí vyjádřit závislost na jiných projektech. Používá soubor pom.xml (Project Object Model). Obsahuje i tzv. Archetypy.
Závislost na jiných projektech
Závislost na jiných projektech
Maven archetypy
Integrace JUnit do Projektu
Apache Ivy Původně jako subprojekt pro Ant Zajišťuje hlídání závislostí na projektu Sám stahuje určenou verzi knihoven (za pomoci IDE) čím se tedy liší do Mavenu?
Funkční testování
Nástroje pro podporu testování Selenium - framework pro funkční testování webových aplikací. Podporuje jazyky Java,.NET, PHP, Python, Ruby, Perl. Problémové místo - pluginy pro prohlížeč.
Zavedení Selenia Tester pomocí pluginu v prohlížeči nahraje sled kroků pro testování. Selenium převede nahrané makro do podoby zdrojového kódu. Tester vytvoří testovací třídu a umístí do ní vygenerovaný zdrojový kód.
Architektura
https://www.youtube.com/watch?v=fkuvav9u7vu
Integrace v cloudu V současnosti jsou nabízeny řešení PaaS (Platform as a Service). Nabízí kompletní prostředí pro deploy webové aplikace. Příklad: Heroku, OpDemand.
Frameworky pro vývoj - Java
Java a Frameworky Výhody: Zrychlení vývoje Zavedení ověřených principů Nevýhody: Obcházení architektury Kompatibilita
http://en.wikipedia.org/wiki/comparison_of_web_application_frameworks
Podle čeho vybrat?
Podle čeho vybrat? Produktivita vývojářů Dostupnost vývojářů Jak vypadá tzv. učící křivka Jak vypadá samotný projekt Dostupnost vývojářů Aktuální trendy
Google Trends
Trendy
Požadavky na technologii Template (umí integrovat šablony) Využití komponent AJAX Plug-iny, nebo Add-on Škálovatelnost Podpora testování ze strany frameworku
Požadavky na technologii i18n a i10n (internacionalizace, lokalizace) Validace Jak je kvalitní dokumentace Kolik knih je na trhu k dispozici Podpora budování REST architektury Podpora mobilní platformy
Porovnání pomocí matice http://bit.ly/jvm-frameworks-matrix
Výsledek
Popularita
KLASIFIKACE FRAMEWORKŮ
Výhody a nevýhody Grails GWT Ruby on Rails Spring MVC Vaadin Wicket Tapestry
Grails Výhody Pro vývojáře Java jednoduchý přechod k jinému jazyku Jazyk Groovy Dostupné pluginy pro všechny typy aplikací Nevýhody Návody jsou zaměřeny na bývalé Java vývojáře Stack trace bývá velmi nepřehledný
GWT Výhody Vývoj v Javě, GWT vytvoří JavaScript jádro aplikace jako generovaný kód Jednoduché na naučení, podpora standardních nástrojů Silná podpora komunity Nevýhody Musíte znát dobře Javu Dlouhá doba kompilace, problematické testování Více se blíží JSP knihovně tagů (JSTL) než webovému frameworku
Ruby On Rails Výhody Pro vývojáře webu Velmi dobrá dokumentace Podpora komunity Nevýhody Bez optimalizace je pomalý Větší nároky na testování (dynamický jazyk) Vývojové prostředí, debugging Kolik znáte v Ostravě firem, které programují v Ruby?
Spring MVC Výhody Jednoduchá konfigurace (anotace) Velmi dobrá integrace s ostatními technologiemi (JSP, JSTL, Tiles, JSON) Podpora REST modelu Nevýhody Složitější debugging (bez použití JRebel, Spring Roo) Pro AJAX (je) byla vyžadována externí knihovna
Vaadin Výhody Využívá GWT API Podpora komunity Výborná podpora UI (Themes, Layouts) Tvorba GUI přímo Java kódem Nevýhody Velké nároky na paměť, vše se ukládá do session Záštitu nad vývojem má komerční organizace, ne komunita Nevhodný pro embeded zařízení a jednoduché webové prohlížeče
Wicket Výhody Snadné použití pro vývojáře pracující s Javou Těsná vazba mezi stránkami a pohledy Komunita (Apache projekt) Nevýhody V základu orientován na Stateful přístup HTML šablona je dohromady s Java kódem Problém sehnat vývojáře Problém při tvorbě nestandardních řešení na míru
Tapestry Výhody Live Class a Template Reloading Rychlý a škálovatelný Výborně zpracovaný systém výjimek Nevýhody Moc se nepoužívá Anotace vs. konvence
Spring MVC
Služby nad jádrem Spring Mode-View-Controller - implementace návrhového vzoru MVC do architektury aplikace. Data Access - pro podporu persistence - podporuje JPA, JDBC, Hibernate, MyBatis. Security - původně samostatný projekt, vytváří security realm pro aplikaci. Transaction Manager - podporuje transakční zpracování na všech úrovních.
JBoss Seam(2) Integruje ověřené technologie a přístupy (EJB 3.0, JSF 1.2, POJO, AJAX) Součástí frameworku je ORM Zaměřený na Stateful přístup Používá Dependency Injection V základu podporuje JUnit, TestNG Silný nástroj - JBoss Tools
JBoss Seam(2) - Model
JBoss Seam(2) - View
JBoss Seam(2) - Výsledek
Dependency Injection (IOC)
Struts 2 Striktní MVC, toto rozdělení kopíruje i architektura:
JavaServer Faces Request-driven MVC framework, zaměřený na tvorbu UI. Obsahuje hlavní části: FacesServlet Backing Bean Samotná JSF stránka, využívající technologii Facelets
Charakteristika Pro malé projekty je velmi vhodný. U větších projektů se stává nepřehledný (Backing Beans). Často se kombinuje s jinými frameworky (Spring, Struts). Velmi silná technologie - facelety
Facelety
Frameworky pro Persistenci
Proč řešit persistenci Atomicity hlavně transakce Consistency dodržení stavů (je ta objednávka opravdu ve stavu rozpracována?) Isolation aby se neovlivnila jiná data než dotčená Durability ukládání na jiné než RAM paměti
Persistence v AS Webová aplikace několik kontextů více uživatelů aplikace mezi sebou spolupracují vícevláknová architektura
Hibernate Mapuje doménový objektový model na relační databázi. Reprezentuje tedy persistentní vrstvu, projekt je opensource. Obsahuje konfigurační soubor (metadata) který mapuje objekty na db tabulky. Implementuje metody, které persistenci řídí.
Architektura
HQL Pro manipulaci s daty se využívá Hibernate Query Language. Inspiroval se v Java Persistence Query Language. from bank.account account where account.owner.country = 'CZ' and account.owner.name = 'Jarek'
Problémy Hibernate Jaké vymoženosti SŘBD nemohu využít, pokud mapuji pouze s Hibernate? Znáte nějaké jiné nevýhody Hibernate?
MyBatis (ibatis) Funkce stejná jako Hibernate, logika přístupu odlišná. Nemapuje objekty na tabulky, ale metody na SQL příkazy. Může tedy využít i uložené procedury databáze.
Mapování