czwartek, 23 grudnia 2010

Db4o jak zacząć?


W tym poście opowiem jak zacząć swoją przygodę z db4o. Nie będę pisał kolejnego tutoriala na ten temat, gdyż zostało to już niejednokrotnie zrobione. Skupię się raczej na przygotowaniu środowiska, pokazaniu przydatnych narzędzi i odesłaniu do ciekawych artykułów. Zaczynajmy.

Chcąc się bawić z db4o musimy na początek wybrać wersję z której będziemy korzystać. Ja na co dzień korzystam z wersji 7.4 określanej jako Stable. Mamy jeszcze wersje 7.12 (określaną jako Production) i 8.0 (Development). Podstawowe funkcjonalności powinny być takie same, ale z tego co kojarzę to poszczególne wersje różnią się pewnymi bardziej zaawansowanymi mechanizmami.

Chcąc więc skorzystać z db4o należy podpiąć odpowiedniego JAR’a pod projekt. Możemy takowego bezpośrednio ściągnąć ze strony producenta: db4o for Java, version 7.4.155.14653 ZIP W tym pliku, katalogu lib mamy min. dostępne odpowiednie wersje JAR’ów przygotowane dla różnych wersji Javy:

  • db4o-7.4.155.14653-java1.1.jar
  • db4o-7.4.155.14653-java1.2.jar
  • db4o-7.4.155.14653-java5.jar

Ja oczywiście korzystam z wersji dla Javy 5. Jeżeli korzystamy z mavena, to musimy dodać następujący wpis:


  
    db4o
    http://source.db4o.com/maven/
  



  com.db4o
  db4o-java5
  7.4-SNAPSHOT


Teraz już możemy się bawić. Na początek polecam przejście tutoriala: doc\tutorial\db4o-7.4-tutorial.pdf z archiwum ściągniętego wraz z db4o. Pokazuje on za pomocą przykładów funkcjonalności db4o. Nie ma tu jakiś wielkich teorii jak całość działa, tylko raczej ukazanie funkcjonalności za pomocą przykładu i krótkiego komentarza. Budowana jest w nim aplikacja odnosząca się do wyścigów F1 i w kolejnych rozdziałach przedstawia kolejne dostępne funkcjonalności.

W tutorialu tym brakuje pokazanego kodu klasy Util. Musimy więc sami stworzyć sobie taką klasę w naszym projekcie, lub zastąpić wszelkie wywołania Util.DB4OFILENAME nazwą pliku w którym będzie przechowywana nasza baza danych. Ewentualnie skorzystać z kodu dostępnego w tym samym katalogu co tutorial.

Znalazłem nawet niemalże tłumaczenie tego tutoriala na polski. Fakt faktem nie dotyczy on najnowszej wersji, a jedynie 6.3. Kiedyś przeczytałem to całkiem dokładnie i było nie było to najgorsze tłumaczenie. Można się na nim opierać. Czasami są wywoływane w tym „tutorialu" metody, które są obecnie @deprecated, ale poza tym jest całkiem ok. Opisywane tłumaczenie jest zawarte w pracy magisterskiej Pawła Protasia pt. Pomost pomiędzy SBQL a Db4o.

Jeżeli chcielibyśmy stworzyć prostego CRUD’a z wykorzystaniem db4o i JSP polecam artykuł z 8mego numeru Java exPress  pt.: DB4O - Obiektowa baza danych. Autorem artykułu jest Paweł Cegła, który również na swoim blogu pisze o db4o.

To tyle na początek jeśli chodzi o chęć zrozumienia działania samej bazy db4o. Chcąc tworzyć już bardziej skomplikowane, wielowątkowe aplikacje, powinniśmy zapoznać się z klasą Db4oUtil. Pierwszy raz znalazłem ją na blogu Space Program we wpisie: Db4oUtil (aka. The Easiest Way to Get Started With Db4o). Kopia tej klasy (troszkę zmodyfikowana) znajduje się również na stronie db4o: Db4oUtil (aka. The Easiest Way to Get Started With Db4o). Podaje obydwa linki, gdyż jakiś czas temu strona db4o przechodziła renowacje i wówczas wiele linków nie działało.

Db4oUtil jest thread safe i proste w użyciu. Ja akurat zazwyczaj korzystam ze zmodyfikowanej przez mnie wersji tego pliku w zależności od aktualnych potrzeb projektowych. Schemat użytkowania jest podany w przytoczonych artykułach.

Mamy jeszcze do dyspozycji oczywiście dokumentację javadoc. Miejscami nie jest ona „wylewna”, ale na pewno warto ją podpiąć pod ulubione IDE. Jest jeszcze Reference Documentation (doc\reference\db4o-reference-java.pdf), ale to już jest ponad 1000 stron w pdf’ie i początkowo odradzam. Dopiero jak czegoś nie znajdziemy w tutorialu, ani w javadoc to można tego szukać w dokumentacji referencyjnej.

Na koniec chciałbym polecić narzędzie ObjectManagerEnterprise (OME). Jest to aplikacja służąca do podglądu bazy db4o (nawet jak nie wiemy jakie klasy tam siedzą). Narzędzie jest dystrybuowane razem z biblioteką db4o. Działa ono jako wtyczka do Visual Studio (w przypadku gdy korzystamy z wersji db4o dla C#) lub Eclipse (w przypadku gdy korzystamy z wersji Javowej). Jest jeszcze rozszerzenie dla Netbeans’a: db4o-netbeans, ale jest ono już nie rozwijane od 3ch lat i z nowym NB nie współpracuje (a szkoda).

OME wywodzi się bezpośrednio z projektu db4o Object Manager działającego jako aplikacja standalone. Jednak i ten projekt nie jest już rozwijany i nie wspiera nowszych wersji db4o.

Jeszcze mogę polecić własną prezentację pt.: Inicjatywa NoSQL na przykładzie db4o, którą miałem ostatnio okazję prezentować w ramach WrocJUG. Więcej o samej prezentacji w poprzednim wpisie: Wrażenia po pierwszej mojej prezentacji w ramach Wrocław Java User Group.

To chyba na tyle co mógłbym polecić na początek, jeśli ktoś chciałby się pobawić db4o. Wszelkie komentarze z interesującymi linkami na temat db4o mile widziane.

sobota, 18 grudnia 2010

Wrażenia po pierwszej mojej prezentacji w ramach Wrocław Java User Group


We wrotek (14.12.2010) miałem przyjemność prowadzić prezentację w ramach Wrocław Java User Group (WrocJUG). Było to moje pierwsze wystąpienie na tym poziomie trudności. Wielokrotnie prowadziłem prezentacje w ramach koła naukowego ISA^2 czy PWrJUG, ale na WrocJUG jest trochę inaczej. O ile studenci w miarę wierzą w to co się do nich mówi, to na WrocJUG padają już trudne pytania i byle odpowiedź jest tu niewystarczająca. Tutaj trzeba mieć większą wiedzę i mocne argumenty, aby przekonać do siebie słuchaczy.

Mój temat prezentacji to: Inicjatywa NoSQL na przykładzie db4oDb4o zajmuję się już od jakiegoś czasu, a zaczynałem od studenckiego projektu, później była magisterka i kilka małych projekcików dla własnych celów. O rozwiązaniach NoSQL miałem okazję trochę posłuchać w ramach polskich konferencji. Prezentacją chciałem trochę przybliżyć i rozpropagować te obydwie rzeczy we Wrocławiu.

Do samej prezentacji przygotowywałem się dość długi czas. Już podczas wakacji miałem pierwsze pomysły, jakie triki mogę wykorzystać w prezentacji, aby widownię trochę rozbawić i zmusić do dyskusji. Samą prelekcję musiałem trochę odwlec w czasie, gdyż chciałem się najpierw obronić, a dopiero potem przemówić na WrocJUG. Jak już zgłosiłem gotowość do prezentowania, to trzeba było jeszcze chwilę poczekać na wolną salę (spotkania nie są regularne, więc nie mamy jej na stałe zarezerwowanej).

Jak poszła prezentacja? Po prelekcji zgarnąłem kilka pozytywnych opinii, z czego się cieszę. Zależało mi na tym, aby zmusić widownię do dyskusji, co mi się udało. Padało tyle pytań, że całe wystąpienie przeciągnęło się do 2 godzin i 15 minut! Udało mi się ponadto poprowadzić prezentację na luzie i sala często się śmiała.

Czy udało mi się przekonać uczestników do korzystania z db4o? Chyba nie do końca. Jeżeli przedstawił bym produkt, który ma funkcjonalność zbliżoną do obecnych komercyjnych, relacyjnych baz danych, to wtedy może tak. Db4o jednak ma troszkę inne przeznaczenie (małe i średnie projekty, aplikacje standalone) niż duże relacyjne kombajny, przechowujące ogromne ilości danych.

Podczas prezentacji dało się odczuć, jak bardzo jesteśmy zakorzenieni w relacyjnym modelu danych i jak ciężko jest nam się odnaleźć w nowym środowisku. Znamy bardzo dobrze programowanie obiektowe, ale ciężko nam jest sobie wyobrazić, aby przechowywać dane w postaci obiektów. Bardzo też się przyzwyczailiśmy do innych możliwości jakie oferuje nam relacyjna baza danych i nie chcemy z nich tak łatwo rezygnować.

Uwagi jakie zebrałem na temat samej prezentacji:

  • Nie wszystko było czytelne na slajdach, np. czarny tekst na czerwonym tle na jednym z obrazków. Wynikało to trochę z wypalenia się lampy rzutnika. Z drugiej strony chciałem zachować kolorystyke stosowaną w dokumentacji db4o.
  • Nie zawsze udawało mi się ładnie złamać linię kodu na slajdach. No niestety miałem trochę „tasiemcowate” warunki w if-ach, a nie chciałem czcionki w kodzie pomniejszać, ze względu na pogorszenie widoczności.
  • Ładniej również kod uruchamiany można było dopracować, np. nie tworzyć metod statycznych. Wynikło to trochę z mojego lenistwa, gdyż chciałem aby wszystko co ciekawe w danym przykładzie, działo się w metodzie main(). Niektórzy jednak oceniają programistę po jego kodzie i niezaspecjalnie na tym polu wypadłem. Trzeba się poprawić na przyszłość! Na przykład zamiast pokazywać kolejne możliwości w metodzie main(), można przygotować testy uczące (chyba tak to się nazywa). Chodzi mi o testy, które piszemy dla siebie, gdy chcemy poznać działanie nowej biblioteki. W ten sposób sprawdzamy, czy dobrze zrozumieliśmy dokumentację.
  • Zamiast używać SVN’a można by kopiować odpowiednie pliki projektów z uprzednio przygotowanych katalogów. Nie chciałem tworzyć kodu na żywo, gdyż bardzo dobrze wiem, że to ciężkie zajęcie pisać kod i jednocześnie opowiadać o nim, a najczęściej i tak wychodzi, że o czymś zapominamy i nie działa. Zaczyna się wtedy desperackie poszukiwanie przyczyny, a publika się zaczyna nudzić. Dlatego postanowiłem skorzystać z SVN’a i przełączać się pomiędzy kolejnymi rewizjami kodu. Z widowni słyszałem szmery, że to fajny pomysł, ale rzeczywiście kopiowanie pliku mogło by być trochę szybsze.
  • Mało wiedziałem o komercyjnym zastosowaniu db4o i jakie sprawia problemy. No cóż nie mam komercyjnego doświadczenia z db4o, ani informacji jak to się sprawdza na produkcji.
  • Odpalanie prostych przykładów kodu nie zawsze jest potrzebne.
  • Warto zainstalować program typu ZoomIt, aby jakby coś nie było czytelne, można było powiększyć ekran.
  • Brakowało mi trochę takiej aplikacji, która wyświetlała by slajdy w trybie prezentacji. Tzn. abym na ekranie laptopa widział aktualny slajd i następny, a na rzutniku był tylko aktualny slajd wyświetlany. Z tego co mi wiadomo to pakiet MS Office i OpenOffice mają taką funkcjonalność, ale niestety one nie obsługują pdf'ów. Jakby ktoś znał taką aplikację proszę o info.

Więcej uwag nie pamiętam, jak mi się cos przypomni to dopiszę :)