Projekt i implementacja modułu encyklopedycznego
Transkrypt
Projekt i implementacja modułu encyklopedycznego
Państwowa Wyższa Szkoła Zawodowa w Tarnowie Instytut Politechniczny Kierunek: INFORMATYKA Specjalność: INFORMATYKA STOSOWANA PRACA INŻYNIERSKA Tytuł pracy: Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Autor: Mateusz Oślizło Opiekun pracy: dr inż. Robert Wielgat Tarnów, 2009 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Pragnę złożyć serdeczne podziękowania na ręce Panów dra inż. Roberta Wielgata oraz mgra inż. Tomasza Potempy za udzieloną pomoc i cenne rady, które przyczyniły się do powstania niniejszej pracy. Pragnę również podziękować Panu Pawłowi Świętojańskiemu za nieocenione sugestie przy pisaniu pracy. 2 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Spis treści I. Wstęp ........................................................................................................................ 4 Cel pracy ....................................................................................................................... 5 Zawartość pracy............................................................................................................ 6 II. Specyfikacja wymagań ............................................................................................. 7 III. Wykorzystane technologie..................................................................................... 16 1. PostgreSQL......................................................................................................... 16 2. Java ..................................................................................................................... 17 3. Spring Framework .............................................................................................. 17 4. Java Server Faces................................................................................................ 18 5. Subversion .......................................................................................................... 19 IV. Baza danych ........................................................................................................... 20 1. Opis relacji w bazie danych ................................................................................ 22 2. Opis encji ............................................................................................................ 23 3. Kod SQL ............................................................................................................. 35 V. Opis aplikacji .......................................................................................................... 49 1. Struktura programu ............................................................................................. 49 2. Konfiguracja ....................................................................................................... 49 3. Dostęp do danych................................................................................................ 51 4. Klasy serwisowe ................................................................................................. 52 5. Interfejs użytkownika ......................................................................................... 52 VI. Podsumowanie ....................................................................................................... 55 VII. Bibliografia ............................................................................................................ 56 Dodatek: Proces instalacji i uruchomienia...................................................................... 57 1. Instalacja PostgreSQL......................................................................................... 57 2. Utworzenie bazy danych dla aplikacji ................................................................ 57 3. Instalacja Apache Tomcat i uruchomienie aplikacji........................................... 59 3 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego I. Wstęp Ptaki są bardzo ważnym składnikiem otaczającego nas środowiska. Stosunek człowieka do tej najbardziej zróżnicowanej gromady kręgowców lądowych zmieniał się w ciągu wieków i ciągle jest dość złożony. Pierwotnie ptaki stanowiły dla niego jedno ze źródeł stosunkowo łatwo dostępnego pokarmu (niektóre z gatunków nieustannie mają istotne znaczenie gospodarcze). W chwili obecnej obserwujemy wzrost kulturotwórczej roli ptaków dzięki wrażeniom estetycznym doznawanym podczas ich obserwowania, słuchania śpiewu, czy też podziwiania zachowań godowych. U wielu osób hobbystyczne zainteresowanie ptakami ewoluowało w kierunku zainteresowań naukowych. Wynikiem takich działań bywają niezwykle cenne materiały badawcze. Między innymi z tych względów znaczenie ornitologii w naukach biologicznych, szczególnie w ekologii i etologii cały czas stopniowo wzrasta. Wyniki obserwacji ornitologicznych wykorzystywane są w dużym stopniu do celów bioindykacji, czyli śledzenia wpływu niekorzystnych zmian środowiska na żywe organizmy oraz określania ich reakcji na te zmiany, które wynikają z niszczycielskiej działalności gospodarczej człowieka. Regionalne badania nad ptakami, zwłaszcza dostarczające wskaźników liczbowych, pozwalają również określić stopień degradacji środowiska oraz znaczenie w przyrodzie określonych środowisk, niezbędnych dla utrzymania różnych gatunków oraz zachowania ich puli genetycznej. Powszechnie wiadomo, że zmiany, jakie człowiek wywołał w prawie wszystkich środowiskach na świecie, spowodowały pogorszenie warunków życia wielu gatunków ptaków. W związku z tym znalazły się one w Czerwonej Księdze opracowanej pod opieką Międzynarodowej Unii Ochrony Przyrody i Jej Zasobów (IUCN – International Union for Conserwation of Nature and Natural Resources). Księga ta zawiera listę gatunków roślin i zwierząt, których istnienie na świecie jest zagrożone. Ponadto nad ochroną ptaków i regulacją użytkowania ich populacji czuwa również prawo łowieckie i ewentualnie inne akty prawne poszczególnych państw. Określenie warunków umożliwiających ochronę zagrożonych gatunków jest jednym z głównych zadań współczesnej ornitologii, a od jego realizacji zależy byt wielu 4 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego osobników. Możliwości działania pojedynczych osób w ochronie ptaków są przeważnie niewielkie i ograniczają się do wywieszania skrzynek lęgowych, zimowego dokarmiania i ewentualnie propagowania idei ochrony przyrody w społeczeństwie. Bardziej efektywne zabiegi, polegające głównie na ochronie środowiska ptaków, pozostają w gestii i możliwościach państwa lub odpowiednich organizacji społecznych. Przykładem takiego działania są prace prowadzone przez Małopolskie Towarzystwo Ornitologiczne na terenie województw: małopolskiego, podkarpackiego, świętokrzyskiego i wschodniej części śląskiego. Obejmują one obszar około 60 000 km2 i polegają na badaniu rozmieszczenia, biologii oraz aktualnych trendów liczebności. Cel pracy W okresach: zimowym, przelotów i lęgowym członkowie Małopolskiego Towarzystwa Ornitologicznego prowadzą akcje obserwacji składu gatunkowego oraz rozmieszczenia i liczebności ptaków. W wolne dni przypadające najbliżej środka miesiąca dokonywana jest penetracja odcinków rzek, zbiorników wodnych, wysypisk śmieci i innych miejsc, w których mogą znajdować się ptaki. Każdy uczestnik badania wypełnia tzw. karty obserwacji, które po przesłaniu do Towarzystwa stanowią cenne źródło danych. W obecnej chwili cały przepływ informacji odbywa się za pomocą papierowych formularzy, które podlegają sprawdzeniu i weryfikacji przez ekspertów. Na ich podstawie powstają zarówno raporty, statystyki, jak i opracowania książkowe w formie atlasów. Taki sposób zbierania i przetwarzania informacji jest obecnie wysoce nieefektywny, czasochłonny i dość kosztowny. Aby ułatwić i usprawnić prace Towarzystwa, zdecydowano się na stworzenie komputerowego systemu, dzięki któremu dotychczasowa „papierowa” forma zbierania, przesyłania i przetwarzania danych zostanie zastąpione przez o wiele wygodniejszą i bardziej efektywną formę elektroniczną. Niniejsza praca dyplomowa jest częścią projektu mającego na celu stworzenie portalu, którego główną funkcją ma być zbieranie danych z wypraw terenowych. Tą część opracowali dyplomanci Grzegorz Madeja i Paweł Gładysz w ramach pracy 5 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego dyplomowej pt. „Projekt i implementacja modułu zbierania danych obserwacyjnych systemu ornitologicznego”. Moduł encyklopedyczny – opisany w niniejszej pracy – ma na celu dostarczanie szczegółowych informacji na temat występujących w Polsce i na świecie gatunków ptaków, wraz z charakterystyką każdego gatunku. Są to ogólnodostępne, ustrukturyzowane informacje, których źródło stanowią przede wszystkim książkowe wydania atlasów. Na rynku dostępne są też nieliczne wydawnictwa multimedialne, jednak najlepsze z nich są aplikacjami obcojęzycznymi – co bywa uciążliwe dla docelowych użytkowników. Stąd pomysł zaprojektowania i wykonania jednolitego systemu pełniącego wyżej wymienione funkcje, w którym moduł encyklopedyczny będzie pomocnym źródłem wiadomości dla osób wprowadzających dane zebrane w czasie wypraw terenowych. Zawartość pracy Praca została podzielona na pięć rozdziałów. Najważniejsze spośród nich to: drugi, czwarty, oraz piąty. Rozdział drugi przedstawia dokładną specyfikację wymagań dotyczącą informacji przechowywanych przez encyklopedyczną część bazy danych. W rozdziale czwartym znajdują się: diagram ERD encyklopedycznej części bazy danych, a także opis encji i relacji. W rozdziale piątym omówiono strukturę aplikacji, oraz scharakteryzowano każdy z modułów. Pozostałe rozdziały to: opis wykorzystanych technologii, podsumowanie (w którym zostały umieszczone informacje na temat tego, co udało się zrealizować w trakcie tworzenia systemu), oraz bibliografia zawierająca publikacje z jakich korzystano pisząc niniejszą pracę. 6 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego II. Specyfikacja wymagań Projekt aplikacji przewiduje, że część encyklopedyczna będzie katalogować i przechowywać następujące informacje: 1. Opis gatunku ptaka; 2. Średnia wielkość osobnika [cm]; 3. Waga [g]; • Samica (minimalna, maksymalna); • Samiec (minimalna, maksymalna) 4. Rozpiętość skrzydeł [mm]: • Samica (minimalna, maksymalna); • Samiec (minimalna, maksymalna); 5. Średnia długość życia [rok]; 6. Wygląd: • Rycina, przykładowe zdjęcie(a), opis: o Osobnik dorosły: Samiec; Samica; o Osobnik immaturalny: młodego Samiec; Samica; Osobnik juwenilny; Podlot; Pisklę; Jaja/jaj; Gniazdo; Pióro: Puchowe; Pokrywa; Lotka; Sterówka; Pudrowe; 7 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego 7. Sylwetka; • Widok „z dołu”; • Widok „z boku”; 8. Cechy anatomiczne • Kolory części ciała i upierzenia: o dziób o kantarek o pióra nosowe o czoło o obrączka powiekowa o obrączka oczna o ciemię o pokrywy uszne o potylica o kark o grzbiet o barkówki o duże pokrywy o lotki 3. rzędu o lotki 2. rzędu o kuper o lotki 1. rzędu o pokrywy nadogonowe o ogon=sterówki o pokrywy podogonowe o podogonie o podbrzusze o staw skokowy o stopa o skok o brzuch o pokrywy 1. rzędu o bok o skrzydełko 8 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego o średnie pokrywy o małe pokrywy o pierś o szyja o pole przyżuchwowe o gardło o podbródek • części pióra o dudka o stosina o chorągiewka zewnętrzna o chorągiewka wewnętrzna o emarginacja o wycięcie • wzory na upierzeniu o prążkowanie o plamkowanie o kreskowanie o półobroża o obroża o śliniak o pasek podbródkowy o pasek przyżuchwowy o pasek policzkowy o pasek oczny o obrączka oczna o środkowy pasek ciemieniowy o boczny pasek ciemieniowy o brew o plamka uszna o policzek o paski skrzydłowe o wstawka o pasek przedkońcowy 9 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego o pasek końcowy Słownik kolorów: - Biel - Czerń - Odcienie szarości - Odcienie brązu - Odcienie czerwieni - Odcienie różu - Odcienie fioletu - Odcienie niebieskiego - Odcienie pomarańczowego - Odcienie zieleni - Odcienie żółci 9. Charakterystyczne cechy zachowania (np. schodzenie głową w dół pnia drzewa); 10. Tryb życia: • Osiadły; • Wędrowny; • Częściowo osiadły; • Częściowo wędrowny; • Koczujący; 11. Status w Polsce: • Lęgowość: o Lęgowy (regularnie); o Lęgowy lokalnie lub sporadycznie; o Nielęgowy; • Forma występowania (najwyższa kategoria): o Gnieżdżący się; o Przelotny; o Zalatujący (regularnie); o Zalatujący sporadycznie; • Zimowanie: o Zimujący regularnie; o Zimujący sporadycznie lub nielicznie; 10 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego o Niezimujący; • Inwazyjny (TAK/NIE); 12. Terminy migracji/przelotów; • Wiosennych (data początkowa, data końcowa); • Jesiennych (data początkowa, data końcowa); 13. Sposób odżywiania się: • Drapieżnik; • Owadożerny; • Ziarnojad; • Owocożerny; • Wszystkożerny; 14. Pożywienie: • Kręgowce: o Ryby; o Płazy; Kijanki; o Gady; o Ptaki: Wodne; Dorosłe Immaturalne; Juwenilne; Pisklęta; Lądowe; Dorosłe Immaturalne; Juwenilne; Pisklęta; Jaja; o Ssaki; Ssaki lądowe; Gryzonie; Ssaki wodne; 11 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego • Bezkręgowce o Pajęczaki; o Skorupiaki; o Mięczaki: Głowonogi; Ślimaki; o Owady: Owady wodne; Owady lądowe; Chrząszcze; Mrówki; Osy, pszczoły, trzmiele; Ksylofagi (drewnojady); Saproksylity (preferują/wymagają martwego drewna jako środowiska lub pożywienia); Larwy owadów: Wodnych; Lądowych; o Pierścienice (np. dżdżownica); • Wieloszczety; Plankton: o Fitoplankton; o Zooplankton; • Rośliny: o Wodne; Wodorosty; Nasiona; Korzonki; Liście; Pąki; Kwiaty; Pędy; o Lądowe; 12 Pąki; Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Pędy; Kwiaty; Jagody; Owoce; Trawy Nasiona; Korzonki; Zboża; Liście; Igły; • Odpady; • Odchody; 15. Rodzaje wydawanych dźwięków (świergotanie, trelowanie, ćwierkotanie, klangor, bulgotanie, bełkotanie, syczenie, kukanie, chrapanie, czuszykanie, czyrykanie, klapanie, korkowanie, klaskanie, kokanie, krechtanie, krektanie, pianie, czyhitanie, szlifowanie, świstanie, glokanie, kwoktanie, kwokanie, skrzekotanie, telękanie); 16. Krótka biologia gatunku. • Średnia wielkość terytorium: o Bezwzględna (km2); o Względna (liczba par/km2); 17. Typowe siedliska reprezentowane na trzech poziomach szczegółowości: a) wg klasyfikacji ogólnej (łąka, las, rzeka, etc.); b) wg klasyfikacji programu Natura 2000; c) wg klasyfikacji szczegółowej (dokładny opis siedliska z podziałem wertykalnym); 18. Stopień zagrożonia wg Czerwonej Księgi - kategoria zagrożenia (EX, EW, CR, EN, VU, NT, LC, DD, NE); 19. Okres lęgowy: • Wg kalendarza słonecznego (najwcześniejsza data lęgu, najpóźniejsza data lęgu); • Wg kalendarza fenologicznego (zjawiska przyrodnicze); 20. Typowe pory śpiewu • W ciągu doby (początek, koniec) – informacja w odniesieniu do wschodów i zachodów słońca. Przykład: 13 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego WS – wschód słońca, ZS – zachód słońca Początek aktywności: WS - 01:00 (1h przed wschodem słońca); Koniec aktywności: WS + 01:30 (1h 30m po wschodzie słońca); • Wg kalendarza fenologicznego (pora/pory roku); Podobnie jak w przypadku wschodów i zachodów słońca w różnych rejonach kraju, często nieodległych, obserwuje się różne pory roku, w wyższych partiach gór trwa jeszcze zima a niżej jest już przedwiośnie itp. Ponadto każdy rok różni się od siebie, zatem w maju w pewnych latach mogło być już lato, a w innych była jeszcze wiosna. Zatem warto tą informację odnotowywać także wg pór roku: - przedwiośnie; - pierwiośnie; - wiosna; - wczesne lato; - lato; - późne lato; - wczesna jesień; - jesień; - poźna jesień; - przedzimek; - pełnia zimy; - spodzimek; • Intensywność aktywności w typowych porach śpiewu: o Duża/Bardzo duża; o Średnia; o Mała/Brak; 21. Systematyka (Taksonomia) zapisywana w trzech językach (łaciński, angielski, polski). 22. Literatura; 23. Fizjologia słyszenia (krzywe izofoniczne); 14 • Wzór; • Tabela (macierz); Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego 24. Zestaw optymalnych parametrów przetwarzania głosu ptaka, pod kątem automatycznego rozpoznawania gatunku dla: • Samca: o Zakres typowych częstotliwości głosu ptaka; Fmin (int) Fmax (int) o Parametry filtracji cyfrowej; • Rodzaj: rekursywna, nierekursywna, adaptacyjna; Współczynniki filtra cyfrowego; Samicy: o Zakres typowych częstotliwości głosu ptaka; Fmin (int) Fmax (int) o Parametry filtracji cyfrowej; • Rodzaj: rekursywna, nierekursywna, adaptacyjna; Współczynniki filtra cyfrowego Osobnika młodocianego: o Zakres typowych częstotliwości głosu ptaka; Fmin (int) Fmax (int) o Parametry filtracji cyfrowej; • Rodzaj: rekursywna, nierekursywna, adaptacyjna; Współczynniki filtra cyfrowego; Osobnika juwenilnego: o Zakres typowych częstotliwości głosu ptaka; Fmin (int) Fmax (int) o Parametry filtracji cyfrowej; • Rodzaj: rekursywna, nierekursywna, adaptacyjna; Współczynniki filtra cyfrowego; Pisklęcia: o Zakres typowych częstotliwości głosu ptaka; Fmin (int) Fmax (int) o Parametry filtracji cyfrowej; Rodzaj: rekursywna, nierekursywna, adaptacyjna; Współczynniki filtra cyfrowego; 15 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego III. Wykorzystane technologie Podczas tworzenia aplikacji skorzystano z następujących technologii i narzędzi: • PostgreSQL • Java • Spring Framework • Java Server Faces • Subversion W najbliższych podrozdziałach opisano je krótko i uzasadniono ich wybór. 1. PostgreSQL PostgreSQL – jest jednym z najpopularniejszych spośród darmowych systemów zarządzania relacyjnymi bazami danych. Został stworzony w środowisku uniwersyteckim, a od połowy lat dziewięćdziesiątych jest rozwijany jako otwarty projekt internetowy przez utalentowanych programistów z całego świata. Główne zalety PostgreSQL to: • Możliwość pisania funkcji w różnych językach programowania • Obsługa wielu typów indeksów (B-drzewo, Hash, R-drzewo i GiST), a dodatkowo możliwość tworzenia indeksów poprzez wynik funkcji, indeksów częściowych reprezentujących cześć tabeli. • Mechanizm wyzwalaczy przyłączanych do tabel lub do widoku. • Mechanizm MVCC zarządzający transakcjami w sposób pozwalający na dostęp do tej samej krotki więcej niż jednej transakcji, oraz na istnienie kilku wersji tej samej krotki, niewidocznych dla innych użytkowników. • Widoki modyfikujące realizowane za pomocą reguł • Możliwość wykorzystania rzadko spotykanych typów danych • Możliwość tworzenia większości obiektów bazodanowych m.in.: indeksy, agregaty, domeny, itd. Decydujący wpływ na wybór tego systemu jako systemu bazodanowego w prezentowanej pracy miała jego maksymalna zgodność ze standardem SQL (co 16 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego wykluczyło MySQL) przy jednoczesnym zachowaniu niskich wymagań sprzętowych, które wyeliminowały Oracle. 2. Java Java - to obiektowy język programowania stworzony przez firmę Sun. Jego składnia opiera się na C++, podstawowe koncepcje zaś przejęto z języka Smalltalk. Java została zaprojektowana jako język niezależny od systemu operacyjnego i komputera, na którym może być uruchamiany, co w praktyce oznacza, że programy napisane w tym języku mogą być uruchamiane na każdym systemie operacyjnym. Ściślej rzecz biorąc, mogą być uruchamiane na każdym komputerze, który ma zainstalowane oprogramowanie Java Virtual Machine. Kluczowe koncepcje języka Java to: • Obiektowość - pogrupowanie danych i wykonywanych na nich akcji w klasy obiektów • Niezależność od architektury – uzyskana dzięki kompilacji kodu źródłowego do kodu pośredniego, tłumaczonego następnie na kod dostosowany do specyfiki konkretnego systemu operacyjnego i procesora, prze wirtualna maszyna Javy • Sieciowość i obsługa programowania rozproszonego – realizowanego poprzez wyspecjalizowane biblioteki Javy • Niezawodność i bezpieczeństwo Wybór tego języka zdeterminowany został w dużej mierze przez jego popularność oraz dojrzałość rozwiązań wspierających budowę aplikacji biznesowych. Prace nad portalem ornitologicznym zaplanowano na kilka lat – zastosowanie Javy umożliwi kontynuatorom łatwą rozbudowę o nowe funkcje. 3. Spring Framework Spring Framework (SF) – jest szkieletem aplikacji oferowanym z otwartym dostępem do kodu źródłowego, którego zadanie polega na upraszczaniu procesu tworzenia oprogramowania w języku Java dla platformy Java EE/J2EE. 17 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Najczęściej utożsamia się Spring z technologią odwrócenia kontroli, zwłaszcza z jedną z jej odmian – wstrzykiwaniem zależności. Główne atuty Springa to: • Spójny model programowania, który można stosować w dowolnym środowisku • Wielokrotne wykorzystywanie kodu • Ułatwienie przygotowywania projektów obiektowych dla aplikacji J2EE • Ułatwienie stosowania takich praktyk programistycznych jak programowanie w oparciu o interfejsy • Architektura rozszerzeń • Ułatwienie przenoszenia wartości konfiguracyjnych z kodu Javy do dokumentów XML lub plików właściwości • Prostota testowania • Elastyczność architekturalna Niezwykle ważne jest to, że Spring Framework nie jest projektem laboratoryjnym napisanym w oderwaniu od rzeczywistości. Powstawał w procesie ewolucyjnym, a jego przydatność została pozytywnie zweryfikowana przez autorów wielu komercyjnych projektów. 4. Java Server Faces Java Server Faces (JSF) – jest obecnie jednym z najpopularniejszych frameworków wspomagających tworzenie interfejsu użytkownika aplikacji J2EE uruchamianych po stronie serwera, który bazuje na języku Java. JSF udostępnia zbiór komponentów do budowy warstwy widoku aplikacji, umożliwia obsługę zdarzeń użytkownika, poprzez cykl życia aplikacji internetowej za pośrednictwem servletu kontrolera. Korzysta on również z języka zgodnego z XML, używanego do tworzenia opisu interfejsu aplikacji (XUL). JSF oparty został na zbiorze najciekawszych i najpraktyczniejszych rozwiązaniach zaczerpniętych z używanych wcześniej technologii, m.in. Java Server Pages (JSP). 18 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Umiejętny dobór tych właśnie cech przyczynił się do tego, że JSF stał się swoistym standardem na rynku aplikacji Web 2.0. Jako że Java Server Faces jest w pewnym sensie rozwinięciem technologii Java Server Pages na stronach JSF, można z powodzeniem korzystać z komponentów JSP Standard Tag Library (JSTL). JSF jest frameworkiem. który udostępnia: • łatwe zarządzanie nawigacją w aplikacji, • zapewnia zbiór podstawowych komponentów, • zapewnia mechanizm przechwytywania wyjątków i błędów, • zapewnia do mechanizmy internacjonalizacji aplikacji, • mechanizm zarządzania bean'ami, 5. Subversion Subversion (znany również jako SVN) – jest powszechnie wykorzystywanym systemem kontroli wersji. Powstał on w oparciu o CVS – starano się więc zachować kompatybilność z poprzednikiem usuwając jednocześnie i poprawiając jego wady. SVN jest wolnym oprogramowaniem na licencji Apache. Główne cechy systemu: • Historia zmian nazw katalogów i plików • Zmiany są transakcjami atomowymi • Możliwość użycia serwera Apache • Dostępny samodzielny serwer • Szybkie tworzenie gałęzi i znaczników • Podział kodu na moduły • Własny protokół klient/serwer. • Protokół umożliwia przesyłanie różnic w plikach od klienta do serwera i odwrotnie. • Rozmiar przesyłanych danych przy zmianie pliku jest proporcjonalny do rozmiaru zmian, a nie pliku. 19 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego • Efektywna obsługa plików binarnych. • Repozytorium przechowywane w bazie danych lub w systemie plików. Zdecydowano się na użycie tego narzędzia, przede wszystkim dlatego, aby wszyscy uczestnicy projektu mieli wgląd w kod źródłowy aplikacji. IV. Baza danych Ze względu na założenie, że moduł encyklopedyczny ma dostarczać bardzo szczegółowych danych, baza złożona jest z 32 tabel połączonych 35 relacjami. Zaprojektowanie struktury w taki sposób, aby spełniała swoje zadanie umożliwiając jednocześnie ewentualną rozbudowę zajęło dużą część ogółu czasu poświęconego na pracę nad projektem. W niniejszym rozdziale przedstawiono diagram ERD oraz opisano encje i relacje występujące w bazie. 20 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Rys. 1 Diagram ERD 21 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego 1. Opis relacji w bazie danych Relationship Tab. 1. Opis relacji Tabela nadrzędna Klucz główny 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. occurence_form_t wintering_t nutrition_method_t red_list_t breeding_t vocal_type_dictionary_t species_t nutrition_dictionary_t lifestyle_t species_t figure_t colour_of_body_part_t part_of_the_body_t colour_dictionary_t age_t gender_t species_t gender_t gender_t age_t species_t feature_name_t species_t specimen_t type_of_filtration_t filter_coefficient_t species_t phenology_season_t species_t vocal_intensity_activity_t vocal_intensity_activity_t species_t species_t habitat_parameter_t habitat_parameter_type_t occurence_form_pk wintering_pk nutrition_method_pk red_list_pk breeding_pk vocal_type_dictionary_pk species_pk nutrition_dictionary_pk lifestyle_pk species_pk figure_pk colour_of_body_part_pk part_of_the_body_pk colour_pk age_pk gender_pk species_pk gender_pk gender_pk age_pk species_pk feature_name_pk species_pk specimen_pk type_of_filtration_pk filter_coefficient_pk species_pk phenology_season_pk species_pk vocal_intensity_activity_pk vocal_intensity_activity_pk species_pk species_pk parameter_pk parameter_type_pk 22 Tabela podrzędna species_t species_t species_t species_t species_t voice_type_t nutrition_of_species_t nutrition_of_species_t species_t figure_t figure_description_t species_t colour_of_body_part_t colour_of_body_part_t colour_of_body_part_t colour_of_body_part_t voice_type_t voice_type_t anatomical_feature_t anatomical_feature_t anatomical_feature_t anatomical_feature_t asr_parameter_set_t asr_parameter_set_t asr_parameter_set_t asr_parameter_set_t nutrition_of_species_t phenology_singing_time_t phenology_singing_time_t phenology_singing_time_t day_singing_time day_singing_time_t species_habitat_t species_habitat_t habitat_parameter_t Klucz obcy occurence_form_fk wintering_fk nutrition_method_fk red_list_fk breeding_fk vocal_type_dictionary_fk species_fk nutrition_dictionary_fk lifestyle_fk species_fk figure_descriotion_pk colour_of_body_part_fk part_of_the_body_fk colour_fk age_fk gender_fk species_fk gender_fk gender_fk age_fk species_fk feature_name_fk species_fk specimen_fk type_of_filtration_fk filter_coefficient_fk species_fk phenology_season_fk species_fk vocal_intensity_activity_fk vocal_intensity_activity_fk species_fk species_fk parameter_fk paramater_type_fk Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego 2. Opis encji Tab. 2. species_t – dane odpowiedzialne za opis gatunku Tabela species_t Nazwa species_pk latin_name Opis Typ Klucz numer id danego gatunku ptaków integer PK dwuczłonowa łacińska nazwa gatunku varchar ptaka polish_name polska nazwa gatunku ptaka varchar english_name angielska nazwa gatunku ptaka varchar słowny opis gatunku varchar średnia długość życia osobników danego integer species_description length_of_life is_invasive begin_spring_migration end_spring_migration begin_autumn_migration end_autumn_migration absolute_teritory_size gatunku wyrażona w latach wartość true/false określająca czy dany boolean gatunek jest inwazyjny początkowa data migracji wiosennych varchar końcowa data migracji wiosennych varchar początkowa data migracji jesiennych varchar końcowa data migracji jesiennych varchar bezwzględna średnia wielkość terytorium varchar zajmowanego przez dany gatunek wyrażona w km2 względna średnia wielkość terytorium relative_teritory_size varchar zajmowanego przez dany gatunek wyrażona w liczbie par na km2 begin_breeding_season end_breeding_season literature species2000 najwcześniejsza data lęgu według varchar kalendarza słonecznego najpóźniejsza data lęgu według kalendarza varchar słonecznego literatura varchar systematyka: id gatunku w bazie varchar Species2000 23 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Nazwa Typ Klucz tryb życia gatunku integer FK forma występowania gatunku integer FK zimowanie integer FK sposób odżywiania integer FK nutrition_fk pożywienie integer FK breeding_fk lęgowość w Polsce integer FK red_list_fk stopień zagrożenia wg Czerwonej Księgi integer FK lifestyle_fk occurence_form_fk wintering_fk nutrition_method_fk Opis Tab. 3. lifestyle_t – lista trybów życia, które można przypisać do jednego gatunku Tabela lifestyle_t Nazwa lifestyle_pk lifestyle Opis Typ Klucz numer id rekordu integer PK tryb życia: osiadły | wędrowny | varchar częściowo osiadły | częściowo wędrowny | koczujący Tab. 4. occurence_form_t – lista form występowania, które można przypisać do jednego gatunku Tabela occurence_form_t Nazwa occurence_form_pk occurence_form Opis Typ Klucz numer id rekordu integer PK forma występowania gatunku: varchar gnieżdżący się | przelotny | zalatujący regularnie | zalatujący sporadycznie Tab. 5. wintering_t – lista ze sposobami zimowania, które można przypisać do jednego gatunku Tabela wintering_t Nazwa wintering_pk wintering Opis Typ Klucz numer id rekordu integer PK zimowanie: zimujący regularnie | varchar zimujący sporadycznie lub nielicznie | niezimujący 24 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 6. nutrition_method_t – lista ze sposobami odżywiania, które można przypisać do jednego gatunku Tabela nutrition_method_t Nazwa nutrition_method_pk nutrition_method Opis Typ Klucz numer id rekordu integer PK sposób odżywiania: drapieżnik | varchar owadożerny | ziarnojad | owocożerny | wszystkożerny Tab. 7. nutrition_dictionary_t – lista rodzajów pożywienia, które można przypisać do tabeli nutrition_of_species_t Tabela nutrition_dictionary_t Nazwa nutrition_dictionary_pk nutrition_overriding nutrition Opis Typ Klucz numer id rekordu integer PK numer id rekordu nadrzędnego integer rodzaje pożywienia: kręgowce | ryby | varchar płazy | kijanki | gady | ptaki | wodne | dorosłe | immaturalne | juwenilne | pisklęta | lądowe | dorosłe | jaja | ssaki | ssaki lądowe | gryzonie | ssaki wodne | bezkręgowce | pajęczaki | skorupiaki | mięczaki | głowonogi | ślimaki | owady | owady wodne | owady lądowe | chrząszcze | mrówki | osy, pszczoły, trzmiele | ksylofagi | saproksylity | larwy owadów | wodnych | lądowych | pierścienice | wieloszczety | plankton | fitoplankton | zooplankton | rośliny | wodne | wodorosty | nasiona | korzonki | liście | pąki | kwiaty | pędy | lądowe | pąki | pędy | kwiaty | jagody | owoce | trawy | nasiona | korzonki | zboża | liście | igły | odpady | odchody 25 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 8. nutrition_of_species_t – dane odpowiedzialne za zbieranie informacji dotyczących pożywienia określonego gatunku Tabela nutrition_of_species_t Nazwa nutrition_of_species_pk species_fk Opis Typ Klucz numer id rekordu integer PK id gatunku ptaków którego dotyczy integer FK integer FK rekord nutrition_dictionary_fk rodzaj pożywienia Tab. 9. voice_type_t – lista z rodzajami wydawanych dźwięków, które można przypisać do tabeli voice_type_t Tabela voice_type_dictionary_t Nazwa voice_type_dictionary_pk voice_type_dictionary Opis Typ Klucz numer id rekordu integer PK rodzaje wydawanych dźwięków: varchar świergotanie | trelowanie | ćwierkotanie | klangor | bulgotanie | bełkotanie | syczenie | kukanie | chrapanie | czuszykanie | czyrykanie | klapanie | korkowanie | klaskanie | kokanie | krechtanie | krektanie | pianie | czyhitanie | szlifowanie | świstanie | glokanie | kwoktanie | kwokanie | skrzekotanie | telękanie Tab. 10. tabela voice_type_t – tabela zbierająca dane o rodzajach dźwięków wydawanych przez osobniki danego gatunku Tabela voice_type _t Nazwa voice_type_ pk voice_type_dictionary_fk species_fk Opis Typ Klucz numer id rekordu integer PK rodzaj wydawanego dźwięku integer FK id gatunku ptaków którego dotyczy integer FK integer FK rekord gender_fk 26 płeć opisywanego osobnika Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 11. breeding_t – lista kategoriami lęgowości w Polsce, które można przypisać do jednego gatunku Tabela breeding_t Nazwa breeding_pk breeding Opis Typ Klucz numer id rekordu integer PK lęgowość w Polsce: lęgowy (regularnie) varchar | lęgowy lokalnie lub sporadycznie | nielęgowy Tab. 12. red_list_t – lista kategoriami zagrożenia wg Czerwonej Księgi, które można przypisać do jednego gatunku Tabela red_list_t Nazwa red_list_pk red_list Opis Typ Klucz numer id rekordu integer PK stopień zagrożenia wg Czerwonej varchar Księgi: EX | EW | CR | EN | VU | NT | LC | DD | NE Tab. 13. figure_t – dane odpowiadające za przechowywanie plików graficznych z rycinami Tabela figure_t Nazwa Opis Typ Klucz figure_pk numer id rekordu integer PK species_fk id gatunku ptaków którego dotyczy integer FK opis ryciny integer FK nazwa pliku z ryciną varchar rekord figure_description_fk file_name Tab. 14. gender_t – lista z dostępnymi określeniami płci Tabela gender_t Nazwa gender_pk gender Opis Typ Klucz numer id rekordu integer PK płeć: samiec | samica varchar 27 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 15. figure_description_t – lista opisami rycin Tabela figure_description_t Nazwa figure_description_pk figure_description Opis Typ Klucz numer id rekordu integer PK opis ryciny: dorosły samiec | dorosła varchar samica | immaturalny samiec | immaturalna samica | osobnik juwenilny | podlot | pisklę | jaja | gniazdo | pióro puchowe | pokrywy | lotka | sterówka | pióro pudrowe Tab. 16. colour_of_body_part_t – dane odpowiadające za opis kolorów różnych części ciała i upierzenia danego gatunku ptaka Tabela colour_of_body_part_t Nazwa Opis Typ Klucz figure_pk numer id rekordu integer PK species_fk id gatunku ptaków którego dotyczy integer FK kolor integer FK część ciała i upierzenia integer FK wiek opisywanego osobnika integer FK upierzenie integer FK płeć integer FK Typ Klucz numer id rekordu integer PK nazwa opisywanej cechy: waga | varchar rekord colour_fk part_of_the_body_fk age_fk plumage_fk gender_fk Tab. 17. feature_name_t – lista z dostępnymi określeniami wieku osobnika Tabela feature_name_t Nazwa feature_name_pk feature_name Opis rozpiętość skrzydeł | wielkość osobników 28 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 18. part_of_the_body_t – lista częściami ciała i upierzenia Tabela part_of_the_body_t Nazwa part_of_the_body_pk part_of_the_body Opis Typ Klucz numer id rekordu integer PK część ciała i upierzenia: dziób | varchar kantarek | pióra nosowe | czoło | obrączka powiekowa | obrączka oczna | ciemię | pokrywy uszne | potylica | kark | grzbiet | barkówki | duże pokrywy | lotki 3. rzędu | lotki 2. rzędu | kuper | lotki 1. rzędu | pokrywy nadogonowe | ogon=sterówki | pokrywy podogonowe | podogonie | podbrzusze | staw skokowy | stopa | skok | brzuch | pokrywy 1. rzędu | bok | skrzydełko | średnie pokrywy | małe pokrywy | pierś | szyja | pole przyżuchwowe | gardło | podbródek | dudka | stosina | chorągiewka zewnętrzna | chorągiewka wewnętrzna | emarginacja | wycięcie | prążkowanie | plamkowanie | kreskowanie | półobroża | obroża | śliniak | pasek podbródkowy | pasek przyżuchwowy |pasek policzkowy | pasek oczny |obrączka oczna | środkowy pasek ciemieniowy | boczny pasek ciemieniowy | brew | plamka uszna | policzek | paski skrzydłowe | wstawka | pasek przedkońcowy | pasek końcowy 29 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 19. colour_dictionary_t – lista ze słownikiem kolorów Tabela colour_dictionary_t Nazwa colour_pk colour Opis Typ Klucz numer id rekordu integer PK kolor: biel | czerń | odcienie szarości | varchar odcienie brązu | odcienie czerwieni | odcienie różu | odcienie fioletu | odcienie niebieskiego | odcienie pomarańczowego | odcienie zieleni | odcienie żółci Tab. 20. age_t – lista z dostępnymi określeniami wieku osobnika Tabela age_t Nazwa age_pk age Opis Typ Klucz numer id rekordu integer PK wiek osobnika: dorosły | immaturalny | varchar juwenilny | podlot | pisklę Tab. 21. anatomical_feature_t – dane odpowiedzialne za opis cech anatomicznych Tabela anatomical_feature_t Nazwa anatomical_feature_pk gender_fk feature_name_fk species_fk Opis Typ Klucz numer id rekordu integer PK płeć opisywanego osobnika integer FK nazwa opisywanej cechy integer FK id gatunku ptaków którego dotyczy integer FK wiek opisywanego osobnika integer FK wartość liczbowa opisywanej cechy varchar rekord age_fk feature_value 30 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 22. asr_parameter_set_t – dane odpowiedzialne za przechowywanie parametrów przetwarzania głosu ptaka pod kątem automatycznego rozpoznawania gatunku Tabela asr_parameter_set_t Nazwa Opis Typ Klucz asr_parameter_set_pk numer id rekordu integer PK specimen_fk rodzaj osobnika integer FK rodzaj filtracji integer FK id gatunku ptaków którego dotyczy integer FK FK type_of_filtration_fk species_fk rekord filter_coefficient_fk współczynniki filtra cyfrowego integer typical_frequency_range_min zakres typowych częstotliwości integer głosu ptaka (Fmin) typical_frequency_range_max zakres typowych częstotliwości integer głosu ptaka (Fmax) isophonic_curves krzywe izofoniczne integer Tab. 23. specimen_t – lista z dostępnymi określeniami rodzajów osobników Tabela specimen_t Nazwa specimen_pk specimen Opis Typ Klucz numer id rekordu integer PK rodzaj osobnika: samiec | samica | varchar juwenilny | pisklę Tab. 24. type_of_filtration_t – lista z dostępnymi rodzajami filtracji Tabela type_of_filtration_t Nazwa type_of_filtration_pk type_of_filtration Opis Typ Klucz numer id rekordu integer PK rodzaj filtracji: rekursywna | varchar nierekursywna | adaptacyjna 31 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 25. filter_coefficient_t – dane przechowujące współczynniki filtra cyfrowego Tabela filter_coefficient_t Nazwa Opis filter_coefficient_pk filter_coefficient Typ Klucz numer id rekordu integer PK współczynniki filtra cyfrowego numeric (6,6) Tab. 26. phenology_saeson_t – lista pór w ciągu roku wg kalendarza fenologicznego Tabela phenology_saeson_t Nazwa Opis phenology_saeson_pk phenology_saeson Typ Klucz numer id rekordu integer PK pory w ciągu roku wg kalendarza varchar fenologicznego: przedwiośnie | pierwiośnie | wiosna | wczesne lato | lato | późne lato | wczesna jesień | jesień | poźna jesień | przedzimek | pełnia zimy | spodzimek Tab. 27. phenology_singing_time_t – dane odpowiedzialne za informacje dotyczące typowych pór śpiewu w ciągu roku wg kalendarza fenologicznego Tabela phenology_singing_time_t Nazwa Opis Typ Klucz phenology_singing_time_pk numer id rekordu integer PK vocal_intensity_activity_fk intensywność aktywności w integer FK integer FK integer FK typowych porach śpiewu species_fk id gatunku ptaków którego dotyczy rekord phenology_saeson_fk typowe pory śpiewu w ciągu roku wg kalendarza fenologicznego 32 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 28. vocal_intensity_activity_t – lista intensywność aktywności w typowych porach śpiewu Tabela vocal_intensity_activity_t Nazwa Opis vocal_intensity_activity_pk vocal_intensity_activity Typ Klucz numer id rekordu integer PK intensywność aktywności w varchar typowych porach śpiewu: duża/bardzo duża | średnia | mała/brak; Tab. 29. day_singing_time_t – dane odpowiedzialne za informacje dotyczące typowych pór śpiewu w ciągu doby Tabela day_singing_time_t Nazwa Opis day_singing_time_pk numer id rekordu begin_day_singing_time początek typowej pory śpiewu w Typ Klucz integer PK time ciągu doby end_day_singing_time koniec typowej pory śpiewu w ciągu time doby vocal_intensity_activity_fk intensywność aktywności w integer FK integer FK Typ Klucz numer id rekordu integer PK typ parametru: Typ siedliska | Typ varchar typowych porach śpiewu species_fk id gatunku ptaków którego dotyczy rekord Tab. 30 habitat_parameter_type_t - lista typów parametrów Tabela habitat_parameter_type_t Nazwa parameter_type_pk parameter_type_name Opis lasu | Typy liściaste | Typy szpilkowy | Typ łąki | Wiek lasu 33 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Tab. 31 habitat_parameter_t – tabela przechowująca drzewiastą strukturę parametrów Tabela habitat_parameter_t Nazwa parameter_ pk value Opis Typ Klucz numer id rekordu integer PK wartość parametru: Las | Łąka | varchar liściasty | szpilkowy | olcha | jesion | sosnowy | jodłowy | świerkowy | modrzew | podmokła | sucha | młodnik | drągowina | średni | starodrzew parent_parameter_fk parameter_type_fk id paramatru nadrzędnego integer FK id typu parametru integer FK Typ Klucz numer id rekordu integer PK id siedliska integer PK id gatunku ptaków którego dotyczy integer FK Tab. 32 species_habitat_t - tabela łącząca siedliska z gatunkami ptaków Tabela species_habitat_t Nazwa species_habitat_pk parameter_fk species_fk Opis rekord Tab. 33. common_name_t – dane przechowujące zwyczajowe nazwy określonego gatunku Tabela common_name_t Nazwa common_name_pk common_name species_fk Opis Typ Klucz numer id rekordu integer PK nazwa zwyczajowa gatunku varchar id gatunku ptaków którego dotyczy integer rekord 34 FK Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego 3. Kod SQL CREATE SEQUENCE species_id; CREATE SEQUENCE lifestyle_id; CREATE SEQUENCE occurence_form_id; CREATE SEQUENCE wintering_id; CREATE SEQUENCE nutrition_method_id; CREATE SEQUENCE voice_type_id; CREATE SEQUENCE voice_type_dictionary_id; CREATE SEQUENCE red_list_id; CREATE SEQUENCE breeding_id; CREATE SEQUENCE nutrition_of_species_id; CREATE SEQUENCE nutrition_dictionary_id; CREATE SEQUENCE figure_id; CREATE SEQUENCE figure_description_id; CREATE SEQUENCE colour_of_body_part_id; CREATE SEQUENCE part_of_the_body_id; CREATE SEQUENCE colour_dictionary_id; CREATE SEQUENCE age_id; CREATE SEQUENCE gender_id; CREATE SEQUENCE anatomical_feature_id; CREATE SEQUENCE feature_name_id; CREATE SEQUENCE asr_parameter_set_id; CREATE SEQUENCE specimen_id; CREATE SEQUENCE type_of_filtration_id; CREATE SEQUENCE filter_coefficient_id; CREATE SEQUENCE common_name_id; CREATE SEQUENCE phenology_season_id; CREATE SEQUENCE phenology_singing_time_id; CREATE SEQUENCE vocal_intensity_activity_id; CREATE SEQUENCE day_singing_time_id; CREATE SEQUENCE species_habitat_id; CREATE SEQUENCE parameter_id; CREATE SEQUENCE parameter_type_id; -- Create tables section ------------------------------------------------- -- Table species_t CREATE TABLE species_t( species_pk Integer NOT NULL default nextval('species_id'), latin_name Varchar, polish_name Varchar, english_name Varchar, species_description Varchar, 35 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego length_of_life Integer, is_invasive Boolean, begin_spring_migration Varchar, end_spring_migration Varchar, begin_autumn_migration Varchar, end_autumn_migration Varchar, absolute_teritory_size Integer, relative_teritory_size Integer, begin_breeding_season Varchar, end_breeding_season Varchar, literature Varchar, species2000 Integer, lifestyle_fk Integer, occurence_form_fk Integer, wintering_fk Integer, nutrition_method_fk Integer, breeding_fk Integer, red_list_fk Integer ) WITH (OIDS=FALSE); -- Add keys for table species_t ALTER TABLE species_t ADD CONSTRAINT species_pk PRIMARY KEY (species_pk); -- Table lifestyle_t CREATE TABLE lifestyle_t( lifestyle_pk Integer NOT NULL default nextval('species_id'), lifestyle Varchar ) WITH (OIDS=FALSE); -- Add keys for table lifestyle_t ALTER TABLE lifestyle_t ADD CONSTRAINT lifestyle_pk PRIMARY KEY (lifestyle_pk); -- Table phenology_singing_time_t CREATE TABLE phenology_singing_time_t( phenology_singing_time_pk Integer NOT NULL default nextval('species_id'), vocal_intensity_activity_fk Integer, phenology_season_fk Integer, species_fk Integer ) 36 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego WITH (OIDS=FALSE); -- Add keys for table phenology_singing_time_t ALTER TABLE phenology_singing_time_t ADD CONSTRAINT phenology_singing_time_pk PRIMARY KEY (phenology_singing_time_pk); -- Table part_of_the_body_t CREATE TABLE part_of_the_body_t( part_of_the_body_pk Integer NOT NULL default nextval('species_id'), part_of_the_body Varchar ) WITH (OIDS=FALSE); -- Add keys for table part_of_the_body_t ALTER TABLE part_of_the_body_t ADD CONSTRAINT part_of_the_body_pk PRIMARY KEY (part_of_the_body_pk); -- Table colour_dictionary_t CREATE TABLE colour_dictionary_t( colour_pk Integer NOT NULL default nextval('species_id'), colour Varchar ) WITH (OIDS=FALSE); -- Add keys for table colour_dictionary_t ALTER TABLE colour_dictionary_t ADD CONSTRAINT colour_dictionary_pk PRIMARY KEY (colour_pk); -- Table day_singing_time_t CREATE TABLE day_singing_time_t( day_singing_time_pk Integer NOT NULL default nextval('species_id'), begin_day_singing_time Time, end_day_singing_time Time, vocal_intensity_activity_fk Integer, species_fk Integer ) WITH (OIDS=FALSE); -- Add keys for table day_singing_time_t 37 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego ALTER TABLE day_singing_time_t ADD CONSTRAINT day_singing_time_pk PRIMARY KEY (day_singing_time_pk); -- Table colour_of_body_part_t CREATE TABLE colour_of_body_part_t( colour_of_body_part_pk Integer NOT NULL default nextval('species_id'), species_fk Integer NOT NULL, colour_fk Integer NOT NULL, part_of_the_body_fk Integer NOT NULL, age_fk Integer NOT NULL, gender_fk Integer ) WITH (OIDS=FALSE); -- Add keys for table colour_of_body_part_t ALTER TABLE colour_of_body_part_t ADD CONSTRAINT colour_of_body_part_pk PRIMARY KEY (colour_of_body_part_pk); -- Table phenology_season_t CREATE TABLE phenology_season_t( phenology_season_pk Integer NOT NULL default nextval('species_id'), phenology_season Varchar ) WITH (OIDS=FALSE); -- Add keys for table phenology_season_t ALTER TABLE phenology_season_t ADD CONSTRAINT phenology_season_pk PRIMARY KEY (phenology_season_pk); -- Table figure_t CREATE TABLE figure_t( figure_pk Integer NOT NULL default nextval('species_id'), species_fk Integer, figure_description_fk Integer, file_name Varchar ) WITH (OIDS=FALSE); -- Add keys for table figure_t ALTER TABLE figure_t ADD CONSTRAINT figure_pk PRIMARY KEY (figure_pk); 38 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego -- Table common_name_t CREATE TABLE common_name_t( common_name_pk Integer NOT NULL default nextval('species_id'), common_name Varchar, species_fk Integer ) WITH (OIDS=FALSE); -- Add keys for table common_name_t ALTER TABLE common_name_t ADD CONSTRAINT common_name_pk PRIMARY KEY (common_name_pk); -- Table figure_description_t CREATE TABLE figure_description_t( figure_description_pk Integer NOT NULL default nextval('species_id'), figure_description Varchar ) WITH (OIDS=FALSE); -- Add keys for table figure_description_t ALTER TABLE figure_description_t ADD CONSTRAINT figure_description_pk PRIMARY KEY (figure_description_pk); -- Table species_habitat_t CREATE TABLE species_habitat_t( species_habitat_pk Integer NOT NULL default nextval('species_id'), parameter_fk Integer, species_fk Integer ) WITH (OIDS=FALSE); -- Table breeding_t CREATE TABLE breeding_t( breeding_pk Integer NOT NULL default nextval('species_id'), breeding Varchar ) WITH (OIDS=FALSE); -- Add keys for table breeding_t 39 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego ALTER TABLE breeding_t ADD CONSTRAINT breeding_pk PRIMARY KEY (breeding_pk); -- Table habitat_parameter_t CREATE TABLE habitat_parameter_t( parameter_pk Integer NOT NULL default nextval('species_id'), value Varchar, parent_parameter_fk Integer, parameter_type_fk Integer ) WITH (OIDS=FALSE); -- Add keys for table habitat_parameter_t ALTER TABLE habitat_parameter_t ADD CONSTRAINT parameter_pk PRIMARY KEY (parameter_pk); -- Table occurence_form_t CREATE TABLE occurence_form_t( occurence_form_pk Integer NOT NULL default nextval('species_id'), occurence_form Varchar ) WITH (OIDS=FALSE); -- Add keys for table occurence_form_t ALTER TABLE occurence_form_t ADD CONSTRAINT occurence_form_pk PRIMARY KEY (occurence_form_pk); -- Table habitat_parameter_type_t CREATE TABLE habitat_parameter_type_t( parameter_type_pk Integer NOT NULL default nextval('species_id'), parameter_type_name Varchar ) WITH (OIDS=FALSE); -- Add keys for table habitat_parameter_type_t ALTER TABLE habitat_parameter_type_t ADD CONSTRAINT parameter_type_pk PRIMARY KEY (parameter_type_pk); -- Table wintering_t 40 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego CREATE TABLE wintering_t( wintering_pk Integer NOT NULL default nextval('species_id'), wintering Varchar ) WITH (OIDS=FALSE); -- Add keys for table wintering_t ALTER TABLE wintering_t ADD CONSTRAINT wintering_pk PRIMARY KEY (wintering_pk); -- Table nutrition_method_t CREATE TABLE nutrition_method_t( nutrition_method_pk Integer NOT NULL default nextval('species_id'), nutrition_method Varchar ) WITH (OIDS=FALSE); -- Add keys for table nutrition_method_t ALTER TABLE nutrition_method_t ADD CONSTRAINT nutrition_method_pk PRIMARY KEY (nutrition_method_pk); -- Table nutrition_of_species_t CREATE TABLE nutrition_of_species_t( nutrition_of_species_pk Integer NOT NULL default nextval('species_id'), species_fk Integer, nutrition_dictionary_fk Integer ) WITH (OIDS=FALSE); -- Add keys for table nutrition_of_species_t ALTER TABLE nutrition_of_species_t ADD CONSTRAINT nutrition_of_species_pk PRIMARY KEY (nutrition_of_species_pk); -- Table nutrition_dictionary_t CREATE TABLE nutrition_dictionary_t( nutrition_dictionary_pk Integer NOT NULL default nextval('species_id'), nutrition_overriding Integer, nutrition Varchar ) WITH (OIDS=FALSE); 41 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego -- Add keys for table nutrition_dictionary_t ALTER TABLE nutrition_dictionary_t ADD CONSTRAINT nutrition_dictionary_pk PRIMARY KEY (nutrition_dictionary_pk); -- Table voice_type_t CREATE TABLE voice_type_t( voice_type_pk Integer NOT NULL default nextval('species_id'), species_fk Integer, gender_fk Integer, voice_type_dictionary_fk Integer ) WITH (OIDS=FALSE); -- Add keys for table voice_type_t ALTER TABLE voice_type_t ADD CONSTRAINT voice_type_pk PRIMARY KEY (voice_type_pk); -- Table red_list_t CREATE TABLE red_list_t( red_list_pk Integer NOT NULL default nextval('species_id'), red_list Varchar ) WITH (OIDS=FALSE); -- Add keys for table red_list_t ALTER TABLE red_list_t ADD CONSTRAINT red_list_pk PRIMARY KEY (red_list_pk); -- Table anatomical_feature_t CREATE TABLE anatomical_feature_t( anatomical_feature_pk Integer NOT NULL default nextval('species_id'), gender_fk Integer NOT NULL, feature_name_fk Integer NOT NULL, species_fk Integer NOT NULL, age_fk Integer NOT NULL, anatomical_feature_value Numeric(6,2) ) WITH (OIDS=FALSE); -- Add keys for table anatomical_feature_t 42 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego ALTER TABLE anatomical_feature_t ADD CONSTRAINT anatomical_feature_pk PRIMARY KEY (anatomical_feature_pk); -- Table gender_t CREATE TABLE gender_t( gender_pk Integer NOT NULL default nextval('species_id'), gender Varchar ) WITH (OIDS=FALSE); -- Add keys for table gender_t ALTER TABLE gender_t ADD CONSTRAINT gender_pk PRIMARY KEY (gender_pk); -- Table feature_name_t CREATE TABLE feature_name_t( feature_name_pk Integer NOT NULL default nextval('species_id'), feature_name Varchar ) WITH (OIDS=FALSE); -- Add keys for table feature_name_t ALTER TABLE feature_name_t ADD CONSTRAINT feature_name_pk PRIMARY KEY (feature_name_pk); -- Table asr_parameter_set_t CREATE TABLE asr_parameter_set_t( asr_parameter_set_pk Integer NOT NULL default nextval('species_id'), specimen_fk Integer NOT NULL, type_of_filtration_fk Integer NOT NULL, filter_coefficient_fk Integer NOT NULL, species_fk Integer NOT NULL, typical_frequency_range_min Integer, typical_frequency_range_max Integer, isophonic_curves Varchar ) WITH (OIDS=FALSE); -- Add keys for table asr_parameter_set_t 43 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego ALTER TABLE asr_parameter_set_t ADD CONSTRAINT asr_parameter_set_pk PRIMARY KEY (asr_parameter_set_pk); -- Table specimen_t CREATE TABLE specimen_t( specimen_pk Integer NOT NULL default nextval('species_id'), specimen Varchar ) WITH (OIDS=FALSE); -- Add keys for table specimen_t ALTER TABLE specimen_t ADD CONSTRAINT specimen_pk PRIMARY KEY (specimen_pk); -- Table type_of_filtration_t CREATE TABLE type_of_filtration_t( type_of_filtration_pk Integer NOT NULL default nextval('species_id'), type_of_filtration Varchar ) WITH (OIDS=FALSE); -- Add keys for table type_of_filtration_t ALTER TABLE type_of_filtration_t ADD CONSTRAINT type_of_filtration_pk PRIMARY KEY (type_of_filtration_pk); -- Table filter_coefficient_t CREATE TABLE filter_coefficient_t( filter_coefficient_pk Integer NOT NULL default nextval('species_id'), filter_coefficient Numeric(6,6) ) WITH (OIDS=FALSE); -- Add keys for table filter_coefficient_t ALTER TABLE filter_coefficient_t ADD CONSTRAINT filter_coefficient_pk PRIMARY KEY (filter_coefficient_pk); -- Table age_t CREATE TABLE age_t( age_pk Integer NOT NULL default nextval('species_id'), age Varchar 44 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego ) WITH (OIDS=FALSE); -- Add keys for table age_t ALTER TABLE age_t ADD CONSTRAINT age_pk PRIMARY KEY (age_pk); -- Table voice_type_dictionary_t CREATE TABLE voice_type_dictionary_t( voice_type_dictionary_pk Integer NOT NULL default nextval('species_id'), voice_type_dictionary Varchar ) WITH (OIDS=FALSE); -- Add keys for table voice_type_dictionary_t ALTER TABLE voice_type_dictionary_t ADD CONSTRAINT voice_type_dictionary_pk PRIMARY KEY (voice_type_dictionary_pk); -- Table vocal_intensity_activity_t CREATE TABLE vocal_intensity_activity_t( vocal_intensity_activity_pk Integer NOT NULL default nextval('species_id'), vocal_intensity_activity Varchar ) WITH (OIDS=FALSE); -- Add keys for table vocal_intensity_activity_t ALTER TABLE vocal_intensity_activity_t ADD CONSTRAINT vocal_intensity_activity_pk PRIMARY KEY (vocal_intensity_activity_pk); -- Create relationships section ---------------------------------------------- ALTER TABLE species_t ADD CONSTRAINT Relationship9 FOREIGN KEY (lifestyle_fk) REFERENCES lifestyle_t (lifestyle_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE species_t ADD CONSTRAINT Relationship1 FOREIGN KEY (occurence_form_fk) REFERENCES occurence_form_t (occurence_form_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE species_t ADD CONSTRAINT Relationship2 FOREIGN KEY (wintering_fk) REFERENCES wintering_t (wintering_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; 45 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego ALTER TABLE species_t ADD CONSTRAINT Relationship3 FOREIGN KEY (nutrition_method_fk) REFERENCES nutrition_method_t (nutrition_method_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE species_t ADD CONSTRAINT Relationship5 FOREIGN KEY (breeding_fk) REFERENCES breeding_t (breeding_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE colour_of_body_part_t ADD CONSTRAINT Relationship12 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE colour_of_body_part_t ADD CONSTRAINT Relationship14 FOREIGN KEY (colour_fk) REFERENCES colour_dictionary_t (colour_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE colour_of_body_part_t ADD CONSTRAINT Relationship13 FOREIGN KEY (part_of_the_body_fk) REFERENCES part_of_the_body_t (part_of_the_body_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE figure_t ADD CONSTRAINT Relationship10 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE figure_t ADD CONSTRAINT Relationship11 FOREIGN KEY (figure_description_fk) REFERENCES figure_description_t (figure_description_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE anatomical_feature_t ADD CONSTRAINT Relationship19 FOREIGN KEY (gender_fk) REFERENCES gender_t (gender_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE anatomical_feature_t ADD CONSTRAINT Relationship22 FOREIGN KEY (feature_name_fk) REFERENCES feature_name_t (feature_name_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE asr_parameter_set_t ADD CONSTRAINT Relationship24 FOREIGN KEY (specimen_fk) REFERENCES specimen_t (specimen_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE asr_parameter_set_t ADD CONSTRAINT Relationship25 FOREIGN KEY (type_of_filtration_fk) REFERENCES type_of_filtration_t (type_of_filtration_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE asr_parameter_set_t ADD CONSTRAINT Relationship26 FOREIGN KEY (filter_coefficient_fk) REFERENCES filter_coefficient_t (filter_coefficient_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; 46 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego ALTER TABLE species_t ADD CONSTRAINT Relationship4 FOREIGN KEY (red_list_fk) REFERENCES red_list_t (red_list_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE anatomical_feature_t ADD CONSTRAINT Relationship21 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE asr_parameter_set_t ADD CONSTRAINT Relationship23 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE colour_of_body_part_t ADD CONSTRAINT Relationship15 FOREIGN KEY (age_fk) REFERENCES age_t (age_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE colour_of_body_part_t ADD CONSTRAINT Relationship16 FOREIGN KEY (gender_fk) REFERENCES gender_t (gender_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE anatomical_feature_t ADD CONSTRAINT Relationship20 FOREIGN KEY (age_fk) REFERENCES age_t (age_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE nutrition_of_species_t ADD CONSTRAINT Relationship7 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE nutrition_of_species_t ADD CONSTRAINT Relationship8 FOREIGN KEY (nutrition_dictionary_fk) REFERENCES nutrition_dictionary_t (nutrition_dictionary_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE voice_type_t ADD CONSTRAINT Relationship17 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE voice_type_t ADD CONSTRAINT Relationship18 FOREIGN KEY (gender_fk) REFERENCES gender_t (gender_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE voice_type_t ADD CONSTRAINT Relationship6 FOREIGN KEY (voice_type_dictionary_fk) REFERENCES voice_type_dictionary_t (voice_type_dictionary_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE phenology_singing_time_t ADD CONSTRAINT Relationship30 FOREIGN KEY (vocal_intensity_activity_fk) REFERENCES vocal_intensity_activity_t (vocal_intensity_activity_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; 47 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego ALTER TABLE day_singing_time_t ADD CONSTRAINT Relationship31 FOREIGN KEY (vocal_intensity_activity_fk) REFERENCES vocal_intensity_activity_t (vocal_intensity_activity_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE phenology_singing_time_t ADD CONSTRAINT Relationship28 FOREIGN KEY (phenology_season_fk) REFERENCES phenology_season_t (phenology_season_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE species_habitat_t ADD CONSTRAINT Relationship34 FOREIGN KEY (parameter_fk) REFERENCES habitat_parameter_t (parameter_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE habitat_parameter_t ADD CONSTRAINT Relationship35 FOREIGN KEY (parameter_type_fk) REFERENCES habitat_parameter_type_t (parameter_type_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE species_habitat_t ADD CONSTRAINT Relationship33 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE phenology_singing_time_t ADD CONSTRAINT Relationship29 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE day_singing_time_t ADD CONSTRAINT Relationship32 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE common_name_t ADD CONSTRAINT Relationship27 FOREIGN KEY (species_fk) REFERENCES species_t (species_pk) ON DELETE NO ACTION ON UPDATE NO ACTION; 48 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego V. Opis aplikacji Implementacji systemu dokonano w środowisku programistycznym NetBeans rozwijanym i udostępnianym na zasadzie open source. Jako serwer użyto kontenera aplikacji webowych Apache Tomcat, który jest jednym z najczęściej wykorzystywanych serwerów do obsługi Spring Framework. Z uwagi na to, że podczas prac skupiono się zwłaszcza na bazodanowej części projektu, implementacja ograniczyła się do konfiguracji Springa, integracji go z warstwą interfejsu JSF oraz wykonania przykładowego formularza dla jednej z tabel. W poniższych rozdziałach omówiono strukturę programu oraz opisano każdy z jego segmentów. 1. Struktura programu Program podzielony jest na 4 segmenty zarządzające innymi częściami aplikacji: • konfiguracyjną – pliki applicationContext.xml, dispatcher-servlet.xml, web.xml, faces-config.xml, jdbc.properties, redirect.jsp • dostępu do danych – zawarte w plikach o nazwie takiej, jak główny człon nazwy tabeli w bazie danych, którą dany plik obsługuje; np. dla tabeli lifestyle_t plikiem warstwy DAO jest plik Lifestyle.class • klasy serwisowe – o nazwie: xService, gdzie x jest nazwą pliku DAO, który jest obsługiwany przez dany plik warstwy serwisowej; np. LifestyleService.class • interfejs użytkownika – pliki o nazwie takiej, jak główny człon nazwy tabeli w bazie danych, którą dany plik obsługuje; np. dla tabeli lifestyle_t plikiem interfejsu jest plik lifestyle.jsf 2. Konfiguracja W niniejszej aplikacji za konfigurację i korzystanie z kontekstu springowego odpowiadają wpisy w pliku WEB-INF/applicationContext.xml. 49 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego W pliku tym zawarte są informacje wspólne dla wszystkich aplikacji działających w kontekście Springa. Informacja o lokalizacji głównego pliku konfiguracyjnego zawarta jest w pliku web.xml: <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> Podczas wdrażania aplikacji bazujących na Springu bardzo często się okazuje, że większość elementów konfiguracji kontenera nie wymaga modyfikowania podczas procesu wdrażania. Aby zapobiec przymusowi przeszukiwania skomplikowanych plików konfiguracyjnych tylko po to, aby zmienić kilka wymaganych w danym momencie wartości zastosowano komponent PropertyPlaceholderConfigurer. Dzięki niemu w procesie konfiguracji można ustalić wartości pobierane z zewnętrznych plików. W przypadku niniejszej aplikacji w ten sposób zdefiniowane został łańcuchy konfiguracyjne właściwe dla puli połączeń z bazą danych. W efekcie wdrożenia tego komponentu odpowiednie wartości beanu dataSource będą zastąpione wartościami pochodzącymi z pliku jdbc.properties, np. w deklaracji poniższego beana: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" /> w miejsce adresu serwera zostanie podstawiona wartość: jdbc.url=jdbc:postgresql://localhost:5432/encyklopedia Znajdujący się w pliku applicationContext.xml fragment: <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" > <property name="dataSource" ref="dataSource" /> </bean> 50 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego jest najczęściej opisywanym przykładem konfiguracji wstrzyknięcia IoC. Obiekt jdbcTemplate jest konfigurowany za pomocą elementu bean, w którym określono, że jego właściwość dataSource powinna być ustawiona na egzemplarz obiektu dataSource (jego definicję pokazano wyżej – również jako element bean). Ostatni wpis w pliku applicationContext.xml stanowi definicja obiektu lifestyle z zastosowaniem wstrzyknięcia obiektu jdbcTemplate: <bean id="lifestyle" class="obsluga.Lifestyle" > <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> 3. Dostęp do danych Wzorzec Data Access Objects jest jednym z najważniejszych i najczęściej stosowanych rozwiązań w aplikacjach J2EE. Stąd też Framework Spring udostępnia programiście maksymalnie proste w użyciu mechanizmy realizacji tego wzorca. Spring oferuje abstrakcyjne klasy DAO, które zapewniają prosty dostęp do zasobów baz danych. Dla interfejsu JDBC jest to klasa JdbcDaoSupport, która udostępnia metody obsługujące dostęp do źródła danych (egzemplarz interfejsu DataSource) oraz prekonfigurowany szablon typu JdbcTemplate. Do szablonu JdbcTemplate przekazywane są trzy informacje: • zapytanie – polecenie SQL • parametry – jeśli w poleceniu SQL wykorzystywane są parametry, w tym miejscu można określić ich właściwości • klasa wywołania zwrotnego – można także określić klasę wewnętrzną definiującą jedną metodę zadeklarowaną w interfejsie RowCallbackHandler; metoda ta zostanie wywołana dla każdego wiersza dostępnego w zbiorze wyników Są to elementy, które zmieniają się w poszczególnych wywołaniach JDBC. Spring wykonuje za programistę wszystkie niezbędne operacje: 1. Nawiązuje połączenie ze źródłem danych. 2. Podaje polecenie SQL. 3. Przegląda wszystkie wiersze zbioru wyników. 4. Dla każdego wiersza zbioru wyników wywołuje podaną metodę zwrotną. 51 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego 5. Zamyka połączenie ze źródłem danych. 6. Jeśli w trakcie wykonywania powyższych operacji zostanie zgłoszony wyjątek, to zastąpi go odpowiednim wyjątkiem nieweryfikowalnym. Poniżej przytoczono fragment warstwy DAO, a dokładniej metodę pobierającą z bazy danych wszystkie elementy zapisane w tabeli lifestyle_t: public List<Map> getTekstLista() { return this.jdbcTemplate.queryForList("select * from lifestyle_t"); } Powyższe zapytanie zwraca wynik w postaci obiektu typu Map o następującej postaci: [{lifestyle_pk=1, lifestyle=Osiadły},{ lifestyle_pk=2, lifestyle=Wędrowny}] 4. Klasy serwisowe Zadaniem klas serwisowych jest wywoływanie metod wykonujących operacje na danych z bazy. O ile do wyświetlenia rekordów z bazy danych w formie tabeli klasa serwisowa jest praktycznie zbędna, to już wyświetlenie ich w formie listy rozwijanej jest dość zawiłe i polega na stworzeniu elementu Collection<SelectItemGroup>, który zostaje wypełniony odpowiednimi danymi, by móc zostać przekazanym do interfejsu. Klasy serwisowe zawierają również obsługę przycisków (dodawanie, usuwanie, edycja rekordów). 5. Interfejs użytkownika Implementacji interfejsu użytkownika dokonano w technologii Java Server Faces. Dzięki temu wyświetlenie odpowiednich elementów wymaga tylko znajomości podstawowych znaczników JSF. Spośród nich szczególnie przyjazny dla programisty jest <h:dataTable>, dzięki któremu stworzenie tabeli z danych pobieranych przez szablon JdbcTemplate ogranicza się do kilku linijek bardzo czytelnego kodu. W dalszej części tego podrozdziału przedstawiono zrzuty ekranowe formularza obsługującego tabelę słownikową z trybami życia gatunku. 52 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Lista rekordów z bazy wyświetlana w formie tabeli: Rys. 2 Wyświetlenie rekordów z tabeli lifestyle_t Dodając nowy tryb życia użytkownik wpisuje tylko wartość komórki lifestyle. Numer ID nadawany jest automatycznie: Rys. 3 Dodawanie nowego rekordu Usuwanie rekordu polega na wybraniu odpowiedniej pozycji z listy rozwijanej: Rys. 4 Usuwanie rekordów 53 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Edytując rekord najpierw należy wybrać, który wpis ma zostać zmieniony, a następnie wprowadzić jego nową wartość: Rys. 5 Edycja danych 54 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego VI. Podsumowanie Podczas realizacji tematu przedstawionego w niniejszej pracy zdefiniowano dokładną specyfikację wymagań dotyczącą informacji przechowywanych przez encyklopedyczną część bazy danych i zaprojektowano bazę spełniającą postawione warunki. Skonfigurowano dwa frameworki: Spring oraz Java Server Faces, a także zaimplementowano przykładowy formularz obsługujący wszystkie niezbędne operacje (wyświetlanie, dodawanie, usuwanie i edycja danych). W związku z tym, że główny nacisk położono na projekt bazy danych, nie udało się zaimplementować całego systemu. Otrzymano za to bardzo szczegółową bazę, która będzie dla kontynuatorów projektu swoistym fundamentem docelowej aplikacji. Dalsze prace nie będą wymagać dokonywania tak wielu kluczowych dla projektu decyzji jak dotychczas i ograniczą się do pisania nowych klas na podstawie istniejących już fragmentów kodu źródłowego. Aby system mógł spełniać swoje zadanie, niezbędna jest implementacja wszystkich formularzy oraz integracja modułu encyklopedycznego z częścią zbierającą dane z wypraw terenowych. Zalecane jest również przystosowanie aplikacji do współpracy ze Species2000 – bazą taksonomiczną gromadzącą dane dotyczące wszystkich grup organizmów. 55 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego VII. Bibliografia 1. PostgreSQL. Zdzisław Dybikowski, Helion, 2001 2. Spring Framework. Profesjonalne tworzenie oprogramowania w Javie. Rod Johnson, Juergen Hoeller, Alef Arendsen, Thomas Risberg, Colin Sampaleanu , Helion, 2006 3. Spring. Zapiski programisty. Bruce Tate, Justin Gehtland, Helion, 2006 4. Przewodnik Ptaki. Karel Hudec, Multico, 1993 5. NetBeans Docs & Support: http://www.netbeans.org/kb/index.html 6. Spring Documentation: http://www.springsource.org/documentation 56 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Dodatek: Proces instalacji i uruchomienia 1. Instalacja PostgreSQL Do uruchomienia programu niezbędne jest połączenie z serwerem PostgreSQL. Najnowsza wersja instalacyjna dla najpopularniejszych systemów operacyjnych znajduje się na oficjalnej stronie projektu: http://www.postgresql.org/download/. Poniżej przedstawiono opis instalacji dla systemów rodziny Windows: 1. Aby rozpocząć instalację, należy uruchomić plik postgresql-8.3.7-1- windows.exe 2. Kolejne kroki instalacji potwierdza się klikając przycisk Next – będzie to skutkowało przejściem do następnych kroków z zachowaniem domyślnych ustawień instalacji 3. W momencie pojawienia się okna przedstawionego na Rys. 6 w polach Password i Retype password należy wpisać hasło dla domyślnego użytkownika postgres – jest to wartość q1w2e3 Rys. 6 Ustawienie hasła dla użytkownika bazy danych 4. Kolejne kroki polegają na akceptacji domyślnych ustawień instalacji – klikając przycisk Next 2. Utworzenie bazy danych dla aplikacji Aby utworzyć bazę danych dla aplikacji opisanej w niniejszej pracy, należy: 1. Uruchomić program pgAdmin III (bezwzględna ścieżka dostępu do pliku to: C:\Program Files\PostgreSQL\8.3\bin\pgAdmin3.exe) 2. Po jego uruchomieniu pojawi się ekran przedstawiony na Rys. 7: 57 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Rys. 7 Okno pgAdmin III po uruchomieniu programu 3. Aby połączyć się z serwerem należy dwukrotnie kliknąć na PostgreSQL 8.3 (localhost:5432) - obszar zaznaczony na Rys. 7 niebieskim kolorem – i wpisać ustalone wcześniej hasło (q1w2e3) 4. W celu utworzenia nowej bazy danych należy z menu kontekstowego pozycji Bazy danych wybrać: Nowa baza danych... Rys. 8 Tworzenie nowej bazy danych W oknie tworzenia nowej bazy należy wpisać jej nazwę: encyklopedia, resztę pól zostawiając uzupełnioną o domyślne wartości. 5. Kolejnym krokiem jest zaznaczenie nowoutworzonej bazy i wybranie na pasku narzędzi polecenia Wykonaj dowolne zapytanie SQL 58 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Rys. 9 Przejście do wykonania zapytania SQL 6. Następnie należy otworzyć plik baza.sql znajdujący się na dołączonej płycie CD i wcisnąć klawisz F5 – co spowoduje wykonanie zapytania SQL. 7. W taki sam sposób należy otworzyć plik dane.sql i wykonać zawarte w nim zapytania. Spowoduje to uzupełnienie tabeli lifestyle_t o przykładowe rekordy. 3. Instalacja Apache Tomcat i uruchomienie aplikacji Aby możliwe było uruchomienie programu, konieczna jest instalacja serwera aplikacji JEE. W niniejszym rozdziale przedstawiono proces instalacji serwera Apache Tomcat. Najnowsza wersja instalacyjna dla najpopularniejszych systemów operacyjnych znajduje się na oficjalnej stronie projektu: http://tomcat.apache.org/download-60.cgi. Poniżej przedstawiono opis instalacji dla systemów rodziny Windows: 1. Aby rozpocząć instalację, należy uruchomić plik apache-tomcat-6.0.18.exe 2. Potwierdzamy kolejne kroki instalacji zachowując domyślne ustawienia – klikając przycisk Next 3. W momencie pojawienia się poniższego okna w polu Password należy wpisać hasło administratora. Na przykład q1w2e3. 59 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego Rys. 10 Ustalenie hasła administratora 4. Kolejnym krokiem jest podanie ścieżki do folderu, w którym znajduje się Wirtualna Maszyna Java: Rys. 11 Ścieżka do JVM 60 Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego 5. Po zakończeniu procesu instalacji Apache Tomcat należy skopiować pliki aplikacji z załączonej płyty CD do folderu C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\encyklopedia 6. Następnym krokiem jest przejście w dowolnej przeglądarce stron www pod następujący adres: http://localhost:8080 7. Pod w/w adresem znajduje się strona powitalna serwera. Należy teraz przejść do opcji Tomcat Manager dostępnej w menu Administration. W celu autoryzacji wpisać login: admin i hasło: q1w2e3 Rys. 12 Sekcja Administration 8. W sekcji Deploy directory or WAR file located on server uzupełnić pola wartościami podanymi na Rys. 13 i kliknąć przycisk Deploy Rys. 13 Sekcja Deploy directory or WAR file located on server 9. Ostatnim krokiem jest uruchomienie aplikacji klikając Start w kolumnie Commands dla aplikacji o ścieżce /encyklopedia 10. Od tego momentu aplikacja dostępna jest pod adresem: http://localhost:8080/encyklopedia/faces/welcomeJSF.jsp 61