VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 6.
Program Diskuse nad domácím úkolem Aplikace Fotoalbum Adaptace na JPA Práce se stavovým EJB On-line operace nad objektem fotografie Programovací vzor Gateway využívající stavový EJB 2
Proměna Photo v JPA entitu Anotujte třídu Photo javax.persistence.Entity Přidejte privátní atribut třídy id typu int Unikátní klíč záznamu v databázi Vytvořte getter a setter Getter a indikuje unikátní instruuje JPA ke generování hodnoty 3
Proměna Photo v JPA entitu Getter getImage označuje sloupec s binárním či textovým obsahem Entita Photo bude atributem stavového EJB, proto musí být serializovatelná implements Serializable 4
Úprava DAO Rozhraní AlbumDAO Změňte návratový typ metody updatePhoto na Photo Třída AlbumDAOBean Nahraďte původní zdrojový kód za kód z poznámek 5
Album DAO 6
Soubor persistence.xml V adresáři ejb/src/main/resources/META-INF vytvořte soubor persistence.xml Slouží ke konfiguraci JPA Použijeme specifické vlastnosti implementace EclipseLink nastavení úrovně logování instrukce k automatickému vytváření db tabulek 7
Soubor orm.xml V adresáři ejb/src/main/resources/META-INF vytvořte soubor orm.xml Konfigurace mapování mezi entitami a tabulkami Lze v něm předdefinovat dotazy 8
Definice datového zdroje Provádí se v administrátorské konzoli Otevřete panel Resources/JDBC/JDBC Resources Vytvořte nový prostředek Do políčka JNDI Name zadejte název datového zdroje, jak je uvedeno v persistence.xml jdbc/myDS Položku Pool Name nastavte na DerbyPool Poznámka pro ty, co neprogramují v NetBeans Je třeba nainstalovat databázi (rozbalení ZIPu) spuštění: bin/startNetworkServer.bat 9
Build&Deploy 10
PhotoGateway Stavový EJB Zprostředkovává klientovi objekt fotografie Entitu (objekt) dostane klient "živou", tj. "managed" Výhody: úpravy se provádějí v paměti voláním metod na objektu fotografie při ukládání není třeba provádět náročný "merge", jelikož entita je stále v JPA keši tzv. lean design – neobsahuje nic nadbytečného, štíhlý 11
Aplikační vrstva 12
PhotoGateway – zdrojový kód 13
PhotoGateway - poznámky Stavový bean, jehož stav je odkaz na předaný objekt fotografie Je použit rozšířený perzistentní kontext Život objektů v kontextu je vymezen životem beanu Nekončí s každým voláním metody Kromě metody save jsou ostatní metody volány mimo transakci (jsou = TransactionAttributeType.NOT_SUPPORTED) Volání metody save zahájí novou transakci. Při jejím ukončení dojde k uložení (commit) perzist. kontextu. 14
Prezentační vrstva 15
PhotoDetailPageBean 16 Patří do webového modulu
AlbumPageBean 17 Patří do webového modulu
Úprava AlbumServlet AlbumServlet bude pracovat se stavovými beany, které není možné injektovat do atributu servletu použijeme vyhledání (lookup) v ENC (JNDI) kvůli tomu je zapotřebí konfigurace ENC, zde pomocí anotací AlbumServlet bude coby kontroler pracovat s modelem v podobě AlbumPageBean případně s odkazovaným PhotoPageBean AlbumPageBean je kořen modelu a je uložen v session 18
Životní cyklus AlbumPageBean Metody v AlbumServlet pro práci s AlbumPageBean 19
Úprava performAction 20
Akce 'detail' Větev v performAction 21
Stránka detail.jsp Zobrazuje fotografii spolu s názvem a popisem V spodní polovině stránky jsou k dispozici akce pro změnu velikosti fotky rotaci (neimplementováno) uložení rozpracovaného stavu fotky a návrat obnovení fotografie z databáze zrušení úprav a návrat 22
Diagram stránek 23
Úprava stránky upload.jsp Náhrada stávající tagu jsp:useBean za Nastavení hlavičky pro řízení keše prohlížeče Úprava cyklu c:forEach 24
Úprava PhotoServlet V případě, že není zadán název fotky v URL, pokusí se nalézt kontextovou fotku AlbumPageBean.getPhotoDetail().getPhoto() 25
Akce v detail.jsp Pro každou akci přibude jeden 'if' v hlavním rozvětvení v metodě AlbumServlet.performAction Každá akce je podchycena odpovídající 'do' metodou v servletu Metoda doResize pracuje s objektem fotky Metody doCancel, doSave, doRefesh pracují s gateway Metody doCancel a doSave uzavírají model detailu fotky getAlbumPageBean(request).setDetailBean(null) 26
Domácí úkol Přidejte do entity Photo atribut modified, který bude udržovat datum a čas poslední úpravy fotografie. Dále na entitě Photo vytvořte posluchačskou metodu, která bude nastavovat atribut Photo na aktuální čas při úpravách fotografie. Rozšiřte HTML tabulku se seznamem fotografií o sloupec, který bude zobrazovat datum poslední úpravy. Do detailu fotografie přidejte pole, které bude také zobrazovat hodnostu tohoto atributu. 27