====== a4m36jee -- Pokročilá laboratoř Java EE ====== Alias: [[https://developer.jboss.org/wiki/AdvancedJavaEELabpodzim2014|Advanced Java EE Lab]] Toto je osnova kursu pro výuku Advanced Java EE technologií pro oblast podnikových aplikací. Účelem je seznámit posluchače s novinkami v Java EE 7 ve formě kombinace přednášek a cvičení. Přitom budou využívány projekty z JBoss.org a demonstrováno jejich použití. Studenti se seznámí s pojmy jako jsou * Contest a Dependency Injection (CDI 1.1) * Enterprise Java Beans 3.2 * Enterprise aplikační server * Clustering * Komunikace s cloud datu Přepokládá se intenzivní 3-denní kurs. ===== Osnova kursu ===== Den první (11.3.) - P: Úvod, přehled novinek v Java EE 7 (1 h - Jiří Pechanec) - C: Příprava vývojového prostředí (1 h - Jiří Pechanec) - P: CDI 1.1, EJB 3.2 (1,5 h - Jozef Hartinger) Oběd - C: Vývoj Java EE aplikace s použitím CDI (1,5 h - Jozef Hartinger) - P: Webové technologie v Java EE 7: RESTful Services (JAX-RS 2.0), JSONProcessing (JSON-P), WebSocket, JavaServer Faces (JSF 2.2) (1,5 h - Lukáš Fryč) - C: Vývoj aplikací s použítím webových technologií v Java EE 7 (1,5 h - Lukáš Fryč) Den druhý (18.3.) - P: Ukládání dat v cloudu - Infinispan (1,5 h - Tomáš Sýkora, Martin Genčúr) - C: Vývoj datově náročné aplikace s použitím Infinispan (2 h -Tomáš Sýkora, Martin Genčúr ) Oběd - P: Clustering a škálování WildFly 8 (1,5 h - Václav Chalupa) - C: Konfigurace WildFly 8 pro běh v clusterovaném prostředí (1 h - Václav Chalupa) - C: Konfigurace Java EE aplikace pro běh v clusteru, cachování, ... (1 h - Václav Chalupa) Den třetí (28.11.) - Ordered List ItemP: Zabezpečení Java EE aplikace, JAAS (2 h - Peter Škopek) Oběd - C: Zabezpečení existující Java EE aplikace (1 h - Peter Škopek) - P: Management a monitorování WildFly 8 (1,5 h - Jitka Kožaná) - C: Vývoj skriptů pro monitorování WildFly 8 (1 h - Jitka Kožaná) ===== Příprava vývojového prostředí ===== Cvičení ke kurzu lze provozovat z libovolného vývojového prostředí. Nezbytné požadavky jsou * Java 8 (JDK, ne JRE) * Maven * Git (projekt qa/a4m36jee-2014 · GitHub) * WildFly 8.1 (Downloads · WildFly) Studenti mohou použít jako IDE i JBoss Developer Studio. V tom případě postupujte podle níže uvedeného podrobného návodu. V ostatních případech je nutné, aby se studenti orientovali v použítí Git a Mavenu buď v jejich preferovaném IDE nebo v příkazové řádce. Aplikační server není nutné integrovat do IDE a může běžet jako samostaný proces. Důležité!!! Projekt si naklonujte a sestavte ještě před výukou. ==== JBoss Developer Studio ==== Instalace Na počítač si nainstalujte Java 8 (nutné je JDK, nikoliv pouze JRE) Instalace WildFly 8.1.0.Final - Stáhněte si WildFly 8.1.0.Final ze stránky http://www.wildfly.org/downloads/ - Zip či tar.gz soubor si rozbalte na disk Instalace JBoss Developer Studio 8.0.0 - Stáhněte si JBoss Developer Studio 8.0.0 (Stand-alone Installer) ze stránky https://www.jboss.org/products/devstudio/download/ - Spusťte instalátor Konfigurace JBDS - Propojení s WildFly 8 - Window -> Preferences - Vybrat Server -> Runtime Environments, kliknout na Add... - Vybrat JBoss Community -> WildFly 8.x Runtime, zaškrtnout Create a new local server, kliknout na Next - Home directory: Přes Browse vybrat adresář wildfly-8.1.0.Final, JRE: zvolit java-8*, kliknout na Finish - Opustit konfigurační okno, v okně Servers uvidíme WildFly 8.0 Runtime Server - Pokud v okně Servers nevidíme vytvořený server, pak klikneme na No servers are available. Click this link to create a new server.... Poté zvolíme JBoss Community -> WildFly 8.x -> Next -> sh ==== Git repozitář ==== - Naklonujeme repozitář s příklady podle návodu na qa/a4m36jee-2014 · https://github.com/qa/a4m36jee-2014 ==== Import projektu do JBDS ==== - Provést File -> Import... -> Existing Maven Projects -> Next - Jako Root Directory zvolíme adresář s naklonovaným repozitářem - Kliknout na Finish - Operace bude trvat déle - Maven bude stahovat projektové závislosti ==== Spuštění projektu na serveru ==== - Zvolit okno Servers, pravé tlačítko, zvolit Add and Remove - Zvolit , kliknout na Add a Finish ===== Použité nástroje a materiály ===== * Java 8 * git * Maven * Maven – Welcome to Apache Maven * Zdrojové kódy ke cvičením * Podpůrné systémy ==== Závěrečná práce ==== Požadavky na projekty * Týmy 3-4 lidí, jeden z nich bude zodpovědný za vedení (problémy v týmu je nutné řešit včas s přednášejícími) * Každý tým si volí téma podle svého uvážení * Pokud si tým není jistý náplní svého tématu, může se obrátit na vyučujícího pro konzultaci/schválení * Jako téma lze zvolit budoucí diplomovou či bakalářskou práci ze seznamu https://thesis-managementsystem.rhcloud.com/ * Není vyžadována implementace v rozsahu DP/BP * Pokud tým neidentifikuje vlastní téma, ale použít některé z níže uvedených "záchranných" * Rezervační systém pro sportovní centra * Systém pro správu skladu * Auto-moto bazar * Systém pro půjčovny knih * Každý student si zřídí účet na github.com, zdrojové kódy projektu budou tamtéž * Volba git workflow je na každém týmu, taktéž rozdělení prací na projektu * Vytvořit krátkou specifikaci - textovou či s doprovodem UML diagramů * Implementace třívrstvé aplikace * Prezentační vrstva - JSF (volitelně použití knihovny RichFaces) nebo moderní JavaScriptový framework s REST backendem, hodnotit se bude funkcionalita, nikoliv grafické provedení * Business vrstva - EJB * Datová vrstva - perzistence pomocí JPA 2 nebo Infinispan (zde se očekává konfigurace Infinispan-u pro trvalé uložení dat) * Aplikace bude používat CDI, není vhodné používat dependency injection definovanou v Java EE 5 (tzn. očekáváme i použití např. typově bezpečného persitence contextu) * Aplikace bude plně zabezpečena, bude používat minimálně tři úrovně oprávnění (role) * Datový model bude anotovaný pomocí Bean Validation - stačí použít předdefinované anotace, použití i vlastních omezení je plus * Aplikace bude testovatelná (Arquillian) * Aplikace bude nasazena v clusteru dvou uzlů v doménové konfiguraci, přiložen konfigurační skript (JBoss CLI) a demonstrována její odolnost vůči výpadku jednoho z nich (lze simulovat na jednom počítači) * Aplikace bude vystavovat rozhraní pro komunikaci mezi systémy (JAX-RS) - formát zpráv JSON * Aplikace bude používat alespoň jeden WebSocket endopint * Aplikace bude volat alespoń jeden REST endpoint (JAX-RS) * Vystavené endpointy budou podoporovat zabezpečení * Aplikace bude obsahovat alespoň jeden use case pro použití Concurrency nebo Batching API * Aplikace bude obsahovat alespoň jeden use case pro použití JMS 2.0 API * Každý projekt bude prezentován, studenti budou tázáni na části, které implementovali a technologie, které použili ==== Doporučená literatura ==== * Seam in Action Dan Allen Foreword by Norman RichardsSeptember, 2008 624 pages. ISBN: 1933988401. * Open PDF Oracle: https://docs.oracle.com/javaee/7/JEETT.pdf * Antonio Goncalves. 2013. Beginning Java EE 7 (1st ed.). Apress, Berkely, CA, USA. * Arun Gupta. 2013. Java EE 7 Essentials. O'Reilly Media, 362 pages. ISBN: 978-1449370176. * Dokumentace k projektům ==== Odkazy: ==== * https://github.com/qa/a4m36jee-2014 * http://www.wildfly.org/downloads/ * https://www.jboss.org/products/devstudio/download/ ===== Slidy: ===== * {{:courses:a4m36jee:cdi.pdf|}} * {{:courses:a4m36jee:CDI-lab.pdf|}} * {{:courses:a4m36jee:a4m36jee-01-Introduction-04.pdf|}} * {{:courses:a4m36jee:CVUT_Praha_2014-Infinispan.pdf|}} * {{:courses:a4m36jee:Infinispan-lab-2014.pdf|}} * {{:courses:a4m36jee:web-slides.pdf|}} * {{:courses:a4m36jee:web-handson-lab.pdf|}} * {{:courses:a4m36jee:06-Security-lab.pp.pdf|}} * {{:courses:a4m36jee:06-Security.pp.pdf|}} * {{:courses:a4m36jee:Management-and-monitoring.pdf|}} * {{:courses:a4m36jee:Management-and-monitoring-labs.pdf|}} * {{:courses:a4m36jee:A4M36JEE-2014-ClusteringAndScalability.pdf|}} * {{:courses:a4m36jee:A4M36JEE-2014-ClusteringAndScalability-Lab.pdf|}}