Archive

Archive for February, 2007

Sekwencje EJB3 na podwieczorek

February 2nd, 2007 No comments
Bawię się EJB3 i jestem pod wrażeniem tego, jak poradzono sobie z problemem sekwencji (implementacja Toplink). Sekwencja, to coś co nadaje kolejne numery rekordom w tabeli w bazie danych. Każda baza danych ma potrafi korzystać z sekwencji, niestety zwykle robi to na swój własny sposób. Implementacja Java Persistance Api – która jest abstrakcyjną warstwą ponad bazą danych musi sobie z tym jakoś poradzić. EJB3 pozwala nam korzystać z sekwencji javax.persistence.GenerationType: IDENTITY, SEQUENCE, TABLE lub AUTO. Mnie zafascynowało javax.persistence.GenerationType.TABLE. Jak to działa? W bazie danych tworzona jest tabelka, która przetrzymuje ostatnią wartość, jaka była użyta przez sekwencję. Ale przecież to będzie wolno działać – pomyślałem sobie gdy pierwszy raz o tym czytałem – dla każdego INSERT trzeba będzie robić dodatkowo UPDATE. I spojrzałem na logi bazy danych w poszukiwaniu marnotrawienia zasobów. Jakież było moje zdziwienie, gdy nie znalazłem tam logów z operacji UPDATE. Jak to? Otóż aplikacja JEE zakłada, że jest sobie jedyną aplikacją działającą na bazie danych. Dlatego aktualną wartość sekwencji pamięta serwer aplikacji. Tymczasem rekord w bazie danych pamiętający ostatnią wartość sekwencji aktualizowany jest co jakiś czas. Dzięki temu, w przypadku restartu serwera aplikacji znana będzie nowa wartość sekwencji. Jakie to jest banalne, jakie piękne i jakie szybkie za razem. Demonstruje to możliwości stojące przed technologią JEE.
Categories: JPA Tags: