Professional Documents
Culture Documents
Spis treci
Przykadowy rozdzia
Katalog ksiek
Katalog online
Zamw drukowany
katalog
Twj koszyk
Dodaj do koszyka
Cennik i informacje
Zamw informacje
o nowociach
Zamw cennik
Czytelnia
Fragmenty ksiek
online
Kontakt
Helion SA
ul. Kociuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
Helion 19912010
Spis treci
Wstp .............................................................................................. 7
Geneza ksiki .................................................................................................................. 7
Cele .................................................................................................................................. 9
Czytelnicy ....................................................................................................................... 10
Ukad zagadnie ............................................................................................................. 10
Materiay pomocnicze .................................................................................................... 11
Podzikowania ................................................................................................................ 12
Spis treci
5
4.2.3. Mechanizm zarzdzania widokami ............................................................ 238
4.2.4. Mechanizm zarzdzania stanem ................................................................. 239
4.2.5. Mechanizm przetwarzania wyrae EL ..................................................... 239
4.2.6. Mechanizm obsugi akcji ........................................................................... 243
4.3. Model komponentw ............................................................................................. 243
4.3.1. Struktura klas ............................................................................................. 244
4.3.2. Identyfikatory komponentw ..................................................................... 251
4.4. Praktyczne zastosowania obiektw PhaseListener ................................................ 255
4.4.1. Wzorzec POST-Redirect-GET ................................................................... 256
4.4.2. Generowanie danych binarnych ................................................................. 258
4.5. Zoone tabele ....................................................................................................... 260
4.5.1. Modele danych ........................................................................................... 260
4.5.2. Przykad tabeli interaktywnej ..................................................................... 261
4.6. JSF i bezpieczestwo ............................................................................................. 264
4.6.1. Bezpieczestwo zarzdzane przez kontener ............................................... 265
4.6.2. Bezpieczestwo zarzdzane przez aplikacj .............................................. 270
Dodatek E
Rozdzia 2.
Planowanie, modelowanie
i projektowanie aplikacji
JSF na platformie Java EE
Po zapoznaniu si z podstawowymi wiadomociami na temat architektury i moliwoci szkieletu JSF moemy przej do zagadnie zwizanych z wytwarzaniem realnych
aplikacji WWW w rodowisku programistycznym Eclipse Galileo. W niniejszym
rozdziale wybrane fazy wytwarzania aplikacji s zilustrowane na przykadzie Internetowego Systemu Recenzowania Publikacji (w skrcie ISRP), przeznaczonego do
zapewnienia obsugi informatycznej pracy redakcji czasopism naukowych oraz
wspomagania organizacji konferencji naukowych. Zakres funkcjonalnoci projektowanego systemu obejmuje obsug rejestracji artykuw zgaszanych przez autorw,
proces recenzji artykuw oraz administrowanie kontami uytkownikw.
Nie jest intencj autora zamieszczenie w tym miejscu penej dokumentacji systemu ISRP
jako zoonego studium przypadku uycia JSF (ang. case study), ale raczej przedstawienie pewnych praktyk projektowych zwizanych z architektur i projektowaniem
aplikacji JSF na platformie Java EE. Prezentowane rozwizania s wypadkow dowiadcze wielu osb w zakresie wykorzystania szkieletu JSF do wytwarzania warstwy prezentacji w aplikacjach o architekturze wielowarstwowej. Szczeglna uwaga
powicona jest wybranym aspektom zwizanym z czynnociami fazy przedimplementacyjnej projektu, takim jak modelowanie interfejsu uytkownika oraz projektowanie aplikacji oparte na architekturze wielowarstwowej. Zamieszczone w tym rozdziale
model i zaoenia projektowe bd rozwijane w dalszej czci ksiki i stanowi jednoczenie odniesienie dla kolejnych przykadw ilustrujcych elementy technologii JSF.
68
69
w JSF zarzdzanie wymaganiami (ang. Requirement Management), uywanie architektury bazujcej na komponentach (ang. Component-based Architecture) czy graficzne projektowanie oprogramowania.
Scenopis (ang. storyboard) jest modelem projektowym, zwykle tworzonym przez
analitykw biznesowych i projektantw interfejsu uytkownika, dostarczonym zespoowi deweloperw jako cz specyfikacji funkcjonalnej. Idea scenopisu wywodzi
si z przedstawionej wyej metodyki RUP, ktra definiuje m.in. model projektowania
interakcji oparty na dowiadczeniu uytkownika (ang. User-eXperience UX) w postaci ekranw, ich dynamicznej zawartoci i sposobu nawigacji. Typowy scenopis
zawiera pi elementw:
przypadki uycia opisujce wymagania funkcjonalne i przepywy zdarze,
model ekranw UI specyfikujcy ekrany, komponenty i elementy UX,
diagram nawigacji ilustrujcy zwizki pomidzy ekranami (przede wszystkim
70
Zaloguj
Odzyskaj haso
Wywietl szczegy
recenzji
Autor
(from Actors)
Poka szczegy
pracy
Dodaj prac
Uytkownik
uwierzytelniony
Wywietl list prac
(from Actors)
extend
Zarejestruj
Edytuj prac
include
Recenzent
(from Actors)
Dodaj recenzj
Zarzdzaj pracami
Wywietl list
recenzji
Przypisz recenzenta
do pracy
Dodaj recenzenta
Administrator
(from Actors)
Zarzdzaj
uytkownikami
include
Wywietl list
uytkownikw
Dokadny opis wykorzystania diagramw UC do modelowania funkcjonalnoci systemu Czytelnik znajdzie w ksice Jzyk UML 2.0 w modelowaniu systemw informatycznych, a wyczerpujcy opis scenariuszy przypadkw uycia (tekstowej formy
prezentacji UC) znajduje si w ksice Writing Effective Use Cases1.
Polskie wydanie: Alistair Cockburn, Jak pisa efektywne przypadki uycia, tum. Krzysztof Stencel,
Warszawa 2004.
71
oba zespoy. Model ekranw UI definiuje zbir ekranw (wraz z ich zawartoci) niezbdnych do zrealizowania wymaga funkcjonalnych okrelonych przez przypadki
uycia. W przypadku zawartoci ekranw model definiuje wycznie elementy funkcjonalne, jakie powinny znale si na nich, bez okrelania szczegw dotyczcych
typw kontrolek (np. pola tekstowego albo listy rozwijanej) czy ich rozmieszczenia.
W technice scenopisw standardowym elementom UML nadawane s nowe znaczenia
poprzez uycie stereotypw przedstawionych w tabeli 2.1.
Tabela 2.1. Stereotypy modelu UI wykorzystywane w technice scenopisw
Stereotyp
Reprezentuje
Screen
Class
Compartment
Class
Form
Class
Input
Attribute
Submit
Operation
Statyczne informacje takie jak etykiety, obrazki czy panele nie s w ogle reprezentowane w modelu UI. Dane biznesowe s przedstawiane na ekranie przy uyciu atrybutw. Jeli atrybut opatrzony jest stereotypem <<input>>, oznacza to, e suy on do
wprowadzania danych. Peny opis atrybutu prezentowany jest wedug nastpujcego
formatu: widoczno nazwa :typ liczebno =domylna_warto {waciwoci}. Zamy, e mamy ekran sucy do tworzenia konta nowego uytkownika, dostpny wycznie dla administratora systemu. Pole suce do wprowadzania uprawnie dla nowego uytkownika moe zosta opisane w nastpujcy sposb:
<<input>> +role :String 1 =reviewer {user.role==admin}
Powyszy zapis informuje nas, e atrybut role reprezentuje pole wejciowe dla danych typu String, wypeniane przez uytkownikw z uprawnieniami administratora.
Widoczno elementu okrela, czy jego zawarto jest wywietlana na ekranie (+),
czy te jest ukryta (-). Nazwa atrybutu powinna identyfikowa pole wprowadzania danych
(np. warto atrybutu name dla odpowiedniego pola formularza). Typem atrybutu moe by dowolny typ prymitywny lub obiektowy, wcznie z abstrakcyjnymi typami
danych, reprezentujcymi zoone struktury danych (takie jak listy czy mapy, ktre
mog by reprezentowane przez klasy abstrakcyjne List bd Map). Pozostae waciwoci atrybutu s opcjonalne i nie musz by definiowane. Liczebno okrela, ile instancji elementu moe by renderowanych na ekranie, warto domylna jest wartoci
uywan dla elementw, ktre nie s inicjowane, a nawiasy klamrowe umoliwiaj
zamieszczenie dodatkowych waciwoci bd ogranicze dotyczcych atrybutu, np.
w zakresie dostpu do pola danych.
Zdarzenia generowane przez interfejs uytkownika oraz akcje uytkownika reprezentowane s za pomoc operacji. Jeli operacja jest dodatkowo opatrzona stereotypem
<<submit>>, oznacza to, e wskazany element UI suy do zatwierdzania formularza
72
i generowania akcji, ktrej wynik moe wpywa na nawigacj aplikacji. Peny opis operacji prezentowany jest wedug nastpujcego formatu: widoczno nazwa (lista_
parametrw) :zwracany_typ {waciwoci}. Na przykad element wyzwalajcy akcj
polegajc na przejciu do okna edycji biecego uytkownika moe by opisany w nastpujcy sposb:
<<submit>> + edit ():String {current.user==notEmpty}
Nazwa operacji powinna by powizana z nazw metody sucej do obsugi zdarzenia wygenerowanego przez operacj lub nazw powizanego z operacj pola (np. gdy
operacja dotyczy walidacji danych wprowadzanych do pola wejciowego po stronie
klienta). Widoczno elementu okrela, czy akcja ma by podjta po stronie klienta (-),
czy po stronie serwera (+). Waciwoci dodatkowo charakteryzujce operacje zamieszczane s w opcjonalnych nawiasach klamrowych.
Na rysunku 2.2 zaprezentowano model ekranu realizujcego dwa przypadki uycia
systemu ISRP rejestracj nowego uytkownika i edycj danych uytkownika uwierzytelnionego. Obie funkcjonalnoci systemu s do podobne i operuj na jednym
zbiorze danych, wic do ich obsugi zamodelowany zosta jeden ekran. Ekran skada
si z trzech czci: nagwka (topMenu) zawierajcego przyciski nawigacji, menu dla
uwierzytelnionych uytkownikw (leftMenu) i formularza danych uytkownika. W przypadku rejestracji nowego uytkownika elementy menu leftMenu oraz przycisk zapisywania formularza nie s widoczne, podobnie jak przyciski nawigacji (patrz rysunek
2.4). Z kolei w przypadku korzystania z ekranu przez administratora wszystkie jego
elementy s widoczne.
screen
addEditUser
+
73
compartment
includes::leftMenu
input
+ city: text
+ country: select
+ department: text
+ firstName: text
+ gender: radio
+ lastName: text
+ password: text
+ phone: text
+ role {user.role==admin}: select
+ street: text
+ title: text
+ zipCode: text
compartment
includes::topMenu
+
+
+
english() : void
polish() : void
submit
+ login {user==notAuthorized}() : String
+ logout {user==authorized}() : String
+ registration {user==notAuthorized}() : String
submit
+ save {currentUser==notEmpty}() : String
+ registration {currentUser==empty}() : String
74
screen
forgotPassword
screen
assignReviewer
{user.role==admin}
+ paper.title: String
input
+ reviewers: select
submit
+ forgotPassword() : String
+ notRegistered() : String
login
assign_reviewer
assign_success
registration
compartment
:topMenu
logout_success
registration
screen
index
+ welcomeMessage: String
paper_details
screen
addEditUser
registration_success
delete
all_papers_list
compartment
:leftMenu
screen
addReview
{user.role==reviewer}
add_user
edit_user
screen
paperDetails
+
+
+
+
login_success
get_password_success
screen
papersList {user.role==admin}
+
forgot_password
submit
+ getNewPassword() : String
submit
+ assign() : String
aprove/reject
screen
login
paper.abstract: String
paper.acronym: String
paper.authors: String
paper.title: String
add_success
author_papers_list
papers_details
all_users_list
screen
reviewerPaperList
+ globalMessages: Strin [0..*]
screen
usersList {user.role==admin}
submit
+ downloadFile() : void
review_details
review_details
edit_success
add_success reviewer_papers_list
add_review
paper_details
screen
auhtorPaperList
{user.role==author}
screen
reviewDetails
delete
add_success
edit_paper
review_details
add_paper
add_new_version
edit_success
screen
addNewVersion
{user.role==author}
add_success
screen
addEditPaper
{user.role==author}
input
+ paper.file: file
submit
+ addNewVersion() : String
75
76
ControllerState
Rejestracja nieaktywna
wyjcie po
klikniciu przycisku
nawigacji
Final
start
zaznaczenie
pola wyboru
[pole=true]
zaznaczenie pola
wyboru
[pole=false]
zatwierdzenie
formularza [walidacja
poprawna]
/dodaj uytkownika
ControllerState
Rejestracja aktywna
+
+
zatwierdzenie formularza
[walidacja niepoprawna]
/poka bdy
77
Przejcia wewntrzne nie maj odrbnego oznaczenia graficznego, lecz s specyfikowane w obszarze stanu, obok definicji nastpujcych czynnoci:
entry czynnoci wykonywane w momencie, gdy obiekt przyjmuje dany stan;
do czynnoci wykonywane nieprzerwanie w czasie, gdy obiekt przebywa
w danym stanie;
exit czynnoci wykonywane w momencie opuszczenia stanu.
78
Rysunek 2.6.
Warstwowy model
architektury
wykorzystany
w aplikacji ISRP
Warstwa prezentacji
Warstwa biznesowa
Warstwa usugowa (fasady)
Programowanie komponentowe jest naturalnym rozszerzeniem programowania zorientowanego obiektowo nie posiada ono zupenie nowych atrybutw w stosunku
do programowania obiektowego, a jedynie konsekwentnie i w peni wykorzystuje cechy obiektowoci. Komponenty oferuj hermetycznie opakowane, wysokopoziomowe
funkcje realizujce logik biznesow. Zarzdzaniem komponentami zajmuje si kontener, ktry kontroluje rne aspekty ich ycia, m.in. tworzenie instancji, wprowadzanie zalenoci pomidzy nimi czy te zarzdzanie cyklem ich ycia. Kontener pozwala na ograniczenie zada stojcych przed komponentami do realizacji jedynie
funkcji biznesowych, dziki czemu s one atwe do zrozumienia, maj czytelne interfejsy i mog by rozproszone w sieci. Programowanie komponentowe boryka si jednak
z wieloma problemami implementacyjnymi, przede wszystkim z du rnorodnoci
protokow komponentowych i jzykw interfejsw, problemami ze wzajemnym porozumiewaniem si komponentw czy zoonoci infrastruktur rodowisk uruchomieniowych. Popularnymi technologiami komponentw s Enterprise Java Beans czy Spring.
Do implementacji warstwy biznesowej w zawartych w ksice przykadach wykorzystywane jest podejcie oparte na klasach POJO. Zalet tego podejcia jest brak zalenoci od technologii EJB czy Java EE oraz moliwo uycia i testowania jej kodu
bez potrzeby korzystania ze rodowiska uruchomieniowego serwera.
79
za pomoc specjalnych metod publicznych (tzw. getters & setters), ktre musz
mie odpowiednio skonstruowane nazwy, zawierajce przedrostki get-, seti opcjonalnie is- dla typu boolean, np.: public int getTemperature(), public
void setTemperature(int t), public boolean isFinished() dla waciwoci
temperature i finished;
klasa powinna by serializowalna (implementowa interfejs Serializable
lub Externalizable);
klasa nie powinna zawiera metod obsugi zdarze.
80
java.io.Serializable
java.io.Serializable
Uytkownik
mieszka
wykonuje
Recenzja
nadsya
java.io.Serializable
Kraj
java.io.Serializable
Artyku
java.io.Serializable
Pytanie
java.io.Serializable
Odpowied
81
this.countryId = countryId;
this.title = title;
this.firstName = firstName;
this.lastName = lastName;
this.organization = organization;
this.department = department;
this.street = street;
this.zipCode = zipCode;
this.city = city;
this.email = email;
this.password = password;
this.phone = phone;
this.gender = gender;
this.entryDate = entryDate;
this.role = role;
}
public Integer getId() {return this.id;}
public void setId(Integer id) {this.id = id;}
/* ...Pozostae gettery i settery ...*/
}
Podejcie polegajce na wyprowadzeniu implementacji logiki biznesowej poza model dziedzinowy i obiekty reprezentujce dane okrelane jest w literaturze mianem
anemicznego modelu dziedzinowego. Wprowadzi je Martin Fowler, ktry traktuje
takie rozwizanie jako antywzorzec. Najwaniejszym zarzutem, jaki stawia Fowler
takiemu modelowi, jest naruszenie zasad OOP w zakresie enkapsulacji i hermetyzacji kodu przetwarzaniem stanu obiektw dziedzinowych czy te ich walidacj
zajmuj si zewntrzne klasy. Inne istotne mankamenty to zmniejszenie czytelnoci
kodu oraz zwikszenie moliwoci wystpowania duplikacji w kodzie. Mimo tych wad
(wyjanionych dokadnie w artykule pod adresem http://www.martinfowler.com/bliki/
AnemicDomainModel.html) rozwizanie to jest czsto i chtnie stosowane, zwaszcza
gdy obiektowy model dziedzinowy jest generowany automatycznie, za pomoc narzdzi ORM, na podstawie istniejcego wczeniej modelu fizycznego.
wymieniony interfejs.
Obiekty usug mog zapewnia fasady dla modelu dziedzinowego (strona 83 Wzorzec fasady) oraz implementowa procesy biznesowe.
82
83
Wzorzec fasady
Wzorzec fasady jest jednym z podstawowych i jednoczenie najprostszych strukturalnych wzorcw projektowych. Zapewnia on dostp do zoonych systemw, prezentujc
uproszczony lub uporzdkowany interfejs programistyczny. Wzorzec fasady pozwala:
ukry zoono tworzonego systemu poprzez dostarczenie prostego interfejsu API,
uproci interfejs istniejcego systemu poprzez stworzenie nakadki, ktra
84
PaperService paperService;
UserService userService;
ReviewService reviewService;
CountryService countryService;
QuestionService questionService;
85
86
danych,
istnieje zaprojektowana (lub odziedziczona z innego systemu) baza danych
W dalszych punktach przyblione zostan najwaniejsze informacje dotyczce wykorzystania biblioteki Hibernate w celu zapewnienia dostpu do danych.
87
88
Hibernate Tools
Wsparcie korzystania z biblioteki Hibernate w rodowisku Eclipse zapewnia wtyczka
programistyczna Hibernate Tools, udostpniana za darmo przez Red Hat Inc. Hibernate
Tools dostarcza zestaw widokw i kreatorw zawierajcy m.in.:
kreator dla realizacji procesu inynierii wstecznej (ang. reverse engineering),
Wtyczk Hibernate Tools moemy zainstalowa wedug opisu w ramce Wtyczki programistyczne w Eclipse. Wwczas w polu Work with menedera instalacji wpisujemy nastpujcy adres:
http://download.jboss.org/jbosstools/updates/stable.
89
Poniewa pewne operacje (zapis, odczyt czy wyszukiwanie) powtarzaj si we wszystkich
DAO, celem uniknicia powielania kodu moemy zdefiniowa wsplny interfejs oraz
klas abstrakcyjn zawierajc definicj powtarzajcych si dla rnych typw operacji.
Generyczny interfejs zosta zaprezentowany na listingu 2.8, a implementujca jego
metody klasa abstrakcyjna GenericDao na listingu 2.9.
Listing 2.8. Interfejs definiujcy podstawowe operacje dla DAO
package isrp.hibernate.model.dao;
import java.util.List;
public interface GenericDaoInterface {
public abstract Object findById(int id);//wyszukiwanie po id
public abstract void save(Object object);//zapisywanie nowego obiektu
public abstract void saveOrUpdate(Object object);//zapisywanie lub modyfikowanie
//obiektu, jeli istnieje
public abstract void delete(Object object);//usuwanie obiektu
public abstract List findAll();//wyszukiwanie wszystkich obiektw
}
90
Zastosowanie klasy abstrakcyjnej GenericDao pozwala na znaczne uproszczenie implementacji konkretnych obiektw DAO. Na listingu 2.10 znajduje si kod rdowy
klasy UserDao, w ktrym zaimplementowane zostay wycznie operacje specyficzne
dla utrwalania obiektw User.
Listing 2.10. Kod rdowy klasy UserDao
package isrp.hibernate.model.dao;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import isrp.hibernate.model.businessobject.User;
import isrp.hibernate.model.util.Md5HashCode;
public class UserDao extends GenericDao {
public UserDao() {
super(User.class);//
}
public String getAdministratorEmail(){
User user = null;
Query query = session.createQuery("FROM User where role=?")
.setByte(0, new Byte("1"));
user = (User) query.uniqueResult();
return user.getEmail();
}
public List getReviewers(){
return session.createCriteria(persistedClass)
.add(Restrictions.eq("role", new Byte("3")))
.list();
}
public User authenticate(String email, String password) {
password = Md5HashCode.getMd5HashCode(password);
return (User) session.createCriteria(persistedClass)
.add(Restrictions.eq("email", email))
.add(Restrictions.eq("password", password))
.uniqueResult();
}
public User checkIfEmailExistInDB(String email) {
Query query = session.createQuery("FROM User where email=?")
.setString(0, email);
return (User) query.uniqueResult();
}
public List<User> getUsers(String sortColumn){
if (sortColumn==null){
sortColumn="firstName";
}
return (List<User>) session.createCriteria(persistedClass)
.addOrder(Order.asc(sortColumn))
.list();
}
}
91
92
abstract
abstract
abstract
abstract
abstract
abstract
UserDao getUserDao();
CountryDao getCountryDao();
PaperDao getPaperDao();
QuestionDao getQuestionDao();
ReviewDao getReviewDao();
AnswersquestionsDao getAnswersquestionsDao();
93
}
}
public void destroy() {}
public void init(FilterConfig filterConfig) throws ServletException{
factory = HibernateUtil.getSessionFactory();
if (filterConfig == null) {
log.error("HibernateSessionFilter: Nie zainicjowano filtru");
throw new ServletException();
}
}
}
Chris Richardson, POJOs in Action. Developing Enterprise Applications with Lightweight Frameworks,
Manning 2006.
Christian Bauer, Gavin King, Java Persistence with Hibernate, Manning 2006.
94
Organizujc kod aplikacji, naley pamita, e HibernateSessionFilter jest elementem warstwy widoku aplikacji WWW, podczas gdy klasa HibernateUtil zapewnia
dostp do warstwy trwaoci.
Klient
Kontener Web
Hibernate Filter
HibernateUtil
95
FacesServlet
JSF Request()
doFilter()
getSessionFactory()
beginTransaction()
service()
commit()
W dalszej czci rozdziau znajduje si opis rozwiza, jakie zapewnia Eclipse WTP
w zakresie organizacji kodu rdowego oraz integracji i wdraania skompilowanych
moduw aplikacji na serwerze.
96
Wszystkie pliki rdowe oraz inne zasoby aplikacji bd biblioteki musz by umieszczone w projekcie skadajcym si z jednego lub wielu zagniedonych katalogw.
Projekt stanowi podstawow jednostk organizacyjn kodu aplikacji i jest zapisywany
w przestrzeni projektw (ang. workspace). Projekt opisywany jest za pomoc metadanych, ktre zawieraj pomocnicze informacje o wymaganych zasobach zewntrznych, sposobie kompilacji czy rodowisku uruchomieniowym. Logiczna struktura
prezentowanych w oknie Project Explorer katalogw i zasobw projektu jest zoptymalizowana pod ktem uatwienia pracy deweloperom.
Modu aplikacji (ang. module) reprezentuje gotowy do wdroenia na serwerze aplikacji kod wynikowy projektu (powstay po jego skompilowaniu), ktry moe by reprezentowany przy uyciu plikw archiwalnych, np. WAR lub JAR. Moduy Java EE
posiadaj okrelon przez specyfikacj Java EE fizyczn struktur katalogw oraz
plikw. Moduy mog by wdraane w kontenerze Java EE zarwno w postaci spakowanych plikw archiwum, jak te rozpakowanych struktur katalogw. Eclipse
WTP wspiera wytwarzanie i wdraanie nastpujcych moduw Java EE (w nawiasach
podano typy archiwum oraz nazwy odpowiadajcych im projektw Eclipse po mylniku):
Enterprise application (EAR) Enterprise application Project,
Enterprise application client (JAR) Application Client Project,
Enterprise JavaBean (JAR) EJB Project,
Web application (WAR) Dynamic Web Project,
Resource adapter for JCA (RAR) Connector Project,
Utility module (JAR) Utility Project.
97
W materiaach pomocniczych do ksiki Czytelnik znajdzie m.in. kod moduu uytkowego ISRPModel, zawierajcy implementacj warstwy biznesowej, udostpniony
w postaci zarchiwizowanego pliku projektu Eclipse oraz skompilowanej wersji moduu w pliku JAR. Czytelnik, ktry chciaby pomin zagadnienia wytwarzania warstwy biznesowej, moe skorzysta z gotowego do uycia moduu ISRPModel i skupi
si wycznie na implementacji interfejsu uytkownika wedug wskazwek zamieszczonych w nastpnych rozdziaach.
Na rysunku 2.10 przedstawiono struktur aplikacji ISRP, ktra skada si z moduw
Web Application oraz Utility Module. Modu Web Application zawiera kod warstwy
prezentacji i jest tworzony w rodowisku Eclipse przy uyciu projektu typu Dynamic
Web Project (przykad takiego projektu zosta zaprezentowany w rozdziale 1.). Modu
Utility Module przechowuje warstw biznesow aplikacji ISRP i jest tworzony w rodowisku Eclipse przy uyciu projektu typu Utility Project.
library
JavaServer Faces
Komponenty
wspierajce
Komponenty
zarzdzane
Zasoby
Widoki JSP
Walidatory i
konwertery
Filtry
Warstwa biznesowa
interface
Interfejsy warstwy usugowej
Implementacje
usug
Model dziedzinowy
(obiekty biznesowe)
library
Hibernate
Obiekty DAO
Odwzorowania OR
Rysunek 2.10. Struktura moduw aplikacji ISRP oraz zalenoci wystpujce pomidzy nimi
98
Projekt typu Java EE Utility Project jest bardzo podobny do zwykego projektu Javy
w rodowisku Eclipse, ale posiada dodatkowy pakiet rozszerze (tzw. facet) Utility
Module (idea pakietw rozszerze Eclipse zostaa omwiona w rozdziale 1., w ramce
JSF Facet). Utility Module stanowi cz konfiguracji uruchomieniowej projektu
i umoliwia wykorzystanie skompilowanego kodu projektu w innych moduach aplikacji
korporacyjnej (Java EE). Gdy zmiany w projekcie zostan zapisane, Eclipse automatycznie go skompiluje i spakuje kod wynikowy do pliku JAR, ktry nastpnie jest publikowany (bd aktualizowany) na serwerze oraz w innych projektach, ktre z niego
korzystaj.
Ze wzgldu na opisane wyej waciwoci Utility Project znakomicie nadaje si do
przechowywania kodu warstwy biznesowej oraz interfejsu warstwy trwaoci, oczywicie pod warunkiem, e model dziedzinowy nie jest oparty na komponentach EJB
(w takim przypadku wymagany jest EJB Module).
W celu utworzenia nowego projektu Java EE Utility Project naley wykona nastpujce
kroki:
1. Z menu aplikacji wybieramy opcj File/New/Project. Pojawi si okno kreatora
99
100