VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 5.
Heslo dne "The abstractions save us time working, but they don't save us time learning." Joel Spolsky ions.html ions.html Zákon netěsných abstrakcí "Netriviální abstrakce není obvykle schopna absolutně odstínit klienta od abstrahované technologie." SQL má odstiňovat od složitých procedurálních dotazů... WHERE a=b AND b=c... WHERE a=b AND b=c AND a=c – matematicky stejné, avšak na někerých db s významně rychlejší odezvou 2
Program Diskuse nad domácím úkolem Aplikace Fotoalbum Práce s bez-stavovým EJB Nahrání souboru přes formulář Programovací vzory Persistent Domain Object (PDO) Data Access Object (DAO) 3
Aplikace Fotoalbum Enterprise aplikace s jedním webovým (web) a jedním EJB modulem nazvaným ejb Oba moduly jsou zabaleny do tzv. enterprise archivu – ear ejb.jar web.war album-app.ear 4
Photo - třída pro fotografie Zapouzdřuje binární data a metadata fotografie Reprezentuje záznam v perzistentním úložišti Obsahuje operace pro manipulace s obrázkem Není pouhým shromaždištěm atributů Je aktivní (srovnej s Anemic Entity anti-vzorem [Fowler]) Vzor Persistent Domain Object Reprezentuje data a vazby objektu z doménového modelu (např. databázový model) Obsahuje metody pro operace nad daty a vazbami Lze využívat dědičnosti 5
Photo – zdrojový kód 6
AlbumDAO – přístupový objekt Rozhraní přístupového objektu k fotografiím Obsahuje tzv. CRUD operace Create, Read, Update a Delete Obvykle obsahuje metody pro vyhledávání V Java EE implementováno jako bez-stavový EJB Vzor Data Access Object Odstiňuje (abstrahuje) od technologie pro ukládání Zlepšuje testovatelnost V Java EE 5+ může být v jistých případech zastoupen objektem EntityManager (JPA) 7
AlbumDAO – zdrojový kód 8
AlbumDAOBean – dočasná impl. Dočasná implementace DAO k fotografiím ukládá a čte fotografie ze souborového systému umístění adresáře úložiště lze konfigurovat parametrem directory v ejb-jar.xml Data fotografie jsou uložena v souboru nazvaném podle názvu fotografie Metadata jsou uložena v properties souboru Bude nahrazen JPA 2.0 impementací 9
META-INF/ejb-jar.xml V adresáři album- zaklad/ejb/src/main/resources/META-INF vytvořte soubor ejb-jar.xml nastavíme zde parametr directory pro AlbumDAOBean 10
AlbumServlet AlbumServlet slouží jako kontroler albumu K akcím se rozhoduje podle parametru action v přicházejícím dotazu Udžuje privátní atribut albumDAO pro komunikaci s perzistentní vrstvou Odkaz na AlbumDAO je injektován kontejnerem Servlet ho zpřístupňuje JSP stránkám pomocí atributu v aplikačním kontextu, který nastavuje v metodě init Servlet je anotován MultipartConfig zpřístupní metody pro práci s formulářem, který odesílá dotaz složený z více částí (MIME multipart/form-data) 11
AlbumServlet – třída 12
AlbumServlet – metoda doUpload 13
AlbumServlet – načítání parametrů 14
Stránka upload.jsp Obsahuje formulář pro nahrání souboru atribut enctype musí být multipart/form-data Ve spodní části je tabulka s výpisem obsahu albumu Iteruje se přes seznam fotografií získaný z AlbumDAO přes vlatnost photos (getPhotos) Na začátku je třeba zavést bean AlbumDAO pomocí Iterace pomocí tagu c:forEach z knihovny 15
web.xml 16
PhotoServlet Umožňuje získat data fotografie z aplikace prostřednictvím URL /photo/ Ve web.xml namapován na /photo/* REST přístup 17
PhotoServlet - kód 18
Domácí úkol Upravte stránku upload.jsp tak, aby poslední sloupec tabulky fotografií obsahoval zmenšenou verzi obrázku. kliknutím na obrázek se otevřela nová stránka detail.jsp, která zobrazí fotografii v původních rozměrech spolu s údaji o fotografii, tj. název a popis 19