Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałMałgorzata Buchowski Został zmieniony 10 lat temu
1
PAT: Persistent Applications Toolkit Aplikacje bazodanowe bez bazy danych Tomasz Nazar
2
Plan Czym jest? Czym nie jest? Geneza i potrzeba Kod źródłowy Programowanie aspektowe Baza danych: Prevayler PAT
3
Czym jest? Platforma (framework), ale lekka http://patsystem.sf.net/ Ułatwia zapisywanie danych –Obiektowa Przyśpiesza tworzenie aplikacji Konieczna dodatkowa biblioteka Zmiana procesu kompilacji (Ant) Konieczny RAM
4
Czym nie jest? Nie pozwoli udostępnić danych bazy danych na zewnątrz (RDBMS) Nie ma ładnych narzędzi do podglądu danych Nie wspiera 2PC Rollback (ver. 1) GUI tworzymy samemu Nie będzie SQL
5
Geneza i potrzeba 2003: Pi –Problem z RDBMS –Prevayler Nadal pisanie kodu 2004: AOP –Programowanie aspektowe –Powstanie PAT 2005: Ax –Pierwsze wdrożenie
6
Geneza i potrzeba Ewolucja i elastyczność –Łatwe testy Prostota –Przejrzysta warstwa danych, POJO –Ładny kod; refaktoryzacja Wydajność –Szybkość przeszukiwania danych
7
Kod źródłowy
8
Przykładowa klasa Forum realizująca jakąś logikę biznesową –Nowa wiadomość –Wyszukiwanie wiadomości
9
public class Forum { public Forum() { }
10
public class Forum { private List messages; public Forum() { }
11
public class Forum { private List messages; public Forum() { this.messages = new ArrayList(); }
12
public class Forum { private List messages; public Forum() { this.messages = new ArrayList(); } public void newMessage(String message) { messages.add(new Message(message)); }
13
public class Forum { private List messages; public Forum() { this.messages = new ArrayList(); } public void newMessage(String message) { messages.add(new Message(message)); } public String findMessageContaining(String substring) { for (Message message: messages.iterator()) if (message.matches(substring)) return message; }
14
@pat.bo public class Forum { private List messages; public Forum() { this.messages = new ArrayList(); } @pat.transaction public void newMessage(String message) { messages.add(new Message(message)); } public String findMessageContaining(String substring) { for (Message message: messages.iterator()) if (message.matches(substring)) return message; }
15
Programowanie aspektowe
16
Magia Uzupełnia programowanie obiektowe Polepsza modularyzację Rozdziela zagadnienia Ala triggery, lecz odnośnie kodu Javy
17
Core + usługi (aspekty) Forum Users Topics persistence asynchronous invocation remoting etc..
18
Core + usługi (aspekty) Forum Users Topics persistence asynchronous invocation remoting etc..
19
Aspekt: tracing To także usługa –Przeplata wiele miejsc w kodzie –Jest ortogonalna do logiki biznesowej –Może być, lub nie być –Może być różnie zaimplementowana
20
Aspekt: tracing public ActionForward execute(...) { log.debug(„Starting loading data..”); List items = ItemsDao.loadAllItems(); //.... }
21
Aspekt: tracing public ActionForward execute(...) { List items = ItemsDao.loadAllItems(); //.... }
22
Aspekt? Jednostka, która definiuje: –coAspect.trace() –kiedyexecution –gdzie * *Action->execute(..) @marker->execute(..) ma być uruchomione
23
Aspekty W takim razie kilka przykładów aspektów....
24
Aspekt: toString() * -> toString(); public String toString() { return ToStringBuilder.reflectionToString( this, ToStringStyle.MULTI_LINE_STYLE ); }
25
Aspekt: onLoad(); dependency injection @InitializeMe Public class Car { private Garage garage; } Aspect.init(Object o) { o.garage = Globals.PUBLIC_GARAGE; }
26
Aspekt: autoryzacja Dostęp do metod klasy, atrybutów,... Nie zmieniamy kodów źródłowych Można w przyszłości wymienić system autoryzacji
27
Kto używa aspektów Spring JBoss AS Aplikacje użytkowe
28
Prevayler
29
Baza danych W pamięci RAM Logi transakcji na dysku twardym Szybka Prosta do obsłużenia Dla Javy ma jeden problem: kod transakcji
30
PAT
31
Na początku miał tylko uprościć Prevayler Okazał się platformą do szybkiego tworzenia aplikacji: –Aplikacje biznesowe –Szybkie prototypowanie Może działać razem z Tomcat, Struts, Ajax, Swing, Java5,...
32
PAT: Jak? pat-base-?.jar pat-prevayler-?.jar pat-aop-config-*.jar @pat.bo, @pat.transaction, @pat.root Kompilacja: statyczna, dynamiczna (Ant)
33
PAT: Klasy biznesowe Forum.java –Metody –Atrybuty
34
PAT: Metody biznesowe Metody: –Biznesowe, uaktualniające dane Mają „przetrwać” –Przeszukujące dane Mają być szybkie
35
PAT: Adnotacje Klasa biznesowa: @pat.bo Metoda biznesowa @pat.transaction
36
PAT: Wymóg korzenia
37
PAT: Pobieranie danych Zwykła iteracja / Nawigowanie –Java5 XPath JoSQL
38
PAT: Zapisywanie danych Tylko @pat.transaction na metodach –Aspekt, refleksja, podmiana PersistableAspect.takeSnapshot() –Raz co jakiś czas
39
Kiedy wykorzystywać Prototypowanie Elastyczność Prostota...
40
Prototypowanie public... execute(.... { List myListA = world.getEmployees(); List myListB = EmployeesDao.findAll(); List myListC = JDBCTemplate.findAll(); List myListD = SQL.execute(„SELECT * FROM...”) }
41
PAT: Zbiór aspektów RootCreation BusinessObjectCreation TopBusinessObjectCreation CommandInterceptor Identifiable PersistableAspect...
42
Co dalej po PAT? Zbiór aspektów: –Stringable –Struts (NotNull, Tracer) Prails –Generowanie całych aplikacji Wejście: Klasy biznesowe Wyjście: Gotowa aplikacja webowa
43
Czym jest? Platforma (framework), ale lekka Ułatwia zapisywanie danych Przyśpiesza tworzenie aplikacji Konieczna dodatkowa biblioteka Zmiana procesu kompilacji (Ant) Konieczny RAM Czym nie jest?
44
Dziękuję Pokaz praktyczny?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.