Aplikacja aukcyjna WWW składa się z kilku komponentów przedstawionych na poniższym diagramie. Nie jest to kurs budowy całej aplikacji. Zamiast tego w tym dokumencie zostały opisane istotne zagadnienia dotyczące programowania i projektowania za pomocą różnych narzędzi dostępnych w ramach środowiska roboczego, co umożliwi wykorzystanie tej wiedzy podczas projektowania własnych aplikacji WWW.
Komponenty EJB (Enterprise JavaBeans) oferują dogodny sposób dostępu aplikacji Java do danych przechowywanych w relacyjnych bazach danych. Komponenty bean jednostki można projektować za pomocą trwałości zarządzanej przez komponent bean (BMP) lub przez kontener (CMP). Metoda CMP umożliwia większą elastyczność niż BMP, ponieważ kontener EJB wykonuje wszystkie wywołania dotyczące bazy danych zgodnie z instrukcjami przekazanymi przez komponent bean. Domyślnie narzędzia środowiska roboczego Rational generują komponenty bean jednostki za pomocą CMP. Komponent bean jednostki CMP nie zawiera kodu dostępu SQL. Umożliwia to wdrożenie komponentu bean na innych serwerach J2EE korzystających z innych baz danych bez konieczności zmiany kodu.
Istnieją różne podejścia do odwzorowywania obiektów w relacyjnych bazach danych, takie jak zstępujące, wstępujące i dwukierunkowe. W podejściu zstępującym rozpoczyna się od istniejących obiektów, a następnie w miarę potrzeb definiuje się coraz bardziej szczegółowe warstwy i kończy na projekcie bazy danych jako ostatnim kroku. W podejściu wstępującym używa się istniejącego schematu bazy danych, a następnie projektuje się warstwy zależne definiujące obiekty. W podejściu dwukierunkowym używa się istniejącej bazy danych i istniejących obiektów, a następnie projektuje się warstwy pośrednie dopasowane do obiektów w odpowiednich tabelach bazy danych.
W aplikacji Aukcja podczas projektowania komponentów EJB jednostki używa się podejścia wstępującego. Początkowo istniała baza danych Derby zawierająca tabele zgodne z potrzebnymi komponentami EJB. Po utworzeniu połączenia z bazą danych za pomocą kreatora połączenia bazy danych został użyty kreator odwzorowania EJB na RDB w celu utworzenia komponentów EJB odwzorowanych z jednej lub więcej tabel - z pewnymi wyjątkami. Na poniższym rysunku zostały przedstawione komponenty EJB jednostki użyte w aplikacji Aukcja i łączące je relacje.
Komponenty bean jednostki w aplikacji aukcyjnej nie umożliwiają bezpośredniego dostępu za pomocą klienta zdalnego. Wszystkie żądania i odpowiedzi są obsługiwane przez fasady sesji, a komponenty bean umożliwiają dostęp do danych postprocesora. Umożliwia to współużytkowany dostęp po stronie serwera do składnicy trwałych danych. W następnej sekcji zostaną dokładniej omówione fasady sesji.
Więcej informacji na temat odwzorowania komponentów bean jednostki można znaleźć w temacie pomocy Generowanie odwzorowania wstępującego.
Fasada sesji jest to interfejs między klientem i postprocesorem umożliwiający komunikację z komponentami SDO (Service Data Object) i bazą danych. Fasada sesji jest przydatna, gdy klient wysyła żądanie wymagające wykonania kilku obiektów. Wysyłanie tych żądań oddzielnie do poszczególnych obiektów może zwiększyć ruch w sieci i opóźnienia. Fasada sesji działa jak bufor między dwoma końcami, pobierając ogólne żądanie od klienta, a następnie wysyłając konkretne żądania do niezbędnych obiektów. Powoduje to zmniejszenie ruchu i upraszcza projektowanie klienta.
Grupując komponenty EJB i korzystając z dwóch różnych fasad, można zwiększyć wydajność aplikacji, ponieważ użytkownicy uzyskują dostęp tylko do potrzebnych komponentów EJB. Komponenty bean jednostki sterujące funkcjami samego serwisu WWW, takie jak kategoria, są sterowane przez fasadę systemu.
Komponenty EJB przywoływane przez fasadę są wybierane po jednym naraz za pomocą kreatora tworzenia fasady komponentu bean sesji, co zostało pokazane na poniższym diagramie. W razie potrzeby do komponentu EJB może się odwoływać więcej niż jedna fasada. Ten mechanizm nie jest wykorzystywany w aplikacji Aukcja.
Można dodać dodatkowe funkcje, dodając metody do fasad. Na przykład w fasadzie użytkownika istnieje metoda zwracająca listę użytkowników oraz metoda zwracająca listę aktywnych użytkowników. Używając tych metod jako przykładu, do fasady użytkownika można dodać inną metodę zwracającą listę wszystkich użytkowników oznaczonych jako nieaktywni.
Więcej informacji na temat fasad sesji można znaleźć w opracowaniu "Design Patterns: Session Facade" pod adresem http://java.sun.com./.
Widok Nawigacja narzędzia Projektant serwisów WWW umożliwia wizualną reprezentację układu serwisu. Wyświetla ono poszczególne strony i ich organizację hierarchiczną, a ponadto jest przydatne podczas konserwowania układu i organizacji stron w serwisie. Podczas przeciągania i upuszczania stron w edytorze następuje automatyczna aktualizacja elementów sterujących nawigacji w szablonach stron. Na przykład dla struktury nawigacji aukcji przedstawionej na poniższym diagramie można zmienić kolejność zakładek nawigacji, przenosząc stronę Sprzedaż przed stronę Przeglądaj. Projektant serwisów WWW automatycznie wygeneruje zakładki w poprawnej kolejności na wszystkich stronach. Aby uwidocznić zmiany w działającej aplikacji, należy ponownie zapisać każdą stronę korzystającą z danego szablonu nawigacji.
Oprócz właśnie opisanego widoku Nawigacja Projektant serwisów WWW udostępnia widok Szczegóły porządkujący dodatkowe elementy strony w wygodnej, umożliwiającej edycję tabeli, co zostało pokazane na następnym rysunku. Ta tabela ułatwia aktualizację właściwości stron, takich jak tytuł, autor i etykieta nawigacji.
Więcej informacji na temat korzystania z Projektanta serwisów WWW do zarządzania układem serwisu WWW można znaleźć w temacie Tworzenie struktury serwisu WWW w pomocy elektronicznej.
Środowisko robocze jest dostarczane z narzędziem do wizualnego projektowania szablonów stron oraz ze stronami WWW.
Szablony stron są to fragmenty kodu treści do wielokrotnego użytku zapewniające wspólny wygląd lub zachowanie sekcji serwisu WWW. Aby współużytkować wspólny wygląd i zachowanie, na stronach WWW są używane tylko odwołania do szablonów. Korzystanie z szablonów jest użyteczne zarówno dla użytkownika, który może łatwo nawigować w serwisie WWW, jak i dla programisty, który musi napisać tylko kod specyficzny dla konkretnej strony.
Szablony stron umożliwiają również łatwą konserwację treści serwisu WWW. Zmiany w pliku szablonu są automatycznie odzwierciedlane na każdej stronie, która się do niego odwołuje. Na przykład w aplikacji WWW Aukcja szablon maintemplate.jtpl udostępnia ogólny układ stron aukcji. Elementy strony WWW można dodać do szablonu, korzystając z palety w Projektancie stron, który umożliwia przeciąganie i upuszczanie elementów na stronę WWW. Wymagany kod HTML jest generowany automatycznie. Szablon aukcji można w ten sposób łatwo zmodyfikować na przykład w celu dodania w stopce bieżącej daty i godziny.
Wstawiając znacznik wywołujący szablon zamiast kodowania nawigacji, użytkownik może dołączyć ten sam pasek nawigacyjny do wszystkich stron serwisu. Edytor odwzorowań szablonów wstawia odwołania do szablonu na stronę WWW.
Szablony dynamiczne są następnym etapem rozwoju tej technologii, na przykład poprzez zmienianie treści strony WWW na podstawie ról lub możliwości użytkowników albo wstawianie na stronie WWW informacji specyficznych dla użytkownika. Przykładowy program Aukcja używa szablonów dynamicznych do udostępniania odsyłaczy administracyjnych na pasku nawigacyjnym tylko użytkownikom zalogowanym jako administratorzy i do zmieniania tytułu przycisku "Logowanie" na "Wylogowanie" po pomyślnym zalogowaniu użytkownika.
Więcej informacji na temat tworzenia szablonów stron WWW można znaleźć w temacie pomocy dotyczącym tworzenia szablonu strony.
Technologia JSF (JavaServer Faces) jest stosowana podczas budowania interfejsów użytkownika dla dynamicznych aplikacji WWW działających na serwerze aplikacji. JSF jest to otwarty język standardowy korzystający ze standardowej biblioteki znaczników JavaServer Faces. Znaczniki są wstawiane do kodu HTML w celu utworzenia dynamicznych stron WWW.
Środowisko JSF zarządza stanami interfejsu użytkownika dla żądań serwerów i udostępnia prosty model programistyczny obsługujący zdarzenia po stronie serwera uaktywniane przez klienta. Na przykład element JSF może zachowywać się w określony sposób dla różnych zdarzeń, takich jak kliknięcie przycisku. Projektant stron ma wbudowane funkcje, które są wizualnie wyświetlane na palecie i które można przeciągać i upuszczać na stronie WWW. Te funkcje przeciągania i upuszczania ułatwiają używanie technologii JSF, języka HTML i innych elementów skryptowych. Jest to przydatne nie tylko do kontrolowania podstawowych funkcji pola, takich jak typ wartości pola tekstowego (liczba całkowita, alfanumeryczna), ale również umożliwia ustawienie reguł sprawdzania poprawności. W Projektancie stron elementy sterujące JSF mogą zostać powiązane z danymi SDO połączonymi z każdą stroną.
Paleta Projektanta stron może służyć do dodawania dodatkowych funkcji do stron JSF. Na przykład przycisk "Kup teraz" można dodać do strony szczegółów przedmiotu w celu umożliwienia użytkownikowi kupienia przedmiotu za kwotę ustaloną przez sprzedającego.
Na poniższym rysunku zostały pokazane elementy sterujące JSF dla strony szczegółów aukcji. Pole inputText newbid może akceptować tylko liczby całkowite, co jest określane przez pole wyboru Tylko wartości całkowite znajdujące się w dolnym prawym rogu rysunku. Pole inputText ma dodatkowe ustawienia dla sprawdzania poprawności, zachowania i ułatwień dostępu zdefiniowane na zakładkach pod polem h:inputText z lewej strony u dołu rysunku. Zakładka Sprawdzanie poprawności umożliwia zdefiniowanie konkretnych reguł sprawdzania poprawności za pomocą języka Java. Na przykład poprawną wartością wejściową dla pola inputText newbid jest liczba całkowita różna od zera, większa od oferty początkowej i większa od aktualnej oferty plus jeden.
Następujący kod został wygenerowany dla pola inputText newbid na stronie itemdetails aplikacji aukcyjnej.
<h:inputText styleClass="inputText" id="newbid" required="true" size="14"> <f:convertNumber integerOnly="true" /> <f:validateLongRange minimum="#{pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean==null ? pc_Itemdetail.userFacadeLocalGetBidItemSDOByKeyResultBean.startingbid : pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean.currentbid+1}"> </f:validateLongRange> </h:inputText>
Więcej informacji na temat tworzenia plików Faces JSP można znaleźć w temacie pomocy dotyczącym technologii JavaServer Faces.
Usługa WWW została opracowana równolegle z aplikacją WWW, ponieważ nie zależy ona od aplikacji - usługa WWW jest innym środkiem uzyskania dostępu do logiki biznesowej i nie zawiera wszystkich funkcji aplikacji WWW. Szczegółowy opis tej części aplikacji aukcyjnej można znaleźć w sekcji dotyczącej usługi WWW.