J2EE wzorce projektowe. Alicja Truszkowska



Podobne dokumenty
Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

1 Wprowadzenie do J2EE

METODY PROGRAMOWANIA

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Wzorce prezentacji internetowych

Projektowanie Aplikacji Internetowych Jarosław Kuchta. Wzorce projektowe warstwy biznesowej

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Wzorce projektowe warstwy aplikacji

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Java wybrane technologie spotkanie nr 4. Serwlety c.d.

Serwlety Java: zagadnienia zaawansowane. Data Sources. Data Sources. Przykład pliku data-sources.xml


Warstwa prezentacji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Zagadnienia projektowania aplikacji J2EE

Pojęcie wzorca projektowego Sposób opisu wzorców projektowych Notacja UML podstawowe diagramy zapisu wzorców projektowych

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

Wzorce projektowe i refaktoryzacja

Enterprise JavaBeans

Piotr Laskowski Krzysztof Stefański. Java Servlets

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

CGI i serwlety. Plan wykładu. Wykład prowadzi Mikołaj Morzy. Przykład: serwlety vs. szablony. Implementacja logiki prezentacji

prepared by: Programowanie WWW Servlety

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

Testowanie aplikacji Java Servlets

Java wybrane technologie spotkanie nr 3. Serwlety

Projektowanie aplikacji J2EE w architekturze Model-View-Controller

Wykład 1 Inżynieria Oprogramowania

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

Wzorce logiki dziedziny

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

Programowanie w Sieci Internet filtry oraz web.xml. Kraków, 11 stycznia 2013 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 09

Aplikacje internetowe i rozproszone - laboratorium

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Programowanie obiektowe

Programowanie komponentowe 5

Tworzenie i wykorzystanie usług

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

Programowanie zorientowane obiektowo. Mateusz Kołecki

Komunikacja między serwletami

Zaawansowane programowanie obiektowe - wykład 5

Aplikacje RMI

Wprowadzenie do programowania aplikacji mobilnych

Programowanie w języku Java

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Aplikacje WWW - laboratorium

Aplikacje biznesowe Wykład dla studentów Informatyki Stosowanej

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Wzorce projektowe Michał Węgorek

Wprowadzenie do Enterprise JavaBeans 2.0

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

Zaawansowane aplikacje internetowe laboratorium

Serwlety. Co to jest serwlet? Przykładowy kod serwletu. Po co są serwlety?

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Architektury Usług Internetowych. Laboratorium 1. Servlety

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Aplikacje RMI Lab4

JAX-RS czyli REST w Javie. Adam Kędziora

"Biznesowe" wzorce projektowe

Aplikacje Internetowe, Servlety, JSP i JDBC

EJB 3.0 (Enterprise JavaBeans 3.0)

TECHNOLOGIA JSP W TWORZENIU APLIKACJI ROZPROSZONYCH NA PRZYKŁADZIE SYSTEMU ZARZĄDZANIA NIERUCHOMOŚCIAMI W GMINIE

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 2

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

Protokoly w technologii obiektow rozproszonych - CORBA, RMI/IIOP, COM, SOAP. Paweł Kozioł p.koziol@students.mimuw.edu.pl

Programowanie obiektowe

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

mgr inż. Michał Paluch

prepared by: Programowanie WWW Model-View-Controller

SOAP. Autor: Piotr Sobczak

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Programowanie współbieżne i rozproszone

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Java Server Faces narzędzie do implementacji w wy prezentacji

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Wybrane działy Informatyki Stosowanej

Architektury Usług Internetowych. Laboratorium 1 Servlety

Java wybrane technologie spotkanie nr 5. Java Server Pages

EJB 2.x oraz zmiany w standardzie dla EJB 3.0. Michał Stanek

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Automatyzacja procesów biznesowych Andrzej Sobecki. ESB Enterprise service bus

Web frameworks do budowy aplikacji zgodnych z J2EE. Jacek Panachida

Komponenty sterowane komunikatami

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Modelowanie i analiza. warstwy biznesowej aplikacji

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Programowanie obiektowe

Transkrypt:

J2EE wzorce projektowe Alicja Truszkowska

Motywacja Znaczące miejsce J2EE pośród systemów biznesowych Bogactwo narzędzi i technologii Dobre praktyki projektowania aplikacji Każde, nawet najdoskonalsze narzędzia mogą zostać użyte nieprawidłowo lub nieefektywnie. W. Crawford, J. Kaplan J2EE. Stosowanie wzorców projektowych

Plan prezentacji 1) Czym są wzorce projektowe 2) Zalety stosowania wzorców projektowych 3) Wprowadzenie do technologii J2EE 4) Przykłady wzorców projektowych 5) Literatura

Definicja wzorca projektowego Wzorce projektowe stanowią powtarzające się rozwiązania powtarzających się problemów. [...] Wzorzec dostarcza zbioru specyficznych interakcji, które mogą być zastosowane do ogólnych obiektów w celu rozwiązania znanego problemu. W. Crawford, J. Kaplan J2EE. Stosowanie wzorców projektowych

Geneza wzorców projektowych Architektura Chistropher Alexander A Pattern Language: Towns, Buildings, Construction Gang of Four E. Gamma, R. Helm, R. Johnson, J. Vlissides Design Patterns: Elements of Reusable Object Oriented Software

Anatomia wzorca projektowego Najprostsze wzorce projektowe można wyrazić w jednym, czy dwóch zdaniach, np. wykorzystanie bazy danych przez witrynę internetową

Anatomia wzorca projektowego planowanie miasta Nazwa: zabudowa blokowa (układ siatki) Siły: trudność poruszania się w wielkim mieście, w którym drogi nie biegną równolegle do siebie łatwość budowania budynków na planie prostokąta Uczestnicy: budynki, ulice, chodniki, piesi, samochody Rozwiązanie: szczegóły rozmieszczenia

Anatomia wzorca projektowego planowanie miasta Uogólnienie wzorca: miasto biuro restauracja komponenty budynki pokoje stoliki drogi ulice korytarze przejścia chodniki podróżni ludzie pracownicy kelnerzy samochody

Przykład zrealizowanego wzorca np. Nowy Jork, Waszyngton, Filadelfia ale np. Boston, Warszawa już nie www.bigdig.com

Najważniejsze cechy wzorców projektowych powstają w wyniku prób i błedów zapisywane w postaci struktur zapobiegają ponownemu wynajdowaniu koła istnieją na różnych poziomach abstrakcji podlegają ciągłym udoskonaleniom można je wykorzystywać wielokrotnie popularyzują projekty oraz najlepsze techniki programowania można je ze sobą łaczyć, aby rozwiązać większy problem

J2EE Aplikacja klienta HTML XML Applet Warstwa prezentacji po stronie klienta Servlets JSP Warstwa prezentacji po stronie serwera Session Beans Message Driven Beans Warstwa logiki biznesowej Entity Beans Warstwa modelu danych JDBC JavaMail RMI IIOP JNDI JMS Warstwa integracji DBMS Mail Server Aplikacja JAVA CORBA Server Systemy zewnętrzne

Kryteria jakości aplikacji rozszerzalność łatwość wprowadzania zmian - usuwanie powiązań - centralizacja - ponowne użycie skalowalność zachowanie wydajności przy zwiększonym obciążeniu niezawodność terminowość

Warstwa prezentacji stanowi interfejs użytkownika określa zestaw funkcji udostępnianych użytkownikowi nacisk na rozszerzalność (od tego zależy łatwość dodawania kolejnych funkcjonalności)

public class MagicServlet extends HttpServlet { private DirContext peoplecontext; public void init (ServletConfig config) throws Servlet Exception { super.init(config); Properties env = new Properties(); env.put (Context.INITIAL_CTX_FACTORY, com.sun.jndi.ldap.ldapctxfactory ); env.put (Context.PROVIDER_URL, ldap://localhost/o=jnditest ); try { DirContext initalcontext = new InitialDirContext(env); peoplecontext = (DirContext) initalcontext.lookup( ou=people ); catch (NamingException ne) { ne.printstacktrace(); throw new ServletException( Błąd podczas inicjacji LDAP, ne); } } public void destroy() { try { peoplecontext.close(); } catch(namingexception ne) { ne.printstacktrace(); } }

protected void doget(httservletrequest request, HttpServletResponse response) throws Servlet Exception, IOException { response.setcontenttype( text/html ); java.io.printwriter out = response.getwriter(); out.println( <html> ); out.println( <head> ); out.println( <title>servlet</title> ); out.println( </head> ); out.println( <body> ); out.println( <table> ); try { NamingEnumeration people = peoplecontext.list( ); while(people.hasmore()) { NameClassPair personname = (NameClassPair) people.next(); Attributes personattrs = peoplecontext.getattrs (personname.getname()); Attribute name = personattrs.get( name ); Attribite phone = peronattrs.get( tel ); out.println( <tr><td> + name.get() + </td><td> + phone.get() + </td></tr> ); } } catch (Exception ex) { out.println ( Bład podczas pobierania danych ); } out.println( </table> ); out.println( </body> ); out.println( </html> ); } } //MagicServlet

public class Person { private String name; private String tel; Model... public String getname() {return name}; public String gettel() {return tel}; } public void setname(string n) {name = n}; public void settel(string t) {tel = t); } public interface PersonCommand { public void initialize (HttpSession session) throws NamingException; public void runcommand() throws NamingException; public List getpeople(); // zwraca listę obiektów Person public class LdapPersonCommand() implements PersonCommand {... } * wzorce: lokalizator usługi, obiekt wartości

/*PersonView.jsp*/ <%@page contenttype= text/html %> <%@taglib uri= /jstl/core prefix= c %> Widok <html> <head> <title>książka adresowa</tilte> <head> <body> <jsp:usebean id=personcommand scope= request class= web.model.personcommand /> </body> </html> <table> <c:foreach var= person items= $(personcommand.people) > </c:foreach> </table> <tr><td><c:out value= $(person.getname()) /></td> <td><c:out value= $(person.gettel()) /></td> </tr>

Kontroler public class PersonServlet extends HttpServlet { protected void doget(httservlet request request, HttpServletResponse response) throws Servlet Exception, IOException { try { PersonCommand personcommand = new LdapPersonCommand(); personcommand.initialize(request.getsession()); personcommand.runcommand(); request.setattribute( personcommand, personcommand); } catch (NamingException ne) { throw new ServletException( Błąd wykonania polecenia, ne); } } } RequestDispatcher dispatch = getservletcontext().getrequestdispatcher( /PersonView.jsp ); dispatch.forward(request, response);

Model Widok - Kontroler <<servlet>> Kontroler <<jsp>> Widok <<JavaBean>> Model żądanie HTTP lokalizuje aktualizuje wybiera forward() usebean odpowiedź HTTP

Model Widok - Kontroler Widoki Model 1 Kontroler +aktualizujmodel() +wybierzwidok(); +...(); wysyła wprowadzone dane 1 wybiera * * Widok Elementy interfejsu użytkownika dostarcza architektury dla całej warstwy prezentacji umożliwia separację stanu, prezentacji i zachowania lokalizuje aktualizuje Model Dane reprezentujące stan używa każdy z elementów mogą opisywać kolejne wzorce projektowe

Wzorce kontrolera Ile powinno być kontrolerów? jeden kontroler obsługujący wszystkie żądania osobny kontroler do każdego żądania Rozwiązanie: wzorzec wysuniętego kontrolera

Wzorzec wysuniętego kontrolera Wysunięty kontroler Kontrolery stron +wspólnametoda1() +...() Kontroler Model Widok +aktualizujmodel() +wybierzwidok() +...() aktualizuje Model Dane reprezentujące stan używa wysyła wprowadzone dane wybiera Widok Elementy interfejsu użytkownika

Różnice w obsłudze żądań Problem: część akcji wykonywana tylko dla niektórych żądań (np. zapis do dziennika, sprawdzenie sposobu kodowania) wysunięty kontroler nie wystarcza Rozwiązanie 1: warunki wykonania kodu dla każdego żądania są opisane w wysuniętym kontrolerze Rozwiązanie 2: utworzenie kilku wysuniętych kontrolerów, każdy z inną sekwencją opcjonalnych fragmentów kodu Rozwiązanie 3: opcjonalny kod zapisany w kontrolerach stron Rozwiązanie 4: różne łańcuchy filtrów dostosowane do każdego z żądań, zbudowane za pomocą dekoratorów

Wzorzec filtra dekorującego Dekorator klasa obudowująca, zawierająca pojedynczy obiekt podrzędny i mająca taki sam interfejs jak ten obiekt Wywołanie metody opakowanej klasy: 1. wykonanie kodu metody z klasy opakowującej 2. przekazanie sterowania do metody obiektu opakowanego 3. powrót do metody klasy opakowującej

Wzorzec filtra dekorującego Dekorator 1 Dekorator 2 Wysunięty kontroler żądanie preprocess() dofilter() preprocess() dofilter() forward() postprocess() odpowiedź postprocess()

Usługa i wykonawca Problem: ścisłe powiązanie stron i dostępnych akcji z kontrolerem Rozwiązanie: strony i akcje jako oddzielne klasy Możliwości: Elastyczne dodawanie i usuwanie stron Używanie kilka razy tej samej strony Struts

Usługa i wykonawca wybiera Akcja aktualizuje Kontroler używa Dyspozytor Model wybiera Widok używa odpowiedź

Pomocnik widoku oddzielenie prezentacji od formatowania unikanie rozbudowanych stron JSP unikanie powielania kodu definiowanie znaczników (Struts)

<% EmployeeDelegate empdelegate = new EmployeeDelegate(); Iterator employees = empdelegate.getemployes(employeedelegate.all_departments); %> <table border = 1 > <tr> <th> Imi ę </th> <th> Nazwisko </th> <th> Stanowisko </th> </tr> <% %> while (employees.hasnext() ) { EmployeeVO employee = (EmployeeVO) employees.next(); <tr> <td> <%= employee.getfirstname().touppercase() %> </td> <td> <%= employee.getlastname().touppercase() %> </td> <td> <%= employee.getdesignation() %> </td> </tr> <% } } %> </table>

<patterns:employeelistget /> <table border = 1 > <tr> <th> Imi ę </th> <th> Nazwisko </th> <th> Stanowisko </th> </tr> <patterns:employeelist id= employeelist > <tr> <td> <patterns:employee attr= FirstName case= Upper > </td> <td> <patterns:employee attr= LastName case= Upper > </td> <td> <patterns:employee attr= Designation > </td> </tr> </patterns:employeelist> </table>

Widok złożony Rozkład widoku na ogólny szkielet, który następnie zapełniamy niezależnymi elementami. Pasek tytułowy Nawigacja Część główna Stopka Przykład: biblioteka Tiles

Warstwa biznesowa - Pełnomocnik biznesowy - Fabryka pełnomocników biznesowych

Warstwa biznesowa Klient Pełnomocnik biznesowy Usługa biznesowa Lokalizator usługi Usługa biznesowa

Warstwa biznesowa Warstwa prezentacji Kontener Pełnomocnik biznesowy Adapter usługi CORBA Adapter usługi Kontener EJB Pełnomocnik biznesowy Lokalizator usługi EJB EJB

Warstwa bazy danych Obiekty dostępu do danych(dao) Pomysł: jeden obiekt = jeden wiersz tabeli np. Uczeń Ocena imię uczeń nazwisko przedmiot wartość Pytanie: Co się dzieje, gdy zapytamy o wszystkie oceny danego ucznia?

Warstwa bazy danych Rozwiązanie: Byt złożony Uczeń imię nazwisko kolekcja ocen Związane wzorce: isdirty odroczone ładowanie Fabryka DAO

Literatura W. Crawford, J. Kaplan J2EE. Stosowanie wzorców projektowych D. Alur, J Crupi, D. Malks Core J2EE. Wzorce projektowe Joshua Kerievsky - Refaktoryzacja do wzorców projektowych E. Gamma, R. Helm, R. Johnson, J. Vlissides Design Patterns: Elements of Reusable Object Oriented Software M. Fowler Patterns of Enterprise Application Architecture