PAT: persistence aspect

Podobne dokumenty
Aplikacje w środowisku Java

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

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Aplikacje RMI

Wywoływanie metod zdalnych

Programowanie obiektowe

Wywoływanie metod zdalnych

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

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

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

Programowanie obiektowe

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

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

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

Szablony funkcji i klas (templates)

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Metody dostępu do danych

Rozdział 4 KLASY, OBIEKTY, METODY

Deklaracja struktury w C++

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

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

Metody Metody, parametry, zwracanie wartości

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Podstawy Programowania Obiektowego

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

Programowanie obiektowe

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Lista dwukierunkowa - przykład implementacji destruktorów

Wzorce logiki dziedziny

Programowanie obiektowe

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

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Przykład 1 Iteracja 1 tworzenia oprogramowania

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

Języki i metody programowania Java. Wykład 2 (część 2)

Przykład 1 Iteracja 2 tworzenia oprogramowania Diagramy klas i sekwencji:

Zaawansowane programowanie w C++ (PCP)

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Podejście obiektowe do budowy systemów rozproszonych

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Systemy Rozproszone - Ćwiczenie 6

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1 Wprowadzenie do J2EE

Diagramy klas. dr Jarosław Skaruz

Projektowanie algorytmów rekurencyjnych

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wykład 4: Klasy i Metody

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Programowanie Obiektowe Ćwiczenie 4

Prosta książka telefoniczna z wykorzystaniem zapisu do pliku

Aplikacje RMI Lab4

Programowanie obiektowe

Programowanie gier eventy. Dalton & Cartman KNTG Polygon, 21 grudnia 2015 r.

Wykład 6 Dziedziczenie cd., pliki

Laboratorium 8 Diagramy aktywności

Programowanie poprzez testy z wykorzystaniem JUnit

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Przewodnik krok po kroku:

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Programowanie obiektowe

Remote Method Invocation 17 listopada 2010

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Programowanie komponentowe 5

Programowanie obiektowe

Aplikacje w środowisku Java

MAS dr. Inż. Mariusz Trzaska. Realizacja różnych modeli dziedziczenia w obiektowych językach programowania

Zaawansowane aplikacje WWW - laboratorium

1 Atrybuty i metody klasowe

Multimedia JAVA. Historia

Podstawy programowania obiektowego

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Projekt przejściowy 2015/2016 BARTOSZ JABŁOŃSKI, TOMASZ JANICZEK

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe

Podejście obiektowe do budowy systemów rozproszonych

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Wykład 5: Klasy cz. 3

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

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Enkapsulacja, dziedziczenie, polimorfizm

Wprowadzenie do języka Java

Zaawansowane programowanie w języku C++ Klasy w C++

Transkrypt:

PAT: persistence aspect Tomasz Nazar Wrocław, 08.03.2005

Jaki jest cel prezentacji? Zaznajomienie z Prevayler Zaprezentowanie aspektu zagadnienia trwałości W jaki sposób i na ile da się ukryć warstwę danych Pogłębienie wiedzy na temat wykorzystania technik aspektowych

Plan Motto Historia Motywacja do napisania Aplikacja kliencka Prevayler PAT

Motto Simplicity is the key Lubię programować obiektowo Nie lubię powtarzać kodu Lubię mieć krótki kod

Motto Simplicity is the key Lubię programować obiektowo Nie lubię powtarzać kodu Lubię mieć krótki kod

Historia 2002 pierwsza praca, RDBMS 2003 WS, Obiekty, TDD, XP, Prevayler, Ilybra 2004 Siemens, AOSD, PAT, KKIO'04 2005 AOSD'05,...

Motywacja do napisania PAT

Motywacja Frustracja z użyciem dostępnych technik tworzenia warstwy danych dla aplikacji Zbyt dużo czasu poświęcane na realizację niefunkcjonalnych wymagań aplikacji Czas, który możemy zyskać, przeznaczymy na realizację wymagań biznesowych Brak warstwy danych daje prostsze oprogramowanie Prostota = Czas = Pieniądze = :-)

1 krok: Aplikacja Ilybra

System biblioteczny Z perspektywy bibliotekarza: Dodanie książki, nowa klasyfikacja, nowa osoba, edycja książki, ładowanie książki, prolongata, zwrot, uaktualnienie książki, wszystkie książki, przeszukiwanie książek (różne kategorie), anulowanie wypożyczenia, wypożyczenie książki, pokazanie rekordu histori, załadowanie czytelnika, dodanie czytelnika, edycja czytelnika, uaktualnienie czytelnika, wszyscy czytelnicy, wszystkie książki, wielotomowe, logowanie 32 prostych akcji i więcej, 41 obiektów biznesowych..

Przykładowa akcja Przykład 7-6. Implementacja Library public Book lendbook(book book, Reader reader) { book.lend(reader); reader.lend(book); } return book; Przykład 7-9. Wypożyczenie książki czytelnikowi public void lendbookaction(..) { //reader_barcode, book_barcode lent = library.getlentbooks(book_barcode); if (lent) alert("book already lent"); library.lendbook(book_barcode, reader_barcode); } return OK;

2 krok: Prevayler

Prevayler Poszukiwania prostego, szybkiego rozwiązania satysfakcjonującego nasze potrzeby w zakresie pamiętania danych Prevayler Zalety: Szybki start (ang. time to market ), obiektowy, mocna kontrola typów, szybkość działania Wady: Ilość danych, tworzenie transakcji, popularność

Prevayler Korzeń (root) Przykład 5-1. Przykład korzenia public class World { public Departments departments; public Employees employees; /*... */ } Korzeń Obiekty

Prevayler Gdzie trzymane są dane? W pamięci operacyjnej Kopia bezpieczeństwa na dysku Serializacja Zapis danych: Dziennikowanie (ang. journalling) Transakcje Migawka (ang. snapshot) Zapis całości Schemat działania na obiektach...

Prevayler Gdzie trzymane są dane? W pamięci operacyjnej Kopia bezpieczeństwa na dysku Serializacja Zapis danych: Dziennikowanie (ang. journalling) Transakcje Migawka (ang. snapshot) Zapis całości Schemat działania na obiektach...

Obiekty Linia czasu 0.00 7.00...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) 7.00...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) T2.transakcja1(a, b) 7.00...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) T2.transakcja1(a, b) T1.transakcja2(c) 7.00...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) T2.transakcja1(a, b) T1.transakcja2(c) T3.transakcja3(d,...) 7.00...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) T2.transakcja1(a, b) T1.transakcja2(c) T3.transakcja3(d,...)... 7.00...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) T2.transakcja1(a, b) T1.transakcja2(c) T3.transakcja3(d,...)... 7.00 T8.transakcja17(X)...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) T2.transakcja1(a, b) T1.transakcja2(c) T3.transakcja3(d,...)... 7.00 T8.transakcja17(X) T9.transakcja18(X)...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) T2.transakcja1(a, b) T1.transakcja2(c) T3.transakcja3(d,...)... 7.00... T8.transakcja17(X) T9.transakcja18(X)...

Obiekty Linia czasu 0.00 T1.transakcja0(R, a, b) T2.transakcja1(a, b) T1.transakcja2(c) T3.transakcja3(d,...)... 7.00... T8.transakcja17(X) T9.transakcja18(X)......

Transakcje Każda zmiana stanu systemu w transakcji Przykład 5-2. Transakcja realizująca dodanie nowego pracownika. public class AddEmployee extends TransactionWithQuery { private Employee employee; public AddEmployee(Employee employee){ this.employee = employee; } public Object executeandquery(object prevsystem) throws Exception{ World system = (World)prevSystem; /* tutaj umieszczona jest logika biznesowa */ Department department = world.getdepartment("it"); department.add(employee); } } return employee;

3 krok: Programowanie aspektowe

4 krok: PAT

Czym jest warstwa danych? Część oprogramowania zajmująca się zarządzaniem trwałymi danymi w aplikacjach - obsługa systemu baz danych Pobieranie i przeszukiwanie danych Dodawanie nowych danych Usuwanie danych Inicjalizacja i zatrzymanie systemu Ewolucja schematu danych Rozróżnienie danych trwałych i nietrwałych Transakcje

Zasady tworzenia aspektu Jak ma wyglądać kod aplikacji? Wybór języka aspektowego

Jaką bazę wykorzystam? Wykorzystanie cech Prevayler: Przezroczyste: Dodawanie danych Przeszukiwanie, pobieranie danych Usuwanie danych Wymaga kodowania: Transakcje Aspekty nie pomagają: Ewolucja schematu

Co powstało? Nazywa się to: PAT Jest zaimplementowane z użyciem JBossAOP adnotacje w przyszłości AspectJ http://patsystem.sf.net

PAT Jaki kod wyszedł?

Przykład 7-2. PAT - deklaracja obiektu biznesowego /** @@pat.bo */ public class Reader {... } Przykład 7-3. PAT - dostęp do danych public void findsomebookcards() { library = new Library(); bookcards = library.getbookcards(); } for (int i=0; i>bookcards.size(); i++) { bookcard = bookcards.next(); }

Przykład 7-5. PAT - uaktualnianie danych /** @@pat.bo */ public class Book { } /** @@pat.transaction */ public void clearpersondata() { this.persondata = null; } public void changetitleofbookaction(..) { Book book = new Book("Algorytmy"); } book.settitle("algorytmy 2"); book.clearpersondata();

Przykład 7-4. PAT - tworzenie nowych obiektów /** @@pat.root */ public class Library { private List list = new List(); } /** @@pat.transaction */ public void addbook(book book) { list.add(book); } public void addbookaction() { Library library = new Library(); //korzeń Book book = new Book("Algorytmy"); } library.addbook(book)

Dziękuje www.ii.uni.wroc.pl/~/