270 likes | 391 Views
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ. Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage. Čá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
E N D
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Čá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
Proměna Photo v JPA entitu • Anotujte třídu Photo anotací @Entity • 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 anotujte @Id a @GeneratedValue • @Id indikuje unikátní klíč • @GeneratedValue instruuje JPA ke generování hodnoty
Proměna Photo v JPA entitu • Getter getImage anotujte @Lob • @Lob 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
Ú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
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
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
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 • <jta-data-source>jdbc/myDS</jta-data-source> • Položku Pool Name nastavte na DerbyPool • Poznámka pro ty, co neprogramují v NetBeans • Je třeba nainstalovat databázi (rozbalení ZIPu) • http://db.apache.org/derby/derby_downloads.html • spuštění: bin/startNetworkServer.bat
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ý
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 read-only) • @TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED) • Volání metody save zahájí novou transakci. Při jejím ukončení dojde k uložení (commit) perzist. kontextu.
PhotoDetailPageBean Patří do webového modulu
AlbumPageBean 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
Životní cyklus AlbumPageBean • Metody v AlbumServlet pro práci s AlbumPageBean
Akce 'detail' Větev v performAction
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
Ú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
Úprava PhotoServlet • V případě, že není zadán název fotky v URL, pokusí se nalézt kontextovou fotku • AlbumPageBean.getPhotoDetail().getPhoto()
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)
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.