VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ

Slides:



Advertisements
Podobné prezentace
Pokroky v technologiích (2)
Advertisements

Webové služby nad IS/STAG 1 / 21 Seminář IS/STAG Kunžak 2008 Seminář IS/STAG – Kunžak 2008 Webové služby nad IS/STAG Lukáš Valenta.
Úvod do platformy Java EE
Základy jazyka SQL Jan Tichava
LOV, Listbox, Poplist a Combobox v Oracle Forms LOV – seznam hodnot, které se zobrazí po stisku klávesy Enter v textovém poli. LOV – seznam hodnot, které.
1NPRG054 Vývoj vysoce výkonného software /2013 David Bednárek Domácí úkol.
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
„Programátor by měl být v prvé řadě líný.“. PIFovo Web API (API = Application Programming Interface)
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Návrh a tvorba WWW Cvičení 6
T OOL FOR C OLLABORATIVE XML S CHEMA I NTEGRATION Jiří Meluzín.
Desáté cvičení Java Core API Java Collection Framework JavaDoc.
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Identity Field Radim Veselý ČVUT v Praze Radim Veselý ČVUT v Praze Michal Kouřík ČVUT v Praze
Jaroslav Šnajberk, Přemek Brada
Aplikace VT v hospodářské praxi internetové technologie Ing. Roman Danel, Ph.D. VŠB – TU Ostrava.
Rozšíření jednouživatelské verze IS na víceuživatelskou Prezentace Diplomové práce Autor : Libor Tomášek Spoluautoři : Pobucký M., Drábek L. Vedoucí :
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Metainformační systém založený na XML Autor: Josef Mikloš Vedoucí práce: Ing. Jan Růžička, Ph.D. V/2004.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Návrh a tvorba WWW Cvičení 4
Association table mapping Jakub Chalupa Naim Ashhab ČVUT FEL A7B36ASS – Architektura SW systémů LS 2014.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 13.
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Dílna Caché II. CSP pro pokročilé Tomáš Vaverka. Zdroje HTML Tag Reference v sekci Reference Material v dokumentaci Caché HTML Tag Reference v sekci Reference.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Copyright (C) 2000 Vema, a. s.1 V3 klient Michal Máčel Provozní integrace G2, HR/Win a internetu.
uložené procedury (stored procedures) triggery, sekvence, pohledy, funkce, parametrické dotazy (prepared statements) komplexní agregace a SQL dotazy jiné.
Databázové systémy 2 Zkouška – 8:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK2(p_table_name VARCHAR2, p_min_nuls NUMBER, p_drop.
Šesté cvičení Výjimky Balíky.
Úvod do PHP IZI 228.
123.
Import záznamů diplomových prací nové řešení Antonín Vaishar, SUAleph, 26. –
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Správní a dopravně správní evidence - IISSDE RNDr. Jiří Malátek Zástupce ředitele OIVS MV
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
Webové služby pro komunikaci s informačním systémem eQuip Martin Širajch.
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Foreign key mapping Jakub Chalupa Naim Ashhab ČVUT FEL
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B15 Autor Ing. Jiří Kalousek Období vytvoření březen.
Architektury a techniky DS Cvičení č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 6.
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt 1 Část 12.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 7.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Webové služby Cíl  Popis základního konceptu technologie webových služeb.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 5.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Bc. Vladimír Holubec Bc. Nikola Němcová
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Databázové systémy a SQL
Dotazovací jazyk SQL I.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Návrhový vzor Flyweight
Protokol HTTP (Hypertext Transfer Protocol)
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek.
TNPW1 JavaScript Ing. Jiří Štěpánek.
Databázové systémy a SQL
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
C# přehled vlastností.
Přednáška 9 Triggery.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Composite “Spojuj a panuj”.
Transkript prezentace:

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 9.

Program Diskuse nad domácím úkolem Aplikace Fotoalbum Verzování entit Využití inteceptoru pro synchronizaci keše Využití REST služby pro ruční čištění keše

Úklid keše na základě verze Umožňuje úklid pouze obstarožních ikon Zavedeme verzi do entity Photo Nový atribut private int version; getter anotujeme @javax.persistence.Version JPA automaticky začne po každé modifikaci entity zvyšovat hodnotu v tomto poli Používáno také pro optimistické zamykání Pozn.: Pravděpodobně bude nutné odstranit tabulku PHOTO: DROP TABLE PHOTO

Úprava metody cleanCache Porovnává aktuální verze fotek s verzemi ikon v keši Načte z DB entity všech fotek, které jsou v keši Obrázek se nenačítá, jelikož má fetch=LAZY V dotazu se využívá operátoru IN Zařídí výběr specifikovaných fotek. Ikony, jejichž verze je nižší než aktuální verze, jsou odstraněny z keše Ujistěte se, že PhotoCache je anotován @LocalBean public void cleanCache() { @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false) // Pokud je keš prázdná, není co uklízet if (cache.isEmpty()) { return; } Set<Integer> photoIds = getCachedPhotoIds(); // Vybereme všechny fotky, které jsou v keši. Operátor IN // zařídí výběr specifikovaných fotek. Query query = entityManager.createQuery("select p.name, p.version from Photo p where p.id in :photoIds"); query.setParameter("photoIds", photoIds); // Výsledek je seznam dvojic (name, version) List<Object[]> nameVersionPairs = query.getResultList(); // V cyklu porovnáme aktuální verzi fotky s verzí ikony for (Object[] nameVersionPair : nameVersionPairs) { String photoName = (String) nameVersionPair[0]; int versionInDb = (Integer) nameVersionPair[1]; Photo icon = cache.get(photoName); // Porovnání verzí if (versionInDb > icon.getVersion()) { cache.remove(photoName); logger.info("Icon " + photoName + " removed from the cache"); private Set<Integer> getCachedPhotoIds() { Set<Integer> photoIds = new HashSet<Integer>(); for (Photo photo : cache.values()) { photoIds.add(photo.getId()); return photoIds;

Využití interceptoru K synchronizaci keše lze také využít interceptor Interceptor se nasadí na všechny metody, které modifikují entitu Photo nebo mění jejich počet Výhoda: Odstínění služeb od problematiky kešování Metody na AlbumDAOBean addPhoto(Photo photo) updatePhoto(Photo photo) removePhotos(int[] selectedIds) Metoda PhotoGateway save()

CacheSynchronizer V modulu ejb vytvořte třídu interceptoru CacheSynchronizer Interceptor se řídí následující konvencí ohledně hlaviček metod: add* – vytváří novou fotografii, která je v prvním parametru update* – aktualizuje fotografii, která je v prvním parametru remove* – odstraňuje fotografie, jejichž PK jsou v poli int[] předávaném jako první parametr bez parametrů – např. save(), musí se zavolat metoda na beanu, která vrátí ukládanou entitu package cz.vse.javaee.album; import javax.ejb.EJB; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; import java.lang.reflect.Method; /** * Tento interceptor je zavěšen na všech servisních metodách, které * mění stav a počet entit Photo. * <p/> * Created by IntelliJ IDEA. * User: zslajchrt * Date: Apr 13, 2010 * Time: 1:47:39 PM */ public class CacheSynchronizer { @EJB private PhotoCache cache; @AroundInvoke public Object onUpdatePhoto(InvocationContext ic) throws Exception { Object result = ic.proceed(); String methodName = ic.getMethod().getName(); if (methodName.startsWith("add") || ic.getMethod().getName().startsWith("update")) { // U 'add' a 'update' očekává první argument entitu syncWithCache((Photo) ic.getParameters()[0]); } else if (methodName.startsWith("remove")) { // U 'remove' očekává první argument int[] s id entit syncWithCache((Integer[]) ic.getParameters()[0]); } else if (ic.getParameters() == null) { Method getter = ic.getTarget().getClass().getMethod("getCurrent"); Photo photo = (Photo) getter.invoke(ic.getTarget()); syncWithCache(photo); } return result; private void syncWithCache(Photo photo) { System.out.println("Removing " + photo.getName() + " from cache"); cache.cleanCache(); private void syncWithCache(Integer[] photoIds) { System.out.println("Removing " + photoIds.length + " photos from cache");

Konfigurace interceptoru na metodách Na všechny "create/update/delete" metody, které pracují s Photo, umístěte anotaci @Interceptors(CacheSynchronizer.class)

Poznámky JBoss může mít problémy s používáním sekvence pro generování ID fotek. Pomůže explicitně určit sekvenci pomocí mapovacích anotací a sekvenci ručně vytvořit v databázi: @SequenceGenerator(name = "PHOTOSEQ", sequenceName = "PHOTOSEQUENCE") použít na třídě Photo @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PHOTOSEQ") použít na getPhoto() CREATE SEQUENCE PHOTOSEQUENCE AS BIGINT START WITH 3000000000

REST Architektonický styl distribuovaných systémů REpresentational State Transfer Přenos reprezentace zdroje na klienta Dotazem na zdroj identifikovaný URL nahraje klient reprezentační stav zdroje. Tento stav může obsahovat URL odkazy na další zdroje Dotazem na jiné URL přechází klient do dalšího stavu, který odpovídá reprezentaci odkazovaného zdroje. Dodatečná (post-hoc) interpretace HTTP metod GET, POST, PUT, DELETE

Příklady REST http://myapp/shop/products Zdrojem je zde seznam výrobků Reprezentací může být HTML, XML nebo JSON http://myapp/shop/products/1029 Zdrojem je zde konkrétní výrobek

Omezení na REST architekturu Client-server Stateless – server neudržuje stav klienta Cacheable – klient může kešovat stav Layered – klient neví o přítomnosti mezivrstev Možnost přesunu části kódu serveru na klienta (JavaScript) Jednotné rozhraní pro komunikaci URI ke stavu jsou připojena metadata, např. MIME stav může obsahovat linky na asociované zdroje

Ovládání keše pomocí REST http://localhost:8089/web/rs/cache URL zdroje – keše Metoda GET na tomto zdroji vyčistí keš V modulu web vytvoříme třídu CacheResource @Path("cache") – URL fragment pro tento zdroj @Stateless – chování odpovídá bezstavovému EJB @Produces("text/plain") – MIME reprezentace zdroje Injektáž @EJB PhotoCache photoCache Metoda cleanCache deleguje na PhotoCache @GET – specifikuje, že GET bude směrována sem @Path("cache") @Stateless @Produces("text/plain") public class CacheResource { @EJB private PhotoCache photoCache; @GET public String cleanCache() { photoCache.cleanCache(); return "OK"; }

Úprava WEB-INF/web.xml <servlet> <servlet-name>JerseyWebApplication</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>cz.vse.javaee.album</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <url-pattern>/rs/*</url-pattern> </servlet-mapping>

Domácí úkol

Dodatek: Aplikační vrstva

Dodatek: Prezentační vrstva

Dodatek: Diagram stránek