PAT: Persistent Applications Toolkit Aplikacje bazodanowe bez bazy danych Tomasz Nazar
Plan Czym jest? Czym nie jest? Geneza i potrzeba Kod źródłowy Programowanie aspektowe Baza danych: Prevayler PAT
Czym jest? Platforma (framework), ale lekka Ułatwia zapisywanie danych –Obiektowa Przyśpiesza tworzenie aplikacji Konieczna dodatkowa biblioteka Zmiana procesu kompilacji (Ant) Konieczny RAM
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
Geneza i potrzeba 2003: Pi –Problem z RDBMS –Prevayler Nadal pisanie kodu 2004: AOP –Programowanie aspektowe –Powstanie PAT 2005: Ax –Pierwsze wdrożenie
Geneza i potrzeba Ewolucja i elastyczność –Łatwe testy Prostota –Przejrzysta warstwa danych, POJO –Ładny kod; refaktoryzacja Wydajność –Szybkość przeszukiwania danych
Kod źródłowy
Przykładowa klasa Forum realizująca jakąś logikę biznesową –Nowa wiadomość –Wyszukiwanie wiadomości
public class Forum { public Forum() { }
public class Forum { private List messages; public Forum() { }
public class Forum { private List messages; public Forum() { this.messages = new ArrayList(); }
public class Forum { private List messages; public Forum() { this.messages = new ArrayList(); } public void newMessage(String message) { messages.add(new Message(message)); }
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; }
@pat.bo 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; }
Programowanie aspektowe
Magia Uzupełnia programowanie obiektowe Polepsza modularyzację Rozdziela zagadnienia Ala triggery, lecz odnośnie kodu Javy
Core + usługi (aspekty) Forum Users Topics persistence asynchronous invocation remoting etc..
Core + usługi (aspekty) Forum Users Topics persistence asynchronous invocation remoting etc..
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
Aspekt: tracing public ActionForward execute(...) { log.debug(„Starting loading data..”); List items = ItemsDao.loadAllItems(); //.... }
Aspekt: tracing public ActionForward execute(...) { List items = ItemsDao.loadAllItems(); //.... }
Aspekt? Jednostka, która definiuje: –coAspect.trace() –kiedyexecution –gdzie * ma być uruchomione
Aspekty W takim razie kilka przykładów aspektów....
Aspekt: toString() * -> toString(); public String toString() { return ToStringBuilder.reflectionToString( this, ToStringStyle.MULTI_LINE_STYLE ); }
Aspekt: onLoad(); dependency Public class Car { private Garage garage; } Aspect.init(Object o) { o.garage = Globals.PUBLIC_GARAGE; }
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
Kto używa aspektów Spring JBoss AS Aplikacje użytkowe
Prevayler
Baza danych W pamięci RAM Logi transakcji na dysku twardym Szybka Prosta do obsłużenia Dla Javy ma jeden problem: kod transakcji
PAT
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,...
PAT: Jak? pat-base-?.jar @pat.root Kompilacja: statyczna, dynamiczna (Ant)
PAT: Klasy biznesowe Forum.java –Metody –Atrybuty
PAT: Metody biznesowe Metody: –Biznesowe, uaktualniające dane Mają „przetrwać” –Przeszukujące dane Mają być szybkie
PAT: Adnotacje Klasa Metoda
PAT: Wymóg korzenia
PAT: Pobieranie danych Zwykła iteracja / Nawigowanie –Java5 XPath JoSQL
PAT: Zapisywanie danych na metodach –Aspekt, refleksja, podmiana PersistableAspect.takeSnapshot() –Raz co jakiś czas
Kiedy wykorzystywać Prototypowanie Elastyczność Prostota...
Prototypowanie public... execute(.... { List myListA = world.getEmployees(); List myListB = EmployeesDao.findAll(); List myListC = JDBCTemplate.findAll(); List myListD = SQL.execute(„SELECT * FROM...”) }
PAT: Zbiór aspektów RootCreation BusinessObjectCreation TopBusinessObjectCreation CommandInterceptor Identifiable PersistableAspect...
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
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?
Dziękuję Pokaz praktyczny?