Spis treści

Raport końcowy

1. Implementacja bazy danych

Baza danych została zrealizowana zgodnie z diagramem ERD. Kod SQL dla utworzenia tabel w PostgreSQL

--
-- PostgreSQL database dump
--

-- Dumped from database version 9.0.3
-- Dumped by pg_dump version 9.0.3
-- Started on 2011-06-19 10:37:00

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- TOC entry 1829 (class 1262 OID 16392)
-- Name: calcom; Type: DATABASE; Schema: -; Owner: -
--

CREATE DATABASE calcom WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'English_United States.1252' LC_CTYPE = 'English_United States.1252';


\connect calcom

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- TOC entry 323 (class 2612 OID 11574)
-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -
--

CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql;


SET search_path = public, pg_catalog;

--
-- TOC entry 1515 (class 1259 OID 41407)
-- Dependencies: 6
-- Name: events_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE events_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


SET default_with_oids = false;

--
-- TOC entry 1516 (class 1259 OID 41409)
-- Dependencies: 1802 6
-- Name: events; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE events (
    id integer DEFAULT nextval('events_id_seq'::regclass) NOT NULL,
    id_tag integer,
    startdate date,
    title text,
    description text,
    duration integer
);


--
-- TOC entry 1517 (class 1259 OID 41416)
-- Dependencies: 6
-- Name: friends_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE friends_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- TOC entry 1518 (class 1259 OID 41418)
-- Dependencies: 1803 6
-- Name: friends; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE friends (
    id integer DEFAULT nextval('friends_id_seq'::regclass) NOT NULL,
    id_user integer NOT NULL,
    id_friend integer NOT NULL,
    status smallint NOT NULL
);


--
-- TOC entry 1519 (class 1259 OID 41422)
-- Dependencies: 6
-- Name: tags_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE tags_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- TOC entry 1520 (class 1259 OID 41424)
-- Dependencies: 1804 6
-- Name: tags; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE tags (
    id integer DEFAULT nextval('tags_id_seq'::regclass) NOT NULL,
    name text,
    id_user integer NOT NULL,
    color integer
);


--
-- TOC entry 1521 (class 1259 OID 41431)
-- Dependencies: 6
-- Name: user_event_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE user_event_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- TOC entry 1522 (class 1259 OID 41433)
-- Dependencies: 1805 6
-- Name: user_event; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE user_event (
    id integer DEFAULT nextval('user_event_id_seq'::regclass) NOT NULL,
    id_user integer NOT NULL,
    id_event integer NOT NULL
);


--
-- TOC entry 1523 (class 1259 OID 41437)
-- Dependencies: 6
-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE users_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


--
-- TOC entry 1524 (class 1259 OID 41439)
-- Dependencies: 1806 6
-- Name: users; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE users (
    id integer DEFAULT nextval('users_id_seq'::regclass) NOT NULL,
    name character varying(30),
    login text NOT NULL,
    password character(32) NOT NULL,
    session_cookie character(32)
);


--
-- TOC entry 1808 (class 2606 OID 41447)
-- Dependencies: 1516 1516
-- Name: events_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY events
    ADD CONSTRAINT events_pkey PRIMARY KEY (id);


--
-- TOC entry 1811 (class 2606 OID 41449)
-- Dependencies: 1518 1518
-- Name: friends_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY friends
    ADD CONSTRAINT friends_pkey PRIMARY KEY (id);


--
-- TOC entry 1818 (class 2606 OID 41451)
-- Dependencies: 1524 1524
-- Name: id; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY users
    ADD CONSTRAINT id PRIMARY KEY (id);


--
-- TOC entry 1814 (class 2606 OID 41453)
-- Dependencies: 1520 1520
-- Name: tags_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY tags
    ADD CONSTRAINT tags_pkey PRIMARY KEY (id);


--
-- TOC entry 1816 (class 2606 OID 41455)
-- Dependencies: 1522 1522
-- Name: user_event_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY user_event
    ADD CONSTRAINT user_event_pkey PRIMARY KEY (id);


--
-- TOC entry 1820 (class 2606 OID 41457)
-- Dependencies: 1524 1524
-- Name: users_login_key; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY users
    ADD CONSTRAINT users_login_key UNIQUE (login);


--
-- TOC entry 1809 (class 1259 OID 41458)
-- Dependencies: 1518
-- Name: fki_friends; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX fki_friends ON friends USING btree (id_user);


--
-- TOC entry 1812 (class 1259 OID 41459)
-- Dependencies: 1520
-- Name: fki_owner; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX fki_owner ON tags USING btree (id_user);


--
-- TOC entry 1821 (class 2606 OID 41460)
-- Dependencies: 1516 1520 1813
-- Name: events_id_tag_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY events
    ADD CONSTRAINT events_id_tag_fkey FOREIGN KEY (id_tag) REFERENCES tags(id) ON DELETE SET NULL;


--
-- TOC entry 1822 (class 2606 OID 41465)
-- Dependencies: 1817 1524 1518
-- Name: friends_id_friend_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY friends
    ADD CONSTRAINT friends_id_friend_fkey FOREIGN KEY (id_friend) REFERENCES users(id) ON DELETE CASCADE;


--
-- TOC entry 1823 (class 2606 OID 41470)
-- Dependencies: 1817 1524 1518
-- Name: friends_id_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY friends
    ADD CONSTRAINT friends_id_user_fkey FOREIGN KEY (id_user) REFERENCES users(id) ON DELETE CASCADE;


--
-- TOC entry 1824 (class 2606 OID 41475)
-- Dependencies: 1520 1817 1524
-- Name: owner; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY tags
    ADD CONSTRAINT owner FOREIGN KEY (id_user) REFERENCES users(id) ON DELETE CASCADE;


--
-- TOC entry 1825 (class 2606 OID 41480)
-- Dependencies: 1807 1522 1516
-- Name: user_event_id_event_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY user_event
    ADD CONSTRAINT user_event_id_event_fkey FOREIGN KEY (id_event) REFERENCES events(id) ON DELETE CASCADE;


--
-- TOC entry 1826 (class 2606 OID 41485)
-- Dependencies: 1524 1817 1522
-- Name: user_event_id_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY user_event
    ADD CONSTRAINT user_event_id_user_fkey FOREIGN KEY (id_user) REFERENCES users(id) ON DELETE CASCADE;


-- Completed on 2011-06-19 10:37:00

--
-- PostgreSQL database dump complete
--


2. Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych

Rejestracja

Logowanie

Zmiana hasła

Zarządzanie etykietami

Zarządzanie znajomymi

3. Zdefiniowanie dokumentów do przetwarzania i prezentacji danych

W realizowanym projekcie nie istnieje potrzeba zdefiniowania dokumentów ani raportów. Zaimplementowana aplikacja ma charakter internetowego narzędzia ogólnie dostępnego dla każdego.

4. Zdefiniowanie panelu sterowania aplikacji

W panelu administracyjnym znalazły się tylko opcje związane z edycją i usuwaniem użytkowników. Ma to na celu zapewnienie bezpieczeństwa i poufności wprowadzanych informacji. Wszystkie dane związane z konkretnym użytkownikiem może zmieniać jedynie on sam w panelu klienta.

5. Zdefiniowanie makropoleceń dla realizacji typowych operacji

W projekcie zastosowano mechanizm mapowania obiektowo-relacyjnego przy wykorzystaniu biblioteki Hibernate. W związku z czym realizuje ona „za nas” wszystkie niezbędne funkcje związane z obsługą bazy danych.

6. Uruchamianie i testowanie aplikacji

Aplikacja została pomyślnie przetestowana w środowisku lokalnym jak i za pośrednictwem sieci WWW. Testy odbywały się z wykorzystaniem serwera aplikacji JBoss 6.0 Runtime Server oraz bazy danych PostgreSQL 9.0 zainstalowanej na serwerze lokalnym. Do połączenia i obsługi bazy danych wykorzystana została biblioteka Hibernate 3.5.6-Final.

7. Wprowadzanie danych

W aplikacji nie zachodzi potrzeba automatycznego wprowadzania danych. Wszystkie dane wprowadzane są ręcznie za pośrednictwem aplikacji WWW przez użytkownika systemu.

8. Wdrażanie systemu do użytkowania

Wdrażanie systemu będzie w polegało na utworzeniu bazy danych oraz skopiowaniu i skonfigurowaniu aplikacji internetowej na serwerze aplikacji JBoss należącym do klienta. Po wdrożeniu system będzie można przetestować za pomocą przeglądarki internetowej.

9. Przeprowadzenie szkolenia użytkowników.

Aplikacja jest na tyle prosta i intuicyjna, że nie wymaga specjalistycznych szkoleń dotyczących jej obsługi. Każda osoba mająca choć ogólne pojęcie o korzystaniu z komputera powinna bez problemu poradzić sobie z obsługą.

10. Zapewnienie obsługiwania systemu po wdrożeniu

Jedyną czynnością związaną z utrzymaniem systemu po wdrożeniu jest kontrola poprawności danych w bazie danych. Oprócz tego należy zapewnić obsługę panelu administracyjnego przez osobę upoważnioną, reagującą w razie kłopotów użytkowników z dostępem oraz zapewniającą usuwanie nieużywanych kont.

11. Rozwijanie i modyfikowanie aplikacji

Podczas rozwijania aplikacji należy zwrócić uwagę na rozwój, modernizację, optymalizację i naprawę wykrytych błędów w poszczególnych modułach. Aplikację będzie można rozszerzyć o następujące funkcje:

12. Opracowanie doświadczeń wynikających z realizacji projektu

Jednym z podstawowych doświadczeń, jakie udało zdobyć, jest szacowanie ilości czasu poświęconego na realizację projektu i zapoznanie się z technologiami wykorzystywanymi w projekcie. W przypadku technologii nie znanych jeszcze zachodzi potrzeba poświęcenia dużej ilości czasu na naukę oraz sposób uruchomienia i konfiguracji, jak również, na późniejsze poszukiwanie błędów w stworzonej aplikacji.

Zastosowana technologia aplikacji internetowej opartej na języku J2EE wymusza wykorzystanie serwera aplikacji. W przypadku realizowanego projektu zdecydowano się na serwer JBoss. Jednak w przypadku próby umieszczenia aplikacji w internecie pojawił się problem dostępności darmowych serwerów oferujących serwery aplikacji JBoss. Najtańszy serwer, jaki udało się znaleźć wymagał miesięcznego pokrycia kosztów utrzymania w wysokości 4$ i oferował współdzieloną wirtualną maszynę Javy. Realizując projekt np. w języku PHP zaistniały problem udało by się uniknąć.

Wykorzystując mechanizm mapowania obiektowo-relacyjnego w sposób znaczący udało się ułatwić obsługę pobierania i uaktualniania danych znajdujących się w bazie danych. Nie obyło się jednak bez problemów. W przypadku, gdy główna klasa A zawiera listę obiektów klasy B, to podczas dodania nowego obiektu do tej listy i zapisaniu obiektu klasy A w bazie, obiekty listy nie są automatycznie wczytywane ponownie (odświeżane), co stanowi problem w przypadku, gdy klucze główne nadawane są automatycznie przez bazę danych, a w programie istnieje potrzeba odwołania się do klucza głównego nowo utworzonego obiektu klasy B. Problem ten rozwiązano przez ponowne wczytanie obiektu klasy A.

Dodatkowym problemem okazało się użycie frameworka richfaces. Większość interakcji miedzy aplikacja a generowaną stroną WWW odbywa się za pośrednictwem AJAXa, co wymusza konieczność odpowiedniego projektowania formularzy oraz elementów dynamicznie zmieniających się.

13. Wykaz literatury, załączniki