"Biznesowe" wzorce projektowe

Wielkość: px
Rozpocząć pokaz od strony:

Download ""Biznesowe" wzorce projektowe"

Transkrypt

1 POLITECHNIKA GDAŃSKA WYDZIAŁ ELEKTRONIKI TELEKOMUNIKACJI I INFORMATYKI Katedra Architektury Systemów Komputerowych Jarosław Kuchta Instrukcja do laboratorium z przedmiotu Projektowanie Aplikacji Internetowych "Biznesowe" wzorce projektowe Gdańsk 2013/14 1

2 Wprowadzenie W ćwiczeniu studenci mają za zadanie napisanie aplikacji internetowej w technologii Web Service lub WCF wykorzystującej jednocześnie trzy wzorce projektowe: Transfer Object Assembler Composite Entity Business Delegate 1. Transfer Object Assembler Konieczność pobierania danych z wielu obiektów biznesowych przez warstwę aplikacji skutkuje ścisłym związkiem między warstwą aplikacji a rozproszonym modelem obiektowym. Zmiana modelu obiektowego powoduje konieczność zmiany warstwy aplikacji. Liczne operacje pobrania danych z komponentów rozproszonych powodują zmniejszenie wydajności sieci (wywołania zdalne z narzutem sieciowym). Zarządzanie komponentami biznesowymi przez warstwę aplikacji wymusza włączenie logiki biznesowej do warstwy aplikacji (zastosowanie grubego klienta) Jeśli warstwa biznesowa ma klientów różnych typów, to przeniesienie zmian modelu obiektowego do tych wielu różnych klientów jest dodatkowo utrudnione, jako że ten sam kod biznesowy może występować po stronie klienta w wielu różnych miejscach. Rozwiązaniem tych problemów może być przekazywanie danych wielu różnych komponentów biznesowych w jednym, zbiorczym obiekcie transferowym. Obiekt ten jest tworzony przez połączenie wielu obiektów transferowych z różnych komponentów biznesowych w jeden. Serwer tworzy taki zbiorczy obiekt transferowy w locie, tworząc jednocześnie biznesowy model obiektowy. Jeśli ten model jest złożony, to zbiorczy obiekt transferowy nie powinien być modyfikowany. W tym wzorcu: 1: To asembler obiektów transferowych (Transfer Object Assembly) jest po stronie serwera tym komponentem, który obsługuje żądania klienta co do pobrania danych. 2: W reakcji na to żądanie asembler tworzy obiekt transferowy (Transfer Object), który będzie zawierał dane. 3: Następnie asembler synchronicznie lub asynchronicznie pobiera dane z wielu różnych obiektów: 3a: z komponentów encyjnych (Business Entity), 3b: z komponentów sesyjnych (Business Session). 3c: lub bezpośrednio z obiektów DAO. 4: pobrane dane asembler umieszcza w obiekcie transferowym, 5: który odsyła do klienta 2

3 1.1. Przykład Aplikacja zarządzania projektem. Klient żąda zbiorczej informacji o projekcie, która zawiera: Dane identyfikacyjne projektu Dane osobowe kierownika projektu Listę zadań w tym projekcie Zasoby dla każdego zadania Klasa złożonego obiektu transferowego public class ProjectDetailsData public ProjectTO projectdata; public ProjectManagerTO projectmanagerdata; public Collection listoftasks; Klasa obiektu transferowego dla zasobów zadania public class TaskResourceTO public String projectid; public String taskid; public String name; public String description; public Date startdate; public Date enddate; public ResourceTO assignedresource; 3

4 public TaskResourceTO(String projectid, String taskid, String name, String description, Date startdate, Date enddate, ResourceTO assignedresource) this.projectid = projectid; this.taskid = taskid; this.assignedresource = assignedresource; Klasa dla obiektu transferowego zadania public class TaskTO public String projectid; public String taskid; public String name; public String description; public Date startdate; public Date enddate; public assignedresourceid; public TaskTO (String projectid, String taskid, String name, String description, Date startdate, Date enddate, String assignedresourceid) this.projectid = projectid; this.taskid = taskid; this.assignedresource = assignedresource; Klasa dla obiektu transferowego zasobu public class ResourceTO public String resourceid; public String resourcename; public String resource ; public ResourceTO (String resourceid, String resourcename, String resource , ) this.resourceid = resourceid; this.resourcename = resourcename; this.resource = resource ; 4

5 Implementacja asemblera obiektów transferowych public class ProjectDetailsAssembler implements javax.ejb.sessionbean public ProjectDetailsData getdata (String projectid) // Tworzenie złożonego obiektu danych ProjectDetailsData pdata = new ProjectDetailsData(); // Pobieranie danych projektu ProjectHome projecthome = ServiceLocator.getInstance().getHome ("Project", ProjectEntityHome.class); ProjectEntity project = projecthome.findbyprimarykey(projectid); ProjectTO projto = project.getdata(); // Dodawanie danych projektu do złożonego obiektu danych pdata.projectdata = projto; // Pobieranie danych menedżera projektu ProjectManagerHome projectmanagerhome = ServiceLocator.getInstance().getHome ("ProjectManager", ProjectEntityHome.class); ProjectManagerEntity projectmanager = projectmanagerhome.findbyprimarykey (projto.managerid); ProjectManagerTO projmgrto = projectmanager.getdata(); // Dodawanie danych menedżera do złożonego obiektu danych pdata.projectmanagerdata = projmgrto; // Pobieranie listy projektów Collection projtasklist = project.gettaskslist(); // Tworzenie listy zasobów dla zadania ArrayList listoftasks = new ArrayList(); Iterator taskiter = projtasklist.iterator(); while (taskiter.hasnext()) TaskTO task = (TaskTO) taskiter.next(); // Pobieranie danych zasobu ResourceHome resourcehome = ServiceLocator.getInstance().getHome ("Resource", ResourceEntityHome.class); ResourceEntity resource = resourcehome.findbyprimarykey (task.assignedresourceid); ResourceTO resto = resource.getresourcedata(); // Tworzenie obiektu transferowego dla zasobu zadania // korzystając z obiektów danych Task i Resource TaskResourceTO trto = new TaskResourceTO (task.projectid, task.taskid, task.name, task.description,task.startdate, task.enddate, resto); // Dodanie obiektu transferowego do listy zadań 5

6 listoftasks.add(trto); // Dodanie listy zadań do obiektu złożonego pdata.listoftasks = listoftasks; // Pobieranie innych danych obiektu transferowego // Zwracany złożony obiekt danych return pdata; 2. Composite Entity W aplikacjach rozproszonych komponenty klienckie uzyskują dostęp do komponentów encyjnych poprzez ich interfejsy zdalne. Dlatego każde wywołanie potencjalnie przechodzi przez liczne warstwy sieci, nawet wówczas, gdy klient odwołuje się do serwera lokalnego (na tym samym komputerze). Jeśli komponenty encyjne są "drobnoziarniste" oferują wiele szczegółowych metod to liczne wywołania tych metod przez klienta generują duży ruch sieciowy dając jednocześnie duży narzut sieciowy na wykonanie operacji. Komponenty encyjne reprezentują trwałe, rozproszone obiekty biznesowe. Podczas ich projektowania trzeba uwzględniać "ziarnistość" modelowych klas biznesowych. Stosowanie komponentów encyjnych jest opłacalne wówczas, gdy klasy biznesowe oprócz szeregu prostych metod pobierania i ustawiania właściwości ("get" i "set") oferują jeszcze metody bardziej złożone. Takie, "gruboziarniste" obiekty mają zazwyczaj obiekty zależne, które nie mają żadnego znaczenia w świecie rzeczywistym o ile nie są przypisane do jakiegoś nadrzędnego obiektu "gruboziarnistego". Powracającym problemem jest bezpośrednie odwzorowanie modelu klas z analizy w model komponentów encyjnych. Tworzą się wówczas relacje pomiędzy klasami komponentów encyjnych a klasami obiektów zależnych nie uwzględniające ziarnistości klas. Brak odpowiedniego zarządzania ziarnistością komponentów encyjnych powoduje szereg problemów: Konieczność walidacji referencji zdalnych do komponentów encyjnych Bezpośrednie odwzorowanie modelu klas w model EJB nie bierze pod uwagę skutków/wpływu relacji między obiektami. Relacje międzyobiektowe są bezpośrednio tłumaczone na relacje między komponentami encyjnymi. W rezultacie komponent encyjny może zawierać lub przechowywać zdalną 6

7 referencję do innego komponentu encyjnego. Jednak zarządzanie zdalnymi referencjami między obiektami rozproszonymi wymaga innych technik niż zarządzanie referencjami do obiektów lokalnych. Oprócz zwiększenia złożoności kodu, zmniejsza to elastyczność, ponieważ komponenty encyjne muszą się zmieniać jak tylko następują jakiekolwiek zmiany w relacjach między nimi. Ponadto nie ma gwarancji co do poprawności referencji do komponentów encyjnych w całym czasie działania aplikacji. Takie referencje są ustanawiane dynamicznie za pośrednictwem obiektu domowego komponentu encji i klucza głównego instancji komponentu encyjnego. To pociąga za sobą duży narzut na sprawdzanie poprawności referencji w czasie wykonania. Problemy z zarządzaniem i pielęgnowaniem systemu Implementacja drobnoziarnistych obiektów jako komponentów encyjnych powoduje, że liczba komponentów encyjnych w systemie jest bardzo duża. Każdy komponent encyjny zawiera szereg klas. Dla każdego komponentu encyjnego projektant musi napisać klasy dla interfejsu domowego, interfejsu zdalnego, implementację funkcjonalności i klucza głównego. Ponadto kontener może wymagać szeregu klasy pomocniczych. Tak więc liczba klas do implementacji i utrzymania jest bardzo duża. Problemy z wydajnością sieci Pomiędzy drobnoziarnistymi komponentami encyjnymi zazwyczaj występuje wiele relacji. Komponenty te są implementowane jako obiekty rozproszone. Jeśli jeden komponent wywołuje metody innego komponentu, to wywołanie jest traktowane jako wywołanie zdalne, nawet jeśli oba komponenty rezydują na tej samej maszynie. Jak liczba relacji między komponentami encyjnymi wzrasta, to wydajność całego systemu spada ze względu na zwiększający się narzut sieciowy. Zależność aplikacji od schematu bazy danych Gdy komponenty encyjne są drobnoziarniste, to każda instancja komponentu zazwyczaj reprezentuje pojedynczy rekord w bazie danych. Taki sposób projektowania zachęca do operowania bezpośredniego na bazie danych i jej tabelach, a to z kolei uzależnia aplikację od konkretnej struktury bazy danych. Jeśli struktura bazy danych się zmienia, to zmianie muszą również ulec komponenty encji. Ponieważ klienci operują na tym samym poziomie ziarnistości, to i ich implementacja jest zależna od schematu bazy danych. Konieczność zarządzania relacjami przez klienta Ziarnistość komponentów encyjnych wpływa na przesyłanie danych pomiędzy komponentem a jego klientem. W większości aplikacji klienci zazwyczaj potrzebują większej ilości danych niż tylko jednego lub dwóch rekordów tabeli. W takim przypadku oznacza to konieczność zarządzania relacjami przez klienta. W zależności od wymagań na dane klient może być zmuszony do przeglądania wielu tabel dla uzyskania wymaganych informacji. Wzorzec Composite Entity łączy gruboziarnisty obiekt trwały i jego obiekty zależne w złożony komponent encyjny. Obiekt trwały jest obiektem przechowywanym w pamięci trwałej (np. w bazie danych). Obiekt trwały jest instancją klasy trwałej. W przypadku implementacji w 7

8 relacyjnej bazie danych klasa trwała jest implementowana jako tabela w bazie danych, a jej instancja (obiekt trwały) jest reprezentowana przez pojedynczy rekord w tabeli. Wyróżnia się gruboziarniste obiekty trwałe i obiekty zależne. Obiekt gruboziarnisty jest implementacją klasy modelowej reprezentującej pewien byt rzeczywiście istniejący w dziedzinie problemu (np. byt "Klient"). Poprzez relacje z tabelą implementującą obiekt gruboziarnisty mogą być powiązane tabele implementujące obiekty zależne. Każdy obiekt zależny reprezentuje dane, które nie mają znaczenia bez powiązania z obiektem gruboziarnistym (przykład: adres zamieszkania i adres korespondencji). We wzorcu Composite Entity obiekty zależne nie są widoczne dla klienta inaczej, jak tylko poprzez obiekt gruboziarnisty. To ten obiekt pobiera z pamięci trwałej obiekty zależne i dostarcza je razem ze swoimi danymi do klienta w postaci jednego, złożonego komponentu encyjnego. Współdziałanie komponentów w tym wzorcu rozpoczyna się od: 1: Żądania pobrania/utrwalenia danych skierowanego od klienta do komponentu encyjnego. Komponent ten zawiera referencję do obiektu gruboziarnistego zaimplementowanego jako klasa trwała. Poprzez tę referencję: 2: komponent encyjny przekazuje żądanie klienta do obiektu gruboziarnistego. Ten z kolei ma zapisane referencje do obiektów zależnych, od których 3a: albo pobiera dane bezpośrednio 3b: albo pośrednio poprzez inne obiekty zależne 8

9 2.1. Przykład Do poprzedniego przykładu dodajemy dobieranie specjalistów do zadań. W tym celu zaimplementowano obiekt biznesowy Resource, który reprezentuje "zasób ludzki" odpowiedni do wykonania zadania. Obiekt ten ma dwa obiekty zależne: BlockOutTime czas niedostępności "zasobu" z powodu szkolenia, urlopu, zwolnienia i in. Każdy "zasób" może być blokowany wielokrotnie, stąd między klasami Resource i BlockOutTime występuje relacja jeden-wiele. SkillSet zbiór umiejętności jakie posiada "zasób". Wybierany będzie ten "zasób", który posiada umiejętności niezbędne do realizacji zadania. Ponieważ jeden specjalista może mieć wiele umiejętności, to między klasami Resource i SkillSet występuje relacja jeden-wiele. Implementacja obiektu gruboziarnistego package corepatterns.apps.psa.ejb; import corepatterns.apps.psa.core.*; import corepatterns.apps.psa.dao.*; import java.sql.*; import javax.sql.*; import java.util.*; import javax.ejb.*; import javax.naming.*; public class ResourceEntity implements EntityBean public String employeeid; public String lastname; public String firstname; public String departmentid; public String practicegroup; public String title; public String grade; public String ; public String phone; public String cell; public String pager; public String managerid; // Kolekcja zależnych obiektów typu BlockOutTime public Collection blockouttimes; // Kolekcja zależnych obiektów typu SkillSet public Collection skillsets; private EntityContext context; // Implementacja metody Entity Bean public String ejbcreate(resourceto resource) throws CreateException 9

10 this.employeeid = resource.employeeid; setresourcedata(resource); getresourcedao().create(resource); catch(exception ex) throw new EJBException("Reason:" + ); return this.employeeid; public String ejbfindbyprimarykey(string primarykey) throws FinderException boolean result; ResourceDAO resourcedao = getresourcedao(); result = resourcedao.selectbyprimarykey(primarykey); catch(exception ex) throw new EJBException("Reason:" + ); if (result) return primarykey; else throw new ObjectNotFoundException(); public void ejbremove() // Usuwanie obiektów zależnych if (this.skillsets!= null) // Do tego celu wykorzystujemy obiekt DAO SkillSetDAO skillsetdao = getskillsetdao(); skillsetdao.setresourceid(employeeid); skillsetdao.deleteall(); skillsets = null; if (this.blockouttime!= null) // Tak samo dla drugiej kolekcji obiektów zależnych // Usuwamy dane główne encji korzystając z DAO ResourceDAO resourcedao = new ResourceDAO(employeeId); resourcedao.delete(); catch (ResourceException ex) throw new EJBException("Reason:"+); catch (BlockOutTimeException ex) throw new EJBException("Reason:"+); catch (Exception exception) 10

11 public void setentitycontext(entitycontext context) this.context = context; public void unsetentitycontext() context = null; public void ejbactivate() employeeid = (String)context.getPrimaryKey(); public void ejbpassivate() employeeid = null; public void ejbload() // Ładujemy dane główne encji z DAO ResourceDAO resourcedao = getresourcedao(); setresourcedata((resourceto) resourcedao.load(employeeid)); catch(exception ex) throw new EJBException("Reason:" + ); public void ejbstore() // Zapisywanie informacji z encji przez DAO getresourcedao().update(getresourcedata()); catch(skillsetexception ex) throw new EJBException("Reason:" + ); catch(blockouttimeexception ex) throw new EJBException("Reason:" + ); public void ejbpostcreate(resourceto resource) // Pobieranie obiektu transferowego zasobu public ResourceTO getresourceto() // Tworzenie nowego obiektu transferowego ResourceTO resourceto = new ResourceTO (employeeid); // Kopiowanie danych z encji do obiektu transferowego resourceto.lastname = lastname; resourceto.firstname = firstname; resourceto.departmentid = departmentid; return resourceto; 11

12 public void setresourcedata(resourceto resourceto) // Kopiowanie danych z obiektu transferowego do encji employeeid = resourceto.employeeid; lastname = resourceto.lastname; // Metoda pobierania zależnych obiektów transferowych public Collection getskillsetsdata() // Jeśli kolekcja skillsets nie jest załadowana, to załaduj ją najpierw // Patrz ładowanie leniwe return skillsets; // Inne metody get i set // Metody biznesowe public void addblockouttimes (Collection morebots) throws BlockOutTimeException // parametr morebots jest kolekcją obiektów BlockOutTimeTO Iterator moreiter = morebots.iterator(); while (moreiter.hasnext()) BlockOutTimeTO botto = (BlockOutTimeTO)moreIter.next(); if (!(blockouttimeexists(botto))) // dodaj obiekt BlockOutTimeTO botto.setnew(); blockouttime.add(botto); else // Obiekt już istnieje w kolekcji dodanie niemożliwe throw new BlockOutTimeException(); catch(exception exception) throw new EJBException(); public void addskillset(collection moreskills) throws SkillSetException // podobna operacja do addblockouttime() 12

13 public void updateblockouttime(collection updbots) throws BlockOutTimeException Iterator botiter = blockouttimes.iterator(); Iterator upditer = updbots.iterator(); while (upditer.hasnext()) BlockOutTimeTO botto = (BlockOutTimeTO)updIter.next(); while (botiter.hasnext()) BlockOutTimeTO existingbot = (BlockOutTimeTO) botiter.next(); // porównanie wartości klucza aby znaleść obiekt BlockOutTimeTO if (existingbot.equals(botto)) // Obiekt BlockOutTime znaleziony w kolekcji // zastępujemy nowym botto.setdirty(); // stary obiekt jest zaznaczony jako zmodyfikowany botto.resetnew(); // a nie nowy existingbot = botto; catch (Exception exc) throw new EJBException(); public void updateskillset(collection updskills) throws CommitmentException // implementacja podobna do updateblockouttime Implementacja ładowania leniwego Gdy obiekt złożony ResourceEntity jest ładowany metodą ejbload(), to jedynie dane zasobu są ładowane czyli jedynie abuty zdefiniowane w klasie ResourceEntity, a nie kolekcje obiektów zależnych. Te z kolei są ładowane dopiero, gdy klient wywołuje metodę biznesową, która potrzebuje tych obiektów. Dlatego metoda ejbload() śledzi obiekty zależne ładowane w ten sposób i dołącza je przy przeładowaniu. public Collection getskillsetsdata() throws SkillSetException checkskillsetload(); 13

14 return skillsets; private void checkskillsetload() throws SkillSetException // Ładowanie na żądanie if (skillsets == null) skillsets = getskillsetdao(resourceid).loadall(); catch(exception exception) throw new SkillSetException(); public void ejbload() // Ładowanie danych głównych zasobu z DAO ResourceDAO resourcedao = new ResourceDAO(employeeId); setresourcedata((resourceto)resourcedao.load()); // Jeśli obiekty zależne są już załadowane, to muszą być załadowane ponownie. // Jeśli nie są załadowane, to nie są ładowane teraz, lecz później if (skillsets!= null) reloadskillsets(); if (blockouttimes!= null) reloadblockouttimes(); throw new EJBException("Reason:"+); Implementacja markera DirtyMarker dla zbioru umiejętności Przy zmianie zbioru umiejętności używanego jako obiektu transferowego są ustawiane znaczniki "dirty", "isnew" i "deleted". public class SkillSetTO implements DirtyMarker, java.io.serializable private String skillname; private String expertiselevel; private String info; private boolean dirty = false; private boolean isnew = true; private boolean deleted = false; public SkillSetTO () 14

15 // inicjalizacja // Jest to nowy obiekt transferowy setnew(); // Wszyskie metody zmiany wartości muszą ustalać znacznik modyfikacji public setskillname(string newskillname) if (newskillname!= skillname) skillname = newskillname; setdirty(); // znacznik "dirty" stosowany do modyfikowanych obiektów transferowych public void setdirty() dirty = true; public void resetdirty() dirty = false; public boolean isdirty() return dirty; // znacznik "isnew" stosowany do nowych obiektów transferowych public void setnew() isnew = true; public void resetnew() isnew = false; public boolean isnew() return isnew; // znacznik "deleted" stosowany do usuniętych obiektów transferowych public void setdeleted() deleted = true; public boolean isdeleted() return deleted; public void resetdeleted() deleted = false; Implementacja optymalizacji zapisu Gdy obiekt ResourceEntity jest zapisywany metodą ejbstore(), to obowiązkowo są zapisywane tylko dane główne encji. Obiekty zależne są zapisywane tylko wtedy, gdy są zmodyfikowane i ustawiona jest dla nich któraś z flag modyfikacji. public void ejbstore() // Zapisywanie danych głównych encji getresourcedao().update(getresourcedata()); // Jeśli kolekcja obiektów zależnych SkillSets jest załadowana, // to sprawdzamy konieczność aktualizacji bazy danych if (skillsets!= null) // obiekt DAO umożliwi zapisywanie obiektów zależnych SkillSetDAO skillsetdao = getskillsetdao(); 15

16 // Iterator po kolekcji obiektów zależnych Iterator skilliter = skillset.iterator(); while (skilliter.hasnext()) // Pobieramy obiekt transferowy z iteratora SkillSetTO skill = (SkillSetTO) skilliter.next(); // Sprawdzamy, czy jest to nowo utworzony obiekt zależny if (skill.isnew()) // Jeśli tak, to obiekt transferowy jest dodawany przez DAO do bazy danych skillsetdao.insert(skill); // Flagi modyfikacji są kasowane skill.resetnew(); skill.resetdirty(); // Sprawdzamy, czy obiekt zależny został zaznaczony jako usunięty else if (skill.isdeleted()) // Jeśli tak, to obiekt transferowy jest usuwany przez DAO z bazy danych skillsetdao.delete(skill); // i usuwany z kolekcji obiektów zależnych skillsets.remove(skill); // Wreszcie sprawdzamy, czy obiekt zależny został zmieniony else if (skill.isdirty()) // Jeśli tak, to obiekt transferowy jest zmieniany przez DAO w bazie danych skillsetdao.update(skill); // Flagi modyfikacji są kasowane skill.resetdirty(); skill.resetnew(); // Podobnie implementuje się modyfikację kolekcji BlockOutTime catch(skillsetexception ex) throw new EJBException("Reason:"+); catch(blockouttimeexception ex) throw new EJBException("Reason:"+); catch(commitmentexception ex) throw new EJBException("Reason:"+); 3. Business Delegate Komponenty warstwy prezentacji współdziałają bezpośrednio z komponentami usługowymi. Taka bezpośrednia współpraca powoduje, że komponenty warstwy prezentacji mogą być wrażliwe na szczegóły implementacyjne warstwy usługowej. W 16

17 rezultacie każda zmiana warstwy usługowej może pociągać za sobą konieczność zmianę implementacji warstwy prezentacji. Ponadto jeśli po stronie klienta brak mechanizmów buforowania i agregacji, to komponenty warstwy prezentacji wysyłają wiele wywołań warstwy usług przez sieć. Wreszcie bezpośrednie korzystanie z API warstwy usługowej zmusza zespół projektowy pracujący nad warstwą prezentacji do zajmowania się rozproszoną naturą technologii EJB. Rozwiązaniem tych problemów jest komponent o nazwie delegat biznesowy (Business Delegate). Działa on po stronie klienta wywołując usługi komponentów biznesowych. W ten sposób ukrywa przed klientem szczegóły implementacji usług biznesowych oraz uniezależnia implementację komponentów prezentacyjnych od zmian zachodzących w warstwie biznesowej. Współdziałanie komponentów: 1. Klient tworzy delegata biznesowego 1.1 W imieniu klienta delegat biznesowy zwraca się do lokalizatora usług o wyszukanie komponentu usługowego Lokalizator usług wyszukuje odpowiedni komponent usługowy i zwraca go do delegata biznesowego. 2. Klient wywołuje metodę delegata biznesowego, który: 2.1 przekazuje wywołanie od komponentu usługowego 17

18 3. Klient może zwrócić się do delegata biznesowego o podanie identyfikatora komponentu usługowego. Identyfikator ten będzie używany w późniejszym czasie 3.1 Delegat biznesowy przekazuje żądanie do lokalizatora usług, który: pobiera uchwyt komponentu usługowego i przekształca go w łańcuch zwracany do klienta Przy kolejnej okazji: 4. Klient tworzy delegata biznesowego przekazując mu identyfikator określonego komponentu usługowego. 4.1 Delegat biznesowy zwraca się do lokalizatora usług o podanie komponentu o określonym identyfikatorze Lokalizator usług przekształca identyfikator łańcuchowy w uchwyt komponentu i Wykorzystuje ten uchwyt do połączenia z odpowiednim komponentem usługowym 5. Od tego momentu klient może korzystać z tego komponentu usługowego 5.1 za pośrednictwem delegata biznesowego 18

19 3.1. Przykład Do poprzedniego przykładu dodajemy delegata biznesowego po stronie klienta. Implementacja delegata zasobów // imports public class ResourceDelegate // Wykorzystujemy zdalny interfejs fasady sesji private ResourceSession session; // Klasa obiektu domowego fasady sesji private static final Class homeclazz = corepatterns.apps.psa.ejb.resourcesessionhome.class; // Domyślny konstruktor. Wyszukuje obiekt domowy i łączy się z sesją public ResourceDelegate() throws ResourceException ResourceSessionHome home = (ResourceSessionHome) ServiceLocator.getInstance().getHome( "Resource", homeclazz); session = home.create(); catch(servicelocatorexception ex) throw new ResourceException(); catch(createexception ex) throw new ResourceException(); catch(remoteexception ex) throw new ResourceException(); // Konstruktor wykorzystujący identyfikator sesji użytkownika do ponownego połączenia public BusinessDelegate(String id) throws ResourceException super(); reconnect(id); // Zwraca identyfikator sesji użytkownika do ponownego wykorzystania public String getid() return ServiceLocator.getId(session); catch (Exception e) throw new ResourceException(); 19

20 // metoda ponownego połączenia z wykorzystaniem identyfikatora sesji użytkownika public void reconnect(string id) throws ResourceException session = (ResourceSession) ServiceLocator.getService(id); catch (RemoteException ex) throw new ResourceException(); // Metody biznesowe "proxy" wywołujące metody fasady sesji public ResourceTO setcurrentresource (String resourceid) throws ResourceException return session.setcurrentresource (resourceid); catch (RemoteException ex) throw new ResourceException(); public ResourceTO getresourcedetails() throws ResourceException return session.getresourcedetails(); catch(remoteexception ex) throw new ResourceException(); public void setresourcedetails (ResourceTO vo) throws ResourceException session.setresourcedetails(vo); catch(remoteexception ex) throw new ResourceException(); public void addnewresource(resourceto vo) throws ResourceException session.addresource(vo); catch(remoteexception ex) throw new ResourceException(); 20

21 4. Zadanie dla studentów Zaprogramować w środowisku Visual Studio albo J2EE aplikację rozproszoną składającą się z części serwerowej i części klienckiej. W części serwerowej zrealizować wzorzec Composite Entity. W części klienckiej wzorzec Business Delegate. Do transferu danych zastosować wzorzec Transfer Object Assembly. We wzorcu Composite Entity zaimplementować leniwe ładowanie lub modyfikację z wykorzystaniem znaczników modyfikacji. Bibliografia Rysunki i przykłady pochodzą z następujących źródeł: er.html Literatura uzupełniająca: Gamma et al: Wzorce projektowe, WNT Warszawa Buschman et al: Pattern-Oriented Software Architecture Volume 1: A System of Patterns, Wyd. Wiley, Schmidt et al: Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects, Wyd. Wiley, 21

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

Projektowanie Aplikacji Internetowych Jarosław Kuchta. Wzorce projektowe warstwy biznesowej Jarosław Kuchta Wzorce projektowe warstwy biznesowej Wzorce projektowe dotyczące danych, obiektów i logiki biznesowej Transfer Object Assembler Łączy dane pochodzące z różnych komponentów biznesowych Composite

Bardziej szczegółowo

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług Wzorce projektowe warstwy usług Wzorce projektowe warstwy usług Service Locator Ułatwia wyszukanie komponentów usługowych Service Activator Umożliwia asynchroniczne przesyłanie żądań do komponentów biznesowych

Bardziej szczegółowo

Wzorce projektowe warstwy danych

Wzorce projektowe warstwy danych POLITECHNIKA GDAŃSKA WYDZIAŁ ELEKTRONIKI TELEKOMUNIKACJI I INFORMATYKI Katedra Architektury Systemów Komputerowych Jarosław Kuchta Instrukcja do laboratorium z przedmiotu Projektowanie Aplikacji Internetowych

Bardziej szczegółowo

Projektowanie Aplikacji Rozproszonych Jarosław Kuchta. Wzorce projektowe warstwy danych

Projektowanie Aplikacji Rozproszonych Jarosław Kuchta. Wzorce projektowe warstwy danych Rozproszonych Jarosław Kuchta Wzorce projektowe warstwy danych Wzorce projektowe Core J2EE Patterns (podział umowny) Warstwy danych: Data Access Object, Transfer Object, Value List Handler Warstwy biznesowej:

Bardziej szczegółowo

Wzorce logiki dziedziny

Wzorce logiki dziedziny Wzorce logiki dziedziny 1. Wzorce logiki dziedziny skrypt transakcji (Transaction Script), brama tabeli (Table Data Gateway), model dziedziny (Domain model), strategia (Strategy), moduł tabeli (Table Module),

Bardziej szczegółowo

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Dr inż. Zofia Kruczkiewicz wykład 4 Programowanie aplikacji internetowych, wykład 4 1 1. Zadania aplikacji rozproszonych obiektów

Bardziej szczegółowo

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

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe. Warstwa integracji wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe. 1. Ukrycie logiki dostępu do danych w osobnej warstwie 2. Oddzielenie mechanizmów trwałości od modelu obiektowego Pięciowarstwowy

Bardziej szczegółowo

Zagadnienia projektowania aplikacji J2EE

Zagadnienia projektowania aplikacji J2EE 211 Zagadnienia projektowania aplikacji J2EE Maciej Zakrzewicz Maciej.Zakrzewicz@cs.put.poznan.pl http://www.cs.put.poznan.pl/mzakrzewicz/ Plan rozdziału 212 Wstęp Techniki projektowe: Wprowadzenie modułu

Bardziej szczegółowo

Wzorce dystrybucji i wspólbieżności autonomicznej

Wzorce dystrybucji i wspólbieżności autonomicznej Wzorce dystrybucji i wspólbieżności autonomicznej 1. Wzorce dystrybucji, fasada zdalna (Remote Facade), obiekt transfery danych (Data Transfer Object), 2. Wzorce współbieżności autonomicznej, blokada optymistyczna

Bardziej szczegółowo

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski Adapter: opis Wzorce Strukturalne Tomasz Borzyszkowski Alternatywna nazwa: Wrapper (opakowanie) Rola obiektu Adapter: pełni wobec Klienta rolę otoczki, która umożliwia przetłumaczenie jego żądań na protokół

Bardziej szczegółowo

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

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych Plan prezentacji Budowa aplikacji w technologii Enterprise JavaBeans Przegląd architektur aplikacji rozproszonych: CORBA,, Wprowadzenie do Enterprise JavaBeans () Budowa komponentów sesyjnych Budowa komponentów

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych Podejście obiektowe do budowy systemów rozproszonych Wywoływanie metod zdalnych model systemu obiekt aplikacja kliencka interfejs serwer proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG Budowa aplikacji w technologii Enterprise JavaBeans Maciej Zakrzewicz PLOUG Plan prezentacji Przegląd architektur aplikacji rozproszonych: CORBA, SOAP, EJB Wprowadzenie do Enterprise JavaBeans (EJB) Budowa

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,

Bardziej szczegółowo

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1 Obiektowe programowanie rozproszone Java RMI Krzysztof Banaś Systemy rozproszone 1 Java RMI Mechanizm zdalnego wywołania metod Javy (RMI Remote Method Invocation) posiada kilka charakterystycznych cech,

Bardziej szczegółowo

Aplikacje RMI Lab4

Aplikacje RMI   Lab4 Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Lab4 Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych 1 1. Koncepcja budowy aplikacji RMI (aplikacja rozproszonych

Bardziej szczegółowo

Enterprise JavaBeans

Enterprise JavaBeans Enterprise JavaBeans 1. Wprowadzenie. 2. Przegląd komponentów EJB. komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 3. Kontener komponentów EJB: JBoss. 1 Enterprise JavaBeans

Bardziej szczegółowo

Programowanie komponentowe 5

Programowanie komponentowe 5 Budowa warstwy klienta w architekturze typu klient-serwer zbudowanych z komponentów typu EE - klient desktopowy i internetowy. Zastosowanie komponentów opartych na technologii EJB 3.2. na podstawie https://docs.oracle.com/javaee/7/jeett.pdf

Bardziej szczegółowo

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

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z

Bardziej szczegółowo

Podejście obiektowe do budowy systemów rozproszonych

Podejście obiektowe do budowy systemów rozproszonych Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Dariusz Wawrzyniak 1 Mechanizm RMI umożliwia

Bardziej szczegółowo

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

Bezstanowe komponenty sesyjne i zdarzenia zwrotne Bezstanowe komponenty sesyjne i zdarzenia zwrotne 1. Zdarzenia zwrotne. klasy nasłuchujące, klasy nasłuchujące a dziedziczenie. 2. Bezstanowe komponenty sesyjne. interfejsy: bazowy, zdalny i lokalny, obiekty

Bardziej szczegółowo

Aplikacje internetowe i rozproszone - laboratorium

Aplikacje internetowe i rozproszone - laboratorium Aplikacje internetowe i rozproszone - laboratorium Enterprise JavaBeans (EJB) Celem tego zestawu ćwiczeń jest zapoznanie z technologią EJB w wersji 3.0, a w szczególności: implementacja komponentów sesyjnych,

Bardziej szczegółowo

Stanowe komponenty sesyjne

Stanowe komponenty sesyjne Stanowe komponenty sesyjne 1. Porównanie komponentów stanowych i bezstanowych. 2. Cykl życia stanowego komponentu sesyjnego, 3. Komponenty sesyjne a kontekst utrwalania, 4. Zagnieżdżanie komponentów sesyjnych,

Bardziej szczegółowo

Zaawansowane programowanie obiektowe - wykład 5

Zaawansowane programowanie obiektowe - wykład 5 Zaawansowane programowanie obiektowe - wykład 5 dr Piotr Jastrzębski (czynnościowe) opisują zachowanie obiektów, komunikację pomiędzy nimi i ich odpowiedzialność. Interpreter Iterator (kursor) Łańcuch

Bardziej szczegółowo

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania Opis biznesowy świata rzeczywistego Wymagania funkcjonalne i niefunkcjonalne aplikacji Diagram przypadków życia Diagramy klas i sekwencji:

Bardziej szczegółowo

Komponenty sterowane komunikatami

Komponenty sterowane komunikatami Komponenty sterowane komunikatami 1. Usługa JMS asynchroniczność, model przesyłania komunikatów, 2. Przykład wysyłanie wiadomości, odbieranie wiadomości, komponent sterowany komunikatami 3. Komponenty

Bardziej szczegółowo

Szczególne problemy projektowania aplikacji internetowych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Szczególne problemy projektowania aplikacji internetowych. Jarosław Kuchta Projektowanie Aplikacji Internetowych Szczególne problemy projektowania aplikacji Jarosław Kuchta Miejsce projektowania w cyklu wytwarzania aplikacji SWS Analiza systemowa Analiza statyczna Analiza funkcjonalna Analiza dynamiczna Analiza behawioralna

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 11 - przegląd wybranych wzorców mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 24 maja 2017 1 / 38 mgr inż. Krzysztof Szwarc Programowanie obiektowe Wzorce

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Podejście obiektowe do budowy systemów rozproszonych

Podejście obiektowe do budowy systemów rozproszonych Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Dariusz Wawrzyniak (IIPP) 1 Mechanizm

Bardziej szczegółowo

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV Piotr Jarosik, Kamil Jaworski, Dominik Olędzki, Anna Stępień Dokumentacja wstępna TIN Rozproszone repozytorium oparte o WebDAV 1. Wstęp Celem projektu jest zaimplementowanie rozproszonego repozytorium

Bardziej szczegółowo

EJB 3.0 (Enterprise JavaBeans 3.0)

EJB 3.0 (Enterprise JavaBeans 3.0) EJB 3.0 (Enterprise JavaBeans 3.0) Adrian Dudek Wirtualne Przedsiębiorstwo 2 Wrocław, 1 czerwca 2010 Plan prezentacji 1 Wprowadzenie Cel prezentacji Czym jest EJB 3.0? Historia 2 3 Cel prezentacji Wprowadzenie

Bardziej szczegółowo

Remote Method Invocation 17 listopada 2010

Remote Method Invocation 17 listopada 2010 Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja klienckak interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć interfejs (w języku Java), wywiedziony z Remote obiekt Podejście obiektowe do budowy systemów rozproszonych aplikacja kliencka stub interfejs serwer szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1 1 LINQ 1 1. Cel zajęć Celem zajęć jest zapoznanie się z technologią LINQ oraz tworzeniem trójwarstwowej aplikacji internetowej. 2. Zadanie Proszę przygotować aplikację WWW, która: będzie pozwalała na generowanie

Bardziej szczegółowo

Systemy Rozproszone - Ćwiczenie 6

Systemy Rozproszone - Ćwiczenie 6 Systemy Rozproszone - Ćwiczenie 6 1 Obiekty zdalne Celem ćwiczenia jest stworzenie obiektu zdalnego świadczącego prostą usługę nazewniczą. Nazwy i odpowiadające im punkty końcowe będą przechowywane przez

Bardziej szczegółowo

Wzorce projektowe. dr inż. Marcin Pietroo

Wzorce projektowe. dr inż. Marcin Pietroo Wzorce projektowe dr inż. Marcin Pietroo Adapter - strukturalny wzorzec projektowy, którego celem jest umożliwienie współpracy dwóm klasom o niekompatybilnych interfejsach - adapter przekształca interfejs

Bardziej szczegółowo

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu Zdalne wywołanie metod - koncepcja Oprogramowanie systemów równoległych i rozproszonych Wykład 7 RMI (Remote Method Invocation) - obiektowe RPC, dostarcza klientowi interfejs do obiektu, implementacja

Bardziej szczegółowo

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Oprogramowanie systemów równoległych i rozproszonych Wykład 7 Wykład 7 p. 1/2 Oprogramowanie systemów równoległych i rozproszonych Wykład 7 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Zdalne wywołanie

Bardziej szczegółowo

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

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

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

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. 1/14 Prototype (prototyp) Cel: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. Przykład: Edytor 3D klient tworzy obiekty różnych kształtów

Bardziej szczegółowo

Laboratorium 8 Diagramy aktywności

Laboratorium 8 Diagramy aktywności Laboratorium 8 Diagramy aktywności Zofia Kruczkiewicz Zofia Kruczkiewicz Lab_INP002017_8 1 Modelowanie zachowania obiektów za pomocą diagramów aktywności. Modelowanie zachowania obiektów za pomocą diagramów

Bardziej szczegółowo

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4 Utrwalanie danych zastosowanie obiektowego modelu danych warstwy biznesowej do generowania schematu relacyjnej bazy danych Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4 1. Relacyjne

Bardziej szczegółowo

Projektowanie logiki aplikacji

Projektowanie logiki aplikacji Jarosław Kuchta Projektowanie Aplikacji Internetowych Projektowanie logiki aplikacji Zagadnienia Rozproszone przetwarzanie obiektowe (DOC) Model klas w projektowaniu logiki aplikacji Klasy encyjne a klasy

Bardziej szczegółowo

Technologie obiektowe

Technologie obiektowe WYKŁAD dr inż. Paweł Jarosz Instytut Informatyki Politechnika Krakowska mail: pjarosz@pk.edu.pl LABORATORIUM dr inż. Paweł Jarosz (3 grupy) mgr inż. Piotr Szuster (3 grupy) warunki zaliczenia Obecność

Bardziej szczegółowo

Wypożyczalnia VIDEO. Technologie obiektowe

Wypożyczalnia VIDEO. Technologie obiektowe Wypożyczalnia VIDEO Jest to program do obsługi wypożyczalni i wypożyczeń klientów. Głównym zadaniem programu jest zarządzanie wypożyczeniami i drukowanie potwierdzenia wypożyczenia oraz naliczenie punktów

Bardziej szczegółowo

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1 interfejs (w języku Java), wywiedziony z Remote obiekt Podejście obiektowe do budowy systemów rozproszonych aplikacja kliencka interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności Projektowanie obiektowe Wzorce projektowe Gang of Four Wzorce odpowiedzialności 1 Roadmap Singleton Observer Mediator Proxy Flyweight 2 Wzorce odpowiedzialności Udostępniają techniki centralizacji, delegowania

Bardziej szczegółowo

Wzorce projektowe. dr inż. Marcin Pietroo

Wzorce projektowe. dr inż. Marcin Pietroo Wzorce projektowe dr inż. Marcin Pietroo Iterator czynnościowy wzorzec projektowy (obiektowy), którego celem jest zapewnienie sekwencyjnego dostępu do podobiektów zgrupowanych w większym obiekcie (np.

Bardziej szczegółowo

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

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1) Instrukcja tworzenia aplikacji EE na podstawie aplikacji z dostępem do bazy danych, prezentowanej na zajęciach lab.5 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom. Projektowanie i wdrażanie

Bardziej szczegółowo

Usługa TimerService ejbtimeout() @javax.ejb.timeout

Usługa TimerService ejbtimeout() @javax.ejb.timeout TimerService i JNDI 1. Usługa TimerServiece, interfejsy TimedObject, TimerService, Timer, TimerHandle transakcje, zastosowanie usługi w komponentach EJB, cykl życia EJB, problemy. 2. Zasoby JNDI i wstrzykiwanie,

Bardziej szczegółowo

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

Współbieżność w środowisku Java

Współbieżność w środowisku Java Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych

Bardziej szczegółowo

Projektowanie obiektowe Wzorce projektowe

Projektowanie obiektowe Wzorce projektowe Projektowanie obiektowe Wzorce projektowe Gang of Four Kreacyjne wzorce projektowe (wzorce konstrukcyjne) 1 Roadmap Memento Factory Method Abstract Factory Prototype Builder 2 Wzorce konstrukcyjne wzorce

Bardziej szczegółowo

Algorytmy i Struktury Danych. Anna Paszyńska

Algorytmy i Struktury Danych. Anna Paszyńska Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;

Bardziej szczegółowo

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie 1 czerwca 2009 Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie = bjects = database for objects w pełni obiektowa

Bardziej szczegółowo

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.

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. 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. Projektowanie i wdrażanie systemów informatycznych Przekształcenie

Bardziej szczegółowo

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz Aplikacja internetowa zbudowana w oparciu o środowisko Visual Web Java Server Faces. Zarządzanie obiektami typu SesionBeans, RequestBeen i ApplicationBeans, Laboratorium 1 Wzorce oprogramowania lab1, Okres

Bardziej szczegółowo

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems www.cs.agh.edu.pl/~slawek/zrodla_rmi2.zip Kilka pytań Co mamy? rok 2005-ty, gotową wersję 2 programu NoteBoard.

Bardziej szczegółowo

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

JAX-RS czyli REST w Javie. Adam Kędziora JAX-RS czyli REST w Javie Adam Kędziora Webservice Usługa sieciowa (ang. web service) komponent programowy niezależny od platformy i implementacji, dostarczający określonej funkcjonalności. SOAP,UDDI,XML,WSDL

Bardziej szczegółowo

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1 P d jś i bi kt d b d t ó Podejście obiektowe do budowy systemów rozproszonych Dariusz Wawrzyniak (IIPP) 1 interfejs (w języku Java),wywiedziony idi z Remote obie kt aplikacja klie ncka interfe js serw

Bardziej szczegółowo

Projektowanie Zorientowane na Dziedzinę. ang. Domain Driven Design

Projektowanie Zorientowane na Dziedzinę. ang. Domain Driven Design Projektowanie Zorientowane na Dziedzinę ang. Domain Driven Design 2 Projektowanie Stan posiadania Przypadki użycia Model dziedziny Operacje systemowe Kontrakty dla operacji systemowych Problemy do rozwiązania

Bardziej szczegółowo

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

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska BEAN VALIDATION Waldemar Korłub Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska Bean Validation Uniwersalny mechanizm walidacji danych we wszystkich warstwach aplikacji Warstwa interfejsu,

Bardziej szczegółowo

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

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 Zaawansowane aplikacje internetowe EJB 2 Celem tego laboratorium jest pokazanie, w jaki sposób aplikacje stworzone w różnych technologiach mogą korzystać z funkcjonalności udostępnianej przez komponenty

Bardziej szczegółowo

Klasy i obiekty cz II

Klasy i obiekty cz II Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Klasy i obiekty cz II Hermetyzacja, mutatory, akcesory, ArrayList Rozwijamy aplikację Chcemy, aby obiekty klasy

Bardziej szczegółowo

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

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu

Bardziej szczegółowo

Zastosowanie komponentów EJB typu Session

Zastosowanie komponentów EJB typu Session Zastosowanie komponentów EJB typu Session na podstawie https://docs.oracle.com/javaee/7/jeett.pdf Programowanie komponentowe Lab1 1 1. Refaktoryzacja kodu programu Sklep_6 z lab5, TINT 1.1. Należy wykonać

Bardziej szczegółowo

Wzorce projektowe. dr inż. Marcin Pietroo

Wzorce projektowe. dr inż. Marcin Pietroo Wzorce projektowe dr inż. Marcin Pietroo Wzorce projektowe Wzorzec projektowy (ang. design pattern) w inżynierii oprogramowania, rozwiązanie często pojawiających się, powtarzalnych problemów projektowych.

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe III. Refleksja Małgorzata Prolejko OBI JA16Z03 Plan Klasa Class. Analiza funkcjonalności klasy. Podstawy obsługi wyjątków. Zastosowanie refleksji do analizy obiektów. Wywoływanie

Bardziej szczegółowo

1 Wprowadzenie do J2EE

1 Wprowadzenie do J2EE Wprowadzenie do J2EE 1 Plan prezentacji 2 Wprowadzenie do Java 2 Enterprise Edition Aplikacje J2EE Serwer aplikacji J2EE Główne cele V Szkoły PLOUG - nowe podejścia do konstrukcji aplikacji J2EE Java 2

Bardziej szczegółowo

Projektowanie architektury systemu rozproszonego. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Projektowanie architektury systemu rozproszonego. Jarosław Kuchta Projektowanie Aplikacji Internetowych Projektowanie architektury systemu rozproszonego Jarosław Kuchta Zagadnienia Typy architektury systemu Rozproszone przetwarzanie obiektowe Problemy globalizacji Problemy ochrony Projektowanie architektury

Bardziej szczegółowo

Jarosław Kuchta Projektowanie Aplikacji Internetowych. Projektowanie warstwy danych

Jarosław Kuchta Projektowanie Aplikacji Internetowych. Projektowanie warstwy danych Jarosław Kuchta Projektowanie Aplikacji Internetowych Projektowanie warstwy danych Zagadnienia Sposoby zapisu danych zewnętrznych Odwzorowanie dziedziny problemu w dziedzinę danych Normalizacja relacyjnej

Bardziej szczegółowo

Diagram stanów Laboratorium 9

Diagram stanów Laboratorium 9 Diagram stanów Laboratorium 9 Zofia Kruczkiewicz Zofia Kruczkiewicz lab_inp002017_9 1 Modelowanie zachowania obiektu za pomocą diagramu stanów. Opracowanie diagramu stanów dla obiektu wybranej klasy, reprezentującego

Bardziej szczegółowo

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1) Analiza i projektowanie obiektowe 2016/2017 Wykład 11: Zaawansowane wzorce projektowe (1) Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Wzorce projektowe

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz Budowa prostej aplikacji wielowarstwowej Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz Konfigurowanie edytora programu za pomocą Tools/Options/Editor Konfigurowanie edytora programu za pomocą

Bardziej szczegółowo

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej dr inż. Paweł Czarnul pczarnul@eti.pg.gda.pl Architektury usług internetowych laboratorium

Bardziej szczegółowo

Wprowadzenie do Enterprise JavaBeans 2.0

Wprowadzenie do Enterprise JavaBeans 2.0 71 Wprowadzenie do Enterprise JavaBeans 2.0 Maciej Zakrzewicz Maciej.Zakrzewicz@cs.put.poznan.pl http://www.cs.put.poznan.pl/mzakrzewicz/ Plan rozdziału 72 Wprowadzenie do EJB Rodzaje komponentów Zdalny

Bardziej szczegółowo

Wzorce prezentacji internetowych

Wzorce prezentacji internetowych Wzorce prezentacji internetowych 1. Model kontrolera widoku (Model View Controller). 2. Kontroler strony (Page Controller). 3. Kontroler fasady (Front Controller). 4. Szablon widoku (Template View). 5.

Bardziej szczegółowo

Zastosowanie słuchaczy zdarzeń wg

Zastosowanie słuchaczy zdarzeń wg Zastosowanie słuchaczy zdarzeń wg https://docs.oracle.com/javaee/7/jeett.pdf Technologie internetowe 6 1. Obsługa zdarzeń typu valuechangelistener Rejestracja słuchaczy zdarzeń typu valuechangelistener

Bardziej szczegółowo

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

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin Czym jest Spring Boot? Spring Boot jest szkieletem aplikacji, opiera się o Spring Framework czyli Framework szeroko

Bardziej szczegółowo

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35 Wzorce projektowe cz. II Wzorce projektowe cz. II 1/35 Wzorce projektowe cz. II 2/35 Iterator Przeznaczenie Wzorzec zapewnia sekwencyjny dostęp do elementów obiektu zagregowanego bez ujawniania jego reprezentacji

Bardziej szczegółowo

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

Bardziej szczegółowo

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

Warstwa prezentacji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe. Warstwa prezentacji wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe. 1. Definicja warstwy prezentacji - pięciowarstwowy model logicznego rozdzielania zadań 2. Podstawowe przypadki - analiza

Bardziej szczegółowo

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz Projektowanie oprogramowania Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz 1 Wykonanie czterowarstwowej aplikacji EE z dostępem do bazy danych,

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo

Aplikacja wielowątkowa prosty komunikator

Aplikacja wielowątkowa prosty komunikator Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Testowanie aplikacji Java Servlets

Testowanie aplikacji Java Servlets Borland Developer Days 2004 2-3 czerwca 2004 Testowanie aplikacji Java Servlets Bartosz Walter mailto: Bartek.Walter@man.poznan.pl Agenda Aplikacje Java Servlets TM Jak testować aplikacje internetowe?

Bardziej szczegółowo

Zaawansowane aplikacje internetowe - laboratorium

Zaawansowane aplikacje internetowe - laboratorium Zaawansowane aplikacje internetowe - laboratorium Web Services (część 3). Do wykonania ćwiczeń potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2005. Ponadto wymagany jest

Bardziej szczegółowo

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,

Bardziej szczegółowo

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

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM Cel laboratorium 5 Należy wykonać dwie aplikacje zawierające warstwę integracji

Bardziej szczegółowo