PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W TARNOWIE



Podobne dokumenty
Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

PHP: bazy danych, SQL, AJAX i JSON

Java jako język programowania

Programowanie obiektowe

1 Wprowadzenie do J2EE

Metody dostępu do danych

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Wprowadzenie do Doctrine ORM

Multimedia JAVA. Historia

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Forum Client - Spring in Swing

Wywoływanie metod zdalnych

Serwery aplikacji. dr Radosław Matusik. radmat

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Aplikacje Internetowe, Servlety, JSP i JDBC

Oracle PL/SQL. Paweł Rajba.

Aplikacje RMI

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe zastosowanie języka Java SE

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

EXSO-CORE - specyfikacja

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Przestrzenne bazy danych Podstawy języka SQL

KOŁO NAUKOWE INFORMATYKÓW SYSTEMY KONTROLI WERSJI CZ.1 16 XII 2009 OPRACOWAŁ: PRZEMYSŁAW PARDEL

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Programowanie MorphX Ax

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Baza danych sql. 1. Wprowadzenie

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

Specyfikacja implementacyjna aplikacji serwerowej

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Projektowanie systemów baz danych

Przykładowa baza danych BIBLIOTEKA

Wywoływanie metod zdalnych

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Podejście obiektowe do relacyjnych baz danych Hibernate.

Dokumentacja techniczna. Młodzieżowe Pośrednictwo Pracy

Programowanie obiektowe

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Systemy GIS Tworzenie zapytań w bazach danych

Backend Administratora

Podstawy języka Java. przygotował:

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Wykład 8: klasy cz. 4

Programowanie współbieżne i rozproszone

Podstawy i języki programowania

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Podstawy programowania obiektowego

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Programowanie obiektowe

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

Praca w programie dodawanie pisma.

Oracle11g: Wprowadzenie do SQL

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie obiektowe

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

JAX-RS czyli REST w Javie. Adam Kędziora

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Wybrane działy Informatyki Stosowanej

OfficeObjects e-forms

Zaawansowane Techniki Bazodanowe

Podstawowe wykorzystanie Hibernate

edziennik Ustaw Opis architektury

Bazy danych 2. Wykład 1

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Wybrane działy Informatyki Stosowanej

W grze bierze udział dwóch graczy. Każdy uczestnik rozpoczyna rozgrywkę z sumą

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Transkrypt:

PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W TARNOWIE INSTYTUT POLITECHNICZNY KIERUNEK: INFORMATYKA SPECIALNOŚĆ: INFORMATYKA STOSOWANA PRACA DYPLOMOWA TEMAT: Implementacja warstwy Controller modułu eksperymentalnego systemu ornitologicznego zgodnie z modelem MVC Opiekun: Dr inż. Robert Wielgat Autor: Mateusz Gieroń Tarnów 2010

Pragnę złożyć serdeczne podziękowania Panu dr inż. Robertowi Wilgatowi za nieocenioną pomoc, poświęcony czas, oraz trud włożony, który przyczynił się do powstały projekt. Również dziękuję mgr inż. Tomaszowi Potempie za cenne rady i sugestie. 2

SPIS TREŚCI: 1. WSTĘP... 4 1.1. CEL PRACY... 5 1.2. TECHNOLOGIE I NARZĘDZIA... 6 1.2.1. Java... 6 1.2.2. Spring Framework 3.0... 7 1.2.3. Spring BlazeDS Integration 1.0.3... 7 1.2.4. SQL... 7 1.2.5. NetBeans 6.8... 8 1.2.6. Subversion (SVN)... 8 1.2.7. MVC... 9 2. DANE SYSTEMU... 9 2.1. DANE WEJŚCIOWE... 9 2.1.1. Formularz współpracownika... 10 2.1.2. Protokół liczenia... 11 2.1.3. Zestawienie Wyników... 12 2.1.4. Karta obserwacji strona pierwsza... 13 2.1.5. Karta obserwacji strona druga... 14 2.1.6. Zestawienie obserwacji sezon jesienno-zimowy strona pierwsza.... 15 2.1.7. Zestawienie obserwacji sezon jesienno-zimowy strona druga... 16 2.1.8. Zestawienie obserwacji sezon wiosenno-letni strona pierwsza.... 17 2.1.9. Zestawienie obserwacji sezon wiosenno-letni strona druga.... 18 2.2. PRZECHOWYWANIE DANYCH... 19 2.3. PRZEPŁYW DANYCH... 21 2.3.1. Komunikacja między warstwą VIEW a warstwą CONTROLLER... 21 2.3.2. Komunikacja między warstwą CONTROLLER a warstwą MODEL... 22 3. KONFIGURACJA APLIKACJI... 26 3.1. KONFIGURACJA APLIKACJI W PLIKU WEB.XML... 26 3.2. KONTEKST APLIKACJI... 28 3.3. KONFIGURACJA INTEGRACJI SPRING Z ADOBE FLEX... 29 4. IMPLEMENTACJA WARSTWY CONTROLLER... 31 4.1. ZASTOSOWANE OGÓLNE ROZWIĄZANIA... 31 4.2. SCHEMAT BUDOWY KONTROLERA... 32 4.3. DIAGRAMY KLAS... 38 4.4. REJESTRACJI WSPÓŁPRACOWNIKA... 40 4.4.1. Proces rejestracji... 40 4.4.2. Proces tworzenia nowego użytkownika systemu... 43 4.5. TYPY PROCEDUR... 46 4.6. OBSERWACJE... 51 4.7. ZABEZPIECZENIE APLIKACJI... 52 4.7.1. Uwierzytelnienie... 53 4.7.2. Autoryzacja... 57 4.7.3. Obiekty sesji... 60 4.7.4. Proces wylogowania użytkownika... 61 4.7.5. Walidacja danych wejściowych... 62 5. PODSUMOWANIE... 64 6. BIBLIOGRAFIA... 65 7. DODATKI... 65 7.1. PROCES URUCHOMIENIA APLIKACJI W ŚRODOWISKU NETBEANS IDE... 65 7.2. WYMAGANE BIBLIOTEKI... 68 7.3. DIAGRAMY KLAS... 70 3

1. Wstęp Ptaki oraz ich siedliska, są jednym z elementów środowiska naturalnego, ich istnienie jest niezastąpione w ekosystemie Ziemi. Wiele gatunków wyspecjalizowały się do egzystowania w konkretnych środowiskach natomiast niektóre przystosowały się do różnorodnych środowisk, nawet w takich gdzie duży wpływ na otoczenie ma człowiek. Ptaki towarzyszą człowiekowi od zarania ludzkości, mają duże znaczenie jako źródło pożywienia, niektóre z gatunków są w tym celu wykorzystywane. Większość gatunków przeznaczonych do konsumpcji to tzw. drób, czyli ptaki hodowlane. Rola gospodarcza ptaków nie jest jednak przyczyną wymierania niektórych gatunków. Głównymi czynnikami zmian liczebności ptaków i ich migracji są zmiany środowiska naturalnego, do których przyczynia się działalność człowieka. Zmiany w otoczeniu, dążące do poprawy bytu rodzaju ludzkiego, w nieodwracalny sposób wprowadzają zmiany w ekosystemie. Wiele siedlisk zostaje przekształconych dla potrzeb ludzkości takich jak np. budowy nowych dróg, infrastruktury, miejsc zamieszkania bądź pozyskiwanie zasobów naturalnych. Wpływ działań ludzkości na środowisko ma swoje nieodwracalne negatywne skutki, które w pewnym stopniu człowiek próbuje zrekompensować działaniami takimi jak ochrona wymierających gatunków. Zakładane jest wiele organizacji, które za cel obrały sobie szerzenie idei ochrony środowiska i jego elementów. Jedną z takich organizacji jest międzynarodowa organizacja BirdLife International, której polskim partnerem jest Ogólnopolskie Towarzystwo Ochrony Ptaków. BirdLife International opiniuje Czerwoną Księgę Gatunków Zagrożonych, publikowaną przez Międzynarodową Unię Ochrony Przyrody i Jej Zasobów (IUCN), zawierającą listę zagrożonych gatunków roślin i zwierząt. Ważnym elementem jest również prowadzenie edukacji społecznej, promowanie ochrony gatunków i siedlisk ptaków, co jest między innymi w założonych celach Małopolskiego Towarzystwa Ornitologicznego (MTO). MTO ma na celu przybliżenie społeczeństwa do zagadnień przyrodniczych, edukację ekologiczną, w szczególności skupia się na ptakach oraz poznawaniu ich środowiska. Bada ważne cechy opisujące przeobrażenia zachowań, liczebności oraz rozmieszczenia gatunków ptaków. Działa w zakresie ochrony ptaków oraz środowisk, w których bytują. Obszar działań MTO obejmuje Wyżynę Małopolską, Podkarpacie i Karpaty co stanowi około 60 000 km 2. Zrzesza wielu amatorów obserwacji ptaków poświęcających swój wolny czas na pracę na rzecz towarzystwa oraz organizację wypraw w celu przeprowadzenia obserwacji, wyniki 4

których zapisywane są na papierowych formularzach przesyłanych tradycyjną pocztą do siedziby MTO. Analizą nadesłanych formularzy zajmują się eksperci oraz, w przypadku stwierdzenia rzadkiego gatunku tzw. faunistycznie ważnego, Komisja Faunistyczna. Wszystkie te procedury pochłaniają dużo czasu, co przekłada się na efektywność i czas reakcji. Obecnie elektroniczna wymiana informacji poprzez Internet jest szybkim sposobem kontaktu i w zdecydowany sposób usprawnia i przyspiesza przekaz danych z jednego miejsca do drugiego. Wiele firm, instytucji wykorzystuje tą drogę, aby dotrzeć do osób docelowych oraz pozyskać informacje. Obecne technologie pozwalają na tworzenie przejrzystych, łatwych w obsłudze oraz bezpiecznych aplikacji internetowych. Relacyjne bazy danych umożliwiają przechowywanie, zarządzanie i archiwizowanie danych wprowadzanych do systemu. Taki internetowy system usprawniłby prace MTO zmierzające do pozyskiwania danych z wypraw i obserwacji. Członkowie stowarzyszenia w łatwy, szybki sposób dostarczaliby MTO informacji o zaobserwowanych gatunkach ptaków, a przede wszystkim o gatunkach objętych ochroną, ich liczebności i siedlisk, w których zostały zaobserwowane. Własny portal ornitologiczny mógłby być również swoistą wizytówką przyciągającą nowych członków. 1.1. Cel pracy Celem niniejszej pracy jest projekt i implementacja warstwy kontrolera wzorca projektowego MVC (Model-View-Controller) dla części eksperymentalnej portalu ornitologicznego. Warstwa ta jest dopełnieniem aplikacji internetowej, w której wykorzystano pozostałe warstwy. Głównym zadaniem kontrolera ma być umożliwienie wymiany informacji pomiędzy warstwą widoku a warstwą modelu. Dane pochodzące z formularzy interfejsu za pomocą kontrolerów są przetwarzane i wprowadzane do bazy danych, a żądane informacje pobierane i przesyłane do warstwy widoku. Efektem tego projektu oraz pracy dyplomowej Krystiana Heróda pod tytułem Implementacja warstwy View modułu eksperymentalnego systemu ornitologicznego zgodnie z modelem MVC i wcześniej stworzonego modelu w postaci bazy danych (więcej informacji o tytułach i autorach prac w rozdziale 2.2. Przechowywanie danych.) jest multimedialny system wspomagający prace MTO. System ma na celu usprawnienie wprowadzania informacji dotyczących dwóch procedur: obserwacji do kart atlasowych i protokołu liczenia, 5

w zakres których wchodzi również obserwacja szczegółowa. Pozwalać również na rejestracje członków towarzystwa oraz tworzenie nowego użytkownika systemu. 1.2. Technologie i narzędzia 1.2.1. Java Jest to język programowania obiektowego, zaprojektowany i stworzony przez firmę Sun Microsystems Inc. W dużej mierze składnia oraz słowa kluczowe zostały przejęte z C++. Jedną z największych zalet Javy jest przenośność, wykorzystując rozwiązanie z języka Smaltalk tzw. wirtualnej maszyny (VM). Oprogramowanie pisane w Javie może być uruchomione na dowolnym systemie operacyjnym (OS), na którym jest zainstalowana implementacja VM dla odpowiedniej architektury OS i procesora. Wirtualna Maszyna tłumaczy kompilacje kodu źródłowego Jawy (bytecode) na formę kodu wykonywalnego zrozumiałą dla konkretnej platformy systemu komputerowego, a następnie program w takiej formie zostaje wykonany. Do uruchomienia programu napisanego w Javie niezbędne jest środowisko uruchomieniowe JRE (Java Runtime Enviroment) zawierające między innymi Wirtualną Maszynę oraz podstawowe klasy w formie kodu bajtowego. Użytkownikowi nie tworzącemu oprogramowania w Javie pakiet JRE pozwala na korzystanie z programów stworzonych w omawianym języku. Natomiast dla programisty niezbędny jest zbiór narzędzi i bibliotek JDK (Java Development Kit). Pakiet ten dostarcza między innymi domyślny kompilator JAVAC, debugger JDB, archiwizator tworzący oraz zarządzający archiwami JAR, źródła klas, dokumentacje oraz pomoc. Oba produkty JRE i JDK są darmowym oprogramowaniem, dostępne dla wielu systemów operacyjnych. Do ważnych cech Javy należy zaliczyć zarządzanie pamięcią, koncepcja również przejęta z Smalltalka. Mechanizm, który jest odpowiedzialny za zwracanie pamięci do systemu podczas działania programu nazywa się Garbage Collector. Takie rozwiązanie nie wymaga od programisty używania destruktorów. Ogólne czynności zwalniania pamięci polegają na usuwaniu nieużywanych obiektów. Kolejnymi aspektami programowania w Javie jest obiektowość i dziedziczenie. Język Java jest całkowicie obiektowy, odstępstwem od tego są typy proste (int, boolean, long, float, double). Dziedziczenie w porównaniu do C++ jest jednobazowe. Rekompensatą jest wprowadzenie interfejsów, umożliwiające wielokrotne dziedziczenie. 6

1.2.2. Spring Framework 3.0 Szkielet tworzenia aplikacji w języku Java dla platformy Java EE/J2EE o otwartym kodzie źródłowym, stworzony przez Roda Johnsona. Kojarzony przede wszystkim z aplikacjami internetowymi. Charakteryzuje się łatwością i skróconym czasem w implementacji dużych jak i małych aplikacji. Koncepcja Odwróconej Kontroli realizowana jest poprzez Wstrzykiwanie Zależności. Wstrzykiwanie Zależność przeprowadzane jest na dwa sposoby: wstrzykiwanie konstruktorem i wstrzykiwania mutatorem. Ogół szablonu Spring Framework można rozdzielić na podszablony w tym między innymi: Kontener Odwróconej Kontroli, Szablon Dostępu Do Danych, Szablon Model-View- Controller, Szablon Autoryzacji i Autentykacji. Spring Framework z powodzeniem wypiera taką technologię jak EJB (Enterprise JavaBeans) i jest alternatywą w procesie tworzenia aplikacji Java EE. 1.2.3. Spring BlazeDS Integration 1.0.3 Podprojekt Spring a umożliwiający łatwe tworzenie Bogatych Aplikacji Internetowych (Rich Internet Aplication) przy użyciu Springa i Adobe Flex. Spring BlazeDS Integration korzysta z możliwości jakie daje mechanizm, z otwartym kodem źródłowym, Adobe BlazeDS i w dużym stopniu upraszcza jego konfigurację oraz użytkowanie. Głównym aspektem jest połączenie Javy z Flexem przy wykorzystaniu tzw. remote objects. Jest to mechanizm zdalnego wywoływania metod obiektów napisanych w Javie z poziomu Flex, do tego celu wykorzystuje się wydajny, binarny protokół AMF (Action Message Format). 1.2.4. SQL SQL to strukturalny język zapytań, umożliwiający zarządzanie i wykonywanie różnych operacji na relacyjnych bazach danych i jest wykorzystywany jedynie do komunikacje z bazą. SQL pozwala na tworzenie baz danych, ich modyfikacje poprzez dodawanie, aktualizowanie, usuwanie danych. Wyróżnia się trzy formy SQL a: SQL interakcyjny (autonomiczny) forma SQL wykorzystywana przy bezpośrednim wprowadzaniu lub pobierania do/z bazy danych. 7

SQL statyczny reprezentowany jest przez skrypty SQL pisane przy tworzeniu aplikacji, następnie podczas użytkowania aplikacji nie ulegają zmianom. SQL dynamiczny wykorzystywany w trakcie tworzenia aplikacji gdy nie jest możliwe określenie zapytań, zastępuję statyczny SQL. Ideą SQL jest zadawanie zapytań do bazy, rozróżnia się trzy typy zapytań: SQL DML (język manipulacji danymi) polega na dodawaniu, aktualizacji, usuwaniu, wybieraniu danych z bazy. Najważniejsze polecenia to SELECT, INSERT, UPDATE, DELETE. SQL DDL (język definicji danych) operacje na tabelach, tworzenie, usuwanie, modyfikacje. Polecenia: Create, Drop, Alter. SQL DCL (język kontroli nad danymi) - zastosowanie w nadawaniu uprawnień do obiektów bazodanowych. Polecenia: Grand, Revoke, Deny. 1.2.5. NetBeans 6.8 Środowisko programowania dla języka Java. Integruje ze sobą wiele pomocnych komponentów co wpływa na szybką i wygodną pracę. Jest to wolne oprogramowanie na licencji Common Development and Distribution License wyprodukowane przez firmę SUN. Kompatybilny z wieloma kontenerami aplikacji internetowych takich jak Apache Tomcat, GlassFish, JBoss. Poprzez instalacje dostępnych wtyczek zakres tworzonych aplikacji obejmuje nie tylko obsługę Javy ale i takich popularnych języków programowania jak C/C++, PHP i wiele innych. 1.2.6. Subversion (SVN) System kontroli wersji kodu źródłowego, najczęściej wykorzystywany przy projektach grupowych. SVN został wprowadzony w celu zastąpienia CVS (ang. Concurrent Versions System) oraz eliminacji jego wad. W większości przypadków oba systemy są funkcjonalnie zgodne, jednak SVN jest bardziej niezawodny. Zalety SVN: Historia zmian nazw katalogów oraz plików. 8

Dostępny samodzielny serwer. Szybkie tworzenie gałęzi i znaczników. Własny protokół klient/serwer. Protokół umożliwia przesyłanie różnic w plikach. Rozmiar przesyłanych danych przy zmianie pliku jest proporcjonalny do rozmiaru zmian, a nie pliku. Efektywna obsługa plików binarnych. Repozytorium przechowywane w bazie danych lub w systemie plików. 1.2.7. MVC Wzorzec projektowy MVC wymusza koncepcje podziału aplikacji na 3 niezależne warstwy. Podział ten wprowadza porządek w architekturze systemu. Takie podejście nie powoduje konieczności wykonywania dużej ilości zmian w innych miejscach systemu, każda z warstw jest od siebie oddzielona. Wyróżnia się następujące warstwy: (Model) Model danych - opis struktur danych i powiązań pomiędzy nimi (View) Interfejs, widok - to co widzi użytkownik (Controller) Logika działania - powiązania między zdarzeniami zachodzącymi w systemie 2. Dane systemu 2.1. Dane wejściowe Dane wejściowe reprezentowane są przez papierowe formularze wypełniane ręcznie przez współpracowników MTO, na podstawie których zostały zaprojektowane i zaimplementowane formularze w warstwie widoku. Po poprawnym wypełnieniu wymaganych pól dane są przesyłane do warstwy kontrolera, a następnie zapisywane w bazie danych. Dodatkowymi formularzami nie mającymi papierowego wzoru są między innymi formularz logowania, opisu wyposażenia i ubioru. 9

2.1.1. Formularz współpracownika Rys 1. Karta współpracownika. 10

2.1.2. Protokół liczenia Rys 2. Protokół liczenia. 11

2.1.3. Zestawienie Wyników Rys 3. Obserwacje do kart atlasowych. 12

2.1.4. Karta obserwacji strona pierwsza Rys 4. Karta obserwacji szczegółowej str.1 13

2.1.5. Karta obserwacji strona druga Rys 5. Karta obserwacji szczegółowej str.2 14

2.1.6. Zestawienie obserwacji sezon jesienno-zimowy strona pierwsza Rys 6. Zestawienie obserwacji sezon jesienno zimowy str.1 15

2.1.7. Zestawienie obserwacji sezon jesienno-zimowy strona druga Rys 7. Zestawienie obserwacji sezon jesienno zimowy str.2 16

2.1.8. Zestawienie obserwacji sezon wiosenno-letni strona pierwsza Rys 8. Zestawienie obserwacji sezon wiosenno letni str.1 17

2.1.9. Zestawienie obserwacji sezon wiosenno-letni strona druga Rys 9. Zestawienie obserwacji sezon wiosenno letni str.2 18

2.2. Przechowywanie danych Dane systemu są przechowywane w relacyjnej bazie danych, która jest zarządzana przez wolnodostępny system bazodanowy PostgreSQL. Wersja bazy danych wykorzystana w tym projekcje jest połączeniem oraz rozszerzeniem prac dyplomowych autorów Madej Grzegorz, Gładysz Paweł pt. Projekt i implementacja modułu zbierania danych obserwacyjnych systemu ornitologicznego oraz Mateusz Oślizło pt. Projekt i implementacja modułu encyklopedycznego serwisu ornitologicznego. Baza danych uwzględnia określanie użytkowników oraz ról jakie pełni dany użytkownik w systemie. Wyróżnione są następujące role w bazie danych: Gość Użytkownik uprzywilejowany Obserwator Obserwator automatyczny Ekspert Ekspert główny Administrator Role systemu determinują możliwości wykorzystywania, przetwarzania oraz zapisywania informacji. W aplikacji użyto jedynie dwóch typów ról Gość oraz Obserwator. Obecnie w projekcie bazy określone zostały dwa typy danych: zwykłe i wrażliwe. Baza danych przystosowana jest elastycznie do różnych typów procedur w celu których zostały przeprowadzone wyprawy. 19

Diagram ERD bazy danych, dla wersji elektronicznej diagram znajduję się na płycie w pliku Birdsmond_NEW.bmp 20

2.3. Przepływ danych W projekcie przyjęto, że warstwa VIEW nie ma bezpośredniego połączenia z warstwą MODEL. Pośrednikiem w tym przypadku jest kontroler. Poglądowy schemat przypływu danych przedstawia Rysunek 10. Rys 10. Przepływ danych w systemie. 2.3.1. Komunikacja między warstwą VIEW a warstwą CONTROLLER Po poprawnym wprowadzeniu danych przez użytkownika do formularza zostaje zdalnie wywołana metoda z obiektu obsługującego dany formularz, który został uprzednio zdefiniowany w kontekście warstwy biznesowej. Zdalny obiekt (RemotObject) jest standardowym komponentem technologii Adobe Flex 3. Poprzez odwołanie się do metod zdalnego obiektu możliwe jest ich użycie. Dane do zdalnej metody są przesyłane za pomocą wartości jako argumentów lub klasy napisanej w języku Action Script po stronie warstwy widoku i jest to klasa identyczna do klasy kontrolera, która odwzorowuje formularz. Posiada takie same właściwości oraz nazwę. Powiązanie klas jest możliwe dzięki definicji mapowania klasy warstwy VIEW i CONTROLLER tzw. alias. Do tego celu wykorzystuję się komponent 21

[RemotClass] w kodzie klasy ActionScript. Następnie dane są serializowane do postaci binarnej i przesyłane protokołem AMF poprzez HTTP. Punktem końcowym transmisji danych jest servlet, po stronie serwera. Wiadomość zostaje przekierowana poprzez servlet do MessageBroker, który kojarzy dane wejściowe z usługą docelową. Kolejnym krokiem jest już zapis do bazy danych. MessageBroker ma możliwość przesyłania danych, poprzez punkt końcowy, do klienta. Pobrane dane z bazy wysyłane są przeważnie w postaci obiektu typu java.util.list w przypadku korzystania z metod pobierających. Natomiast w przypadku metod zapisu lub usuwania zwracane jest potwierdzenie pozytywnego lub negatywnego wykonania metody w postaci zmiennych prymitywnego typu boolean. W przypadku gdy metoda zapisuje do tabeli z automatycznie generowanym kluczem podstawowym zwraca owy klucz. Przepływ informacji przedstawia Rysunek 11 1. Rys. 11. Wymiana danych pomiędzy warstwą widoku a warstwą kontrolera. 2.3.2. Komunikacja między warstwą CONTROLLER a warstwą MODEL Do łączenia się z bazą, wykonywania zapytań oraz przetwarzania otrzymanych wyników został wykorzystany interfejs niskiego poziomu JDBC (Java DataBase Connectivity). Do poprawnego połączenia oraz wykonywania operacji konieczny jest sterownik do odpowiedniego systemu bazodanowego, w przypadku tego projektu PostgreSQL. Bardzo ważnym aspektem jest utworzenie obiektu typu org.springframework.jdbc.datasource.drivermanagerdatasource w którym są 1 Na podstawie diagramu ze strony http://www.summa-tech.com/blog/2009/03/05/flex-remote-objectservices-blazeds/ 22

zdefiniowane podstawowe dane do fizycznego połączenia z bazą takie jak host, nazwę użytkownika, hasło, nazwa bazy danych. Spring Framework udostępnia klasę JdbcTemplate. W uproszczony sposób pozwala korzystać z JDBC oraz unikać błędów. Klasa ta przechwytuje i tłumaczy wyjątki na ogólnie zrozumiałe co zwalnia z korzystania bloków try, catch. Wykonuje zapytania, a wyniki zwraca korzystając z interfejsu ResultSet inicjując iteracje. Udostępnia szereg metod wykonujących zapytania SQL oraz zwracające wyniki np. queryforint(), queryforlong(), queryforlist(). Każda z tych metod zwraca typ danych taki jaki ma w nazwie. W tym projekcie do zwracania wyników zapytania najczęściej jest używana metoda queryforlist(), która zwraca listę (java.util.list) obiektów typu java.util.map reprezentujących każdy z otrzymanych rekordów. Często używaną metodą jest update(), przeznaczona do aktualizacji zapisu i usuwania, która zwraca liczbę zaktualizowanych rekordów. Tabela 1 2. prezentuje zestaw wszystkich dostępnych metod interfejsu JdbcTemplate, wykorzystywanych przy wymianie danych z bazą, oraz zwracane przez nie typy. Tabela 1. Metody interfejsu JdbcTemplate. Metoda execute(callablestatementcreator csc, CallableStatementCallback action) execute(connectioncallback action) execute(preparedstatementcreator psc, PreparedStatementCallback action) execute(statementcallback action) execute(string sql) execute(string callstring, CallableStatementCallback action) execute(string sql, PreparedStatementCallback action) query(preparedstatementcreator psc, Zwracany typ Object Object Object Object void Object Object Object 2 Dane na podstawie dokumentacji zamieszczonej pod adresem http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/core/jdbctemplate.html 23

PreparedStatementSetter pss, ResultSetExtractor rse) query(preparedstatementcreator psc, ResultSetExtractor rse) query(preparedstatementcreator psc, RowCallbackHandler rch) query(preparedstatementcreator psc, RowMapper rowmapper) Object void List query(string sql, Object[] args, int[] argtypes, ResultSetExtractor rse) Object query(string sql, Object[] args, int[] argtypes, RowCallbackHandler rch) query(string sql, Object[] args, int[] argtypes, RowMapper rowmapper) void List query(string sql, Object[] args, ResultSetExtractor rse) Object query(string sql, Object[] args, RowCallbackHandler rch) query(string sql, Object[] args, RowMapper rowmapper) query(string sql, PreparedStatementSetter pss, ResultSetExtractor rse) query(string sql, PreparedStatementSetter pss, RowCallbackHandler rch) query(string sql, PreparedStatementSetter pss, RowMapper rowmapper) query(string sql, ResultSetExtractor rse) void List Object void List Object 24

query(string sql, RowCallbackHandler rch) query(string sql, RowMapper rowmapper) queryforint(string sql) queryforint(string sql, Object[] args) queryforint(string sql, Object[] args, int[] argtypes) queryforlist(string sql) queryforlist(string sql, Class elementtype) queryforlist(string sql, Object[] args) queryforlist(string sql, Object[] args, Class elementtype) queryforlist(string sql, Object[] args, int[] argtypes) queryforlist(string sql, Object[] args, int[] argtypes, Class elementtype) queryforlong(string sql) queryforlong(string sql, Object[] args) queryforlong(string sql, Object[] args, int[] argtypes) queryformap(string sql) queryformap(string sql, Object[] args) queryformap(string sql, Object[] args, int[] argtypes) queryforobject(string sql, Class requiredtype) queryforobject(string sql, Object[] args, Class requiredtype) queryforobject(string sql, Object[] args, int[] argtypes, Class requiredtype) queryforobject(string sql, Object[] args, int[] argtypes, RowMapper rowmapper) queryforobject(string sql, Object[] args, void List int int int List List List List List List long long long Map Map Map Object Object Object Object Object 25

RowMapper rowmapper) queryforobject(string sql, RowMapper rowmapper) queryforrowset(string sql) queryforrowset(string sql, Object[] args) queryforrowset(string sql, Object[] args, int[] argtypes) update(preparedstatementcreator psc) update(preparedstatementcreator psc, KeyHolder generatedkeyholder) update(preparedstatementcreator psc, PreparedStatementSetter pss) update(string sql) update(string sql, Object[] args) update(string sql, Object[] args, int[] argtypes) update(string sql, PreparedStatementSetter pss) Object SqlRowSet SqlRowSet SqlRowSet int int int int int int int Generowane automatycznie klucze tabel są zwracane za pomocą klauzuli SQL RETURNING w zapytaniu oraz odpowiedniej metody zdeterminowanej typem zwracanego klucza. 3. Konfiguracja aplikacji 3.1. Konfiguracja aplikacji w pliku web.xml Najważniejszym plikiem w projekcie jest plik /WEB-INF/web.xml (Web Deployment Descriptor), w którym są definiowane między innymi nazwa aplikacji, poszczególne servlety, parametry inicjalizujące. Servlet jest to aplikacja napisana w języku Java uruchamiana wewnątrz kontenera servletów, który działa podobnie jak serwer WWW, tzn. przyjmuje żądania i zwraca odpowiedzi do użytkownika. W tym projekcie wykorzystano kontener servletów Apache Tomcat 6.0.20. Ogólny schemat pliku web.xml: 26

1 <?xml version="1.0" encoding="utf-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/webapp_2_5.xsd"> 3 38 39 </web-app> 40 W pliku web.xml zdefiniowano w pierwszej kolejności servelet, jego nazwę oraz odpowiadającą mu klasę. 15 <servlet> 16 <servlet-name>flex</servlet-name> 17 <servlet-class>org.springframework.web.servlet.dispatcherservlet </servlet-class> 18 <load-on-startup>1</load-on-startup> 19 </servlet> 20 21 <servlet-mapping> 22 <servlet-name>flex</servlet-name> 23 <url-pattern>/messagebroker/*</url-pattern> 24 </servlet-mapping> Servlet ten przyjmuje nazwę flex, a klasą obsługującą jest org.springframework.web.servlet.dispatcherservlet. Servlet obsługuje jedynie żądania przeglądarki /messagebroker/* co pozwala na zdalne wywoływanie obiektów z poziomu warstwy widoku napisanej w Adobe Flex, ponieważ pod taki adres są kierowane żądania zdalnych obiektów. Linia <load-on-startup>1</load-on-startup> ustawia servlet jako pierwszy w kolejności, z wszystkich servletów, podczas uruchomienia całej aplikacji. Kolejnym ważnym krokiem jest zainicjowanie tzw. obiektu nasłuchującego (klasa ContextLoaderListener), który ma za zadanie załadowanie kontekstów aplikacji, które posiadają definicje obiektów (beanów) używanych w aplikacji. 5 <listener> 6 <listener-class> org.springframework.web.context.contextloaderlistener</listener-class> 7 </listener> 8 9 <context-param> 10 <param-name>contextconfiglocation</param-name> 11 <param-value>/web-inf/applicationcontext*.xml</param-value> 12 </context-param> Obiekt nasłuchujący sprawdza parametr contextconfiglocation i jeśli jest zdefiniowany sprawdza lokalizacje kontekstu, która została podana jako wartość tego parametru. Dla wyjaśnienia znak gwiazdki * oznacza, że w tym miejscu może być dowolny 27

ciąg znaków np. gdy w katalogu /WEB-INF/ znajdują się dwa pliki applicationcontextflex.xml oraz applicationcontext.xml oba zostaną załadowane. W przypadku gdy parametr contextconfiglocation nie został zdefiniowany obiekt nasłuchujący użyje standardowo zdefiniowanego kontekstu applicationcontext.xml Pozostały fragment pliku web.xml określa czas wygaśnięcia sesji oraz plik, który ma być uruchomiony podczas startu aplikacji. 27 <session-config> 28 <session-timeout> 29 30 30 </session-timeout> 31 </session-config> 32 33 <welcome-file-list> 34 <welcome-file>redirect.jsp</welcome-file> 35 </welcome-file-list> 3.2. Kontekst aplikacji W plikach kontekstu aplikacji definiowane są obiekty tzw. beany oraz wartości ich właściwości bądź argumenty konstruktora klasy. Nazewnictwo zdeterminowane jest zdefiniowaną właściwością w pliku web.xml obiektu nasłuchującego. Więcej informacji o określaniu lokalizacji i nazwy kontekstu podano w poprzednim rozdziale 3.1. Konfiguracja aplikacji. Dodatkowo dla każdego zdefiniowanego servletu istnieje osobny kontekst aplikacji, np. dla servletu o nazwie flex w projekcie powinna istnieć lokalizacja WEB-INF/flexservlet.xml, w tym pliku jest jednie zdefiniowany obiekt servletu. W projekcie istnieją dwa pliki kontekstu aplikacji applicationcontext.xml oraz applicationcontext-flex.xml. W pierwszym z nich są definiowane obiekty menadżerów połączenia z bazą danych, obiekty sesji oraz obiekty umożliwiające obsługę wiadomości e-mail. Poniższy kod przedstawia przykładowy wpis beanu w pliku applicationcontext.xml: 15 <bean id="drivermanagerdatasourceguest" 16 class="org.springframework.jdbc.datasource.drivermanagerdatasource" 17 p:driverclassname="${jdbc.driverclassname}" 18 p:url="${jdbc.url}" 19 p:username="${jdbc.username}" 20 p:password="${jdbc.password}" /> W pliku applicationcontext-flex.xml konfigurowana jest integracja Spring z Adobe Flex (więcej inforamacji w rozdziale 3.3. Konfiguracja integracji Spring z Adobe Flex) oraz definiowane są beany zdalnie wywoływane przez warstwę widoku, 28

za co jest odpowiedzialny wpis <flex:remoting-destination ref="birdwatcherservice" />. Poniżej przykład definicji beanu i jego wystawienie jako zdalnego obiektu: 26 <bean id="birdwatcherservice" class="birdsmond.birdwatcher.birdwatcherservice" > 27 <property name="sendmail" ref="mailservice" /> 28 <property name="username" ref="username" /> 29 <property name="userpass" ref="userpass" /> 30 <property name="drivermanagerdatasourceuser" ref="drivermanagerdatasourceuser" /> 31 <property name="drivermanagerdatasourceguest" ref="drivermanagerdatasourceguest" /> 32 </bean> 33 <flex:remoting-destination ref="birdwatcherservice" /> 3.3. Konfiguracja integracji Spring z Adobe Flex Komunikację pomiędzy warstwą CONTROLLER stworzoną za pomocą Spring Framework a warstwą VIEW zaimplementowaną w Adobe Flex umożliwia mechanizm Adobe BlazeDS. Dla ułatwienia w tym projekcie skorzystano również z rozszerzenia BlazeDS jako podprojekt Spring Spring BlazeDS Integration. Pierwszym krokiem jest zdefiniowanie servletu, który będzie odbierał żądania warstwy VIEW zaimplementowanej w Flex. Żądania te przesyłane protokołem HTTP mają w swojej ścieżce lokalizację /messagebroker/* (gdzie * oznacz dowolny ciąg znaków) i jedynie takie żądanie będą odbierane przez ten servlet. Fragment tej konfiguracji jest umieszczony w pliku web.xml 15 <servlet> 16 <servlet-name>flex</servlet-name> 17 <servlet-class>org.springframework.web.servlet.dispatcherservlet </servletclass> 18 <load-on-startup>1</load-on-startup> 19 </servlet> 20 21 <servlet-mapping> 22 <servlet-name>flex</servlet-name> 23 <url-pattern>/messagebroker/*</url-pattern> 24 </servlet-mapping> Kolejnym krokiem jest zdefiniowanie pośrednika informacji MessageBroker. Utworzenie tego obiektu umożliwia znacznik <flex:message-broker/>, jest to standardowa konfiguracja, w której plik konfiguracyjny BlazeDS zlokalizowany musi być w /WEB- INF/flex/services-config.xml. Konfiguracja ta znajduję się w kontekście aplikacji w pliku applicationcontext-flex.xml. Również należy zdefiniować obiekt typu org.springframework.flex.servlet.messagebrokerhandleradapter, przez który żądania 29