
Prelegent: Adam Warski
Temat prezentacji: Envers - proste wersjonowanie encji
Język: polski
Adam Warski od 3 lat jest współpracownikiem JBossa, gdzie poza projektem Envers, zajmuje się tworzeniem infrastruktury dla portalu JBoss.ORG, systemu JBoss Feeds, oraz innymi mniejszymi projektami (m.in. Shotoku). Jest doktorantem na Uniwersytecie Warszawskim, gdzie zajmuje się specyfikacjami formalnymi, teorią kategorii i teorią typów. Odwiedź stronę Adama.
Abstrakt: Prezentacja będzie podzielona na dwie części. W pierwszej przedstawiony zostanie problem wersjonowania encji. Istnieje parę wzorców projektowych, które umożliwiają przechowywanie historycznych danych [2]. Wzorce te rozwiązują różne problemy - potrzeba wersjonowania pojawia się w paru typach sytuacji. Są również różnice w łatwości implementacji i użycia tych wzorców. Przedstawione zostaną najważniejsze wzorce, ich stopień trudności, zastosowanie oraz główne wady i zalety.
Druga część prezentacji poświęcona będzie projektowi Envers. Jest to biblioteka napisana w Javie, współpracująca z Hibernate [3] i Hibernate Entity Manager, umożliwiająca łatwe wersjonowanie encji za pomocą użycia anotacji @Versioned. Proces zapisywania danych historycznych jest zupełnie niewidoczny dla programisty i odbywa się bez jego interwencji. Nie ma też wpływu na korzystanie z “aktualnych” danych - przebiega to bez żadnych zmian. Do odczytywania danych historycznych służy prosty i przejrzysty interfejs. Dla każdej transakcji, w której zostały zmienione wersjonowane dane, tworzona jest rewizja, podobnie jak w systemie kontroli wersji Subversion [4]. Poza wersjonowaniem podstawowych danych - napisów, liczb, itd., można też wersjonować relacje między encjami. Dzięki temu możemy odtworzyć stan bazy danych z danej rewizji (łącznie ze wszystkimi związkami między encjami). Można też tworzyć zapytania do danych historycznych [5].
Jako przykład zastosowania biblioteki do rozwiązania typowego problemu pokazane zostanie, jak zaimplementować “bi-temporalne” wersjonowanie [6]. Na koniec prelegent przedstawi krótkie podsumowanie głównych cech biblioteki - jej zalet i wad oraz opisze sytuacje, w których biblioteki można użyć; ponieważ jest to implementacja jednego z paru sposobów na rozwiązanie problemu wersjonowania encji, nie zawsze można ją zastosować.
[1] http://www.jboss.org/envers/
[2] http://martinfowler.com/ap2/timeNarrative.html
[3] http://www.hibernate.org/
[4] http://subversion.tigris.org/
[5] http://www.jboss.org/envers/queries.html
[6] http://www.warski.org/blog/?p=14