1 / 44

PAT: Persistent Applications Toolkit

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 http://patsystem.sf.net/

santa
Download Presentation

PAT: Persistent Applications Toolkit

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Kod źródłowy • 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. Programowanie aspektowe • Magia • Uzupełnia programowanie obiektowe • Polepsza modularyzację • Rozdziela zagadnienia • Ala triggery, lecz odnośnie kodu Javy

  17. remoting persistence Forum Users Topics etc.. asynchronous invocation Core + usługi (aspekty)

  18. remoting persistence Forum Users Topics etc.. asynchronous invocation Core + usługi (aspekty)

  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: • co Aspect.trace() • kiedy execution • 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. 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

  30. PAT

  31. 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, ...

  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?

More Related