Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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

Podobné prezentace


Prezentace na téma: "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ"— Transkript prezentace:

1 VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Zbyněk Šlajchrt Část 11.

2 Program Aplikace Fotoalbum Práce s JMS Export fotografií do JMS fronty
Import fotografií do další aplikace

3 Export a import fotografií
Album JMS Provider (Glassfish – Open MQ) PhotoMan 1: výběr fotografií pro export 4:spuštění importu 5:příjem Exporter <<Stateless>> PhotoManager <<Application>> Queue 3: odeslání do fronty 2: dotaz do db 6:uložení fotografie DB Dir

4 Exporter EJB V modulu ejb vytvořte třídu beanu Exporter
Tento bez-stavový bean má na starosti export vybraných fotografií do JMS fronty Metoda exportPhotos(from, to) vybere fotografie v daném datumovém rozmezí a vyexportuje je do fronty package cz.vse.javaee.album; import javax.annotation.Resource; import javax.annotation.PreDestroy; import javax.annotation.PostConstruct; import javax.ejb.EJBException; import javax.jms.*; import javax.ejb.Stateless; import javax.ejb.LocalBean; import javax.persistence.EntityManager; import java.util.Date; import javax.persistence.TypedQuery; import javax.persistence.PersistenceContext; import java.util.List; * k JMS frontě, kterou drží otevřenou až do okamžiku jeho likvidace (metoda destroy). * Tento bezstavový bean má na starosti export fotografií do JMS fronty. Při inicializaci vytvoří spojení /** */ public class Exporter { @LocalBean @Stateless @PersistenceContext private ConnectionFactory connectionFactory; @Resource(mappedName = "jms/exportQueueFactory") private EntityManager entityManager; private Queue queue; @Resource(mappedName = "jms/exportQueue") private Connection connection; @PostConstruct private void init() { } catch (JMSException e) { connection = connectionFactory.createConnection(); try { } throw new EJBException(e); private void destroy() { @PreDestroy connection.close(); throw new EJBException(); to horní limit výběru - vyjma from spodní limit výběru - včetně * Vybere fotografie v daném datumovém rozmezí a vyexportuje je do fronty. public void exportPhotos(Date from, Date to) { TypedQuery<Photo> query = entityManager.createQuery( "select p from Photo p where p.created >= :f and p.created < :t", query.setParameter("t", to); query.setParameter("f", from); Photo.class); List<Photo> resultList = query.getResultList(); MessageProducer producer = queueSession.createProducer(queue); Session queueSession = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); BytesMessage photoMessage = queueSession.createBytesMessage(); for (Photo photo : resultList) { photoMessage.setStringProperty("description", photo.getDescription()); photoMessage.setStringProperty("name", photo.getName()); photoMessage.writeBytes(photo.getImage()); photoMessage.setStringProperty("albumName", photo.getAlbum().getName()); photoMessage.setIntProperty("version", photo.getVersion()); photoMessage.setStringProperty("created", photo.getCreated().toString()); producer.send(photoMessage); destroy(); } catch (Exception e) {

5 Úprava entity Photo Zaveďte nový atribut created typu java.util.Date spolu s příslušnými gettery/settery Nezapomenout na @Temporal(TemporalType.TIMESTAMP) Atribut je nastaven na aktuální čas private Date created = new Date();

6 Nová akce exportPhotos
V servletu AlbumServlet zaveďte novou akci exportPhotos spolu s metodou doExportPhotos(HttpServletRequest request, HttpServletResponse response) v poznámkách private void doExportPhotos(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fromParam = request.getParameter("from"); String toParam = request.getParameter("to"); try { getAlbumPageBean(request).exportPhotos(fromParam, toParam); } catch (ParseException e) { throw new ServletException(e); } request.getRequestDispatcher("upload.jsp").forward(request, response);

7 Úprava AlbumPageBean Akce exportPhotos je delegována z AlbumServlet kontroleru na AlbumPageBean, podobně jako ostatní akce. Zaveďte do AlbumPageBean nový atribut exporter typu Exporter Přidejte odpovídající argument do konstruktoru a použijte jej k inicializaci atributu exporter Přidejte metodu exportPhotos (v poznámkách) spolu se statickým atributem format Pozn.: AlbumPageBean svou povahou odpovídá vzoru BusinessDelegate private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); public void exportPhotos(String fromParam, String toParam) throws ParseException { Date fromDate = format.parse(fromParam); Date toDate = format.parse(toParam); exporter.exportPhotos(fromDate, toDate); }

8 Injektáž Exporter do AlbumServlet
AlbumServlet vytváří instanci AlbumPageBean, která nyní potřebuje navíc odkaz na Exporter Vytvořte nový atribut, do kterého kontejner injektuje odkaz na Exporter EJB. Předejte hodnotu tohoto atributu do volání konstruktoru AlbumPageBean

9 Stránka export.jsp Vytvořte JSP stránku export.jsp, která slouží ke spuštění exportu (viz poznámky). Do stránky upload.jsp přidejte link na export.jsp page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Export fotek</title></head> <body> <h3>Export fotek</h3> <form action="album" method="post"> <input type="hidden" name="action" value="exportPhotos"/> <label for="from">Od (yyyy-MM-dd):</label><br> <input id="from" type="text" name="from"/><br> <label for="to">Do (yyyy-MM-dd):</label><br> <input id="to" type="text" name="to"/><br> <input type="submit" value="Exportuj"> </form> </body> </html>

10 Konfigurace JMS V administrátorské konzoli vyberte složku Resources/JMS Resources/Connection Factories Vytvořte novou továrnu připojení Pool Name – jms/exportQueueFactory Resource Type – javax.jms.QueueConnectionFactory Vyberte složku Resources/JMS Resources/Destination Resources Vytvořte novou frontu JNDI Name - jms/exportQueue Physical Destination Name – exportQueue Resource Type – javax.jms.Queue

11 Build & Deploy

12 Sledování Open MQ Open MQ je možné spravovat z příkazové řádky
Adresář: glassfishv3/mq/bin Příkaz: imqcmd list dst vypíše stav všech JMS destinací

13 Aplikace PhotoManager
Jednoduchá aplikace, která se přihlásí k exportní frontě pro výběr. Všechny zprávy interpretuje jako fotografie, které ukládá do adresáře specifikovaného jako první argument metody main(). Aplikaci si stáhněte z cviceni11-photoManager.zip

14 Ladění Java EE aplikace
Je třeba spustit server v ladícím režimu Menu Configuration/JVM Settings v konzoli GF Nastavte příznak Debug na Enabled Server je třeba restartovat V IDE je třeba vytvořit vzdálený ladící profil V NetBeans menu Debug/Attach Debugger Debugger = Java Debugger (JPDA) Connector = Socket Attach Host = localhost Port = 9009 (nastavuje se na serveru v Debug Options) Pozor na firewall v OS. Debug port je někdy nutné explicitně povolit

15 Domácí úkol Aplikace Fotoalbum bude umožňovat export vybraných jednotlivých fotografií prostřednictvím JMS fronty. K výběru použijte checkboxy, které doposud slouží k označení fotografií ke smazání Pro účely tohoto úkolu rozšiřte funkcionalitu třídy Exporter


Stáhnout ppt "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ"

Podobné prezentace


Reklamy Google