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

Podobne dokumenty