J2EE Project PRZEMYSŁAW SOŁTAN e-mail: kerk@moskit.ie.tu.koszalin.pl TEMATY PROJEKTÓW (0.2 build 18.12.2004)
Wstęp Tworząc projekty opieramy się na źródłach mojego projektu będącego swego rodzaju szkieletem do dalszej rozbudowy http://j2ee.ie.tu.koszalin. Projekt składa się z trzech modułów: komponenty entity beans (utrwalanie danych i relacje CMR); komponenty session bean (wzorce FacadeBean, DTO i ServiceLocator); aplikacja klas klienta (wzorce ServiceLocator i BussnesDelegate, testy JUnit) Lp ID Zagadnienia cząstkowe projektów 1 2x J2EE Rozproszenie komponentów aplikacji na dwa serwery J2EE 2 SSL Autentykacja w aplikacji EAR (protokół SSL) 3 ROLE Autoryzacja w aplikacji EAR (role użytkowników) 4 CMR Relacje pomiędzy komponentami Entity (1:1, 1:N, M:N) 5 WS Wywoływanie usług sieciowych Web Services (pakiet AXIS) 6 Properties Parametryzacja danych komponentów aplikacji EAR 7 JMS Komunikaty JMS w komponentach EJB MDB 8 LDAP Serwer katalogowy LDAP 9 junit Testy jednostkowe junit 10 log4j Mechanizm rejestracji log'ów Założenia nazewnicze Każda grupa projektowa otrzyma numer projektu, który należy używać przy tworzeniu własnych klas i interfejsów. Głównym celem jest eliminacja sytuacji, gdy kilka projektów nie będzie mogło ze sobą egzystować na jednym serwerze testowym. Np. dla grupy numer 10 wystąpią następujące warunki wstępne: Nazwa głównego pakietu ma zostać przemianowana z project na project10, a tym samym np. klasa project.entity.firma będzie teraz klasą project10.entity.firma. Wszystkie nazwy JNDI mają zostać przemianowane z dodaniem przedrostka project10 np. dla ejb/facade będzie teraz ejb/project10/facade; Wszystkie projekty mają wykorzystywać do utrwalania danych źródło bazy danych Cloudscape o nazwie jdbc/cloudscape; Nazwy (Abstract Schema Name) stosowane przy komponentach Entity i używane do budowania zapytań w EJB-QL oraz generacji kodu SQL należy zmienić dodając do każdej z nich numer projektu np. dla FirmaBean będzie nazwa FirmaBean10. W wyniku takiej modyfikacji będzie generowana tabel FirmaBean10Table w bazie Cloudscape w pewien sposób unikatowa dla każdej grupy. http://j2ee.ie.tu.koszalin.pl [Przemysław Sołtan e-mail:kerk@moskit.ie.tu.koszalin.pl ] -2-
Lista tematów Lp Opis Technologia 1 2 3 4 5 6 7 8 9 10 Rozszerzyć projekt o obsługę Konta, na które będą przekazywane środki pieniężne aktywacja dokonująca transferu gotówki ma myć dokonywana przy użyciu klientów JMS i 2 komponentów MDB. Każdy z komponentów ma obsługiwać inny typ kolejki JMS. Rozszerzyć projekt o obsługę Konta, na które będą przekazywane środki pieniężne aktywacja dokonująca transfer gotówki ma być dokonywana przy użyciu technologii WebServices (AXIS) Zasymulować komunikację dwóch serwerów J2EE na jednym komputerze i dokonać rozproszenia części komponentów Entity Bean używając interfejsów zdalnych. Dodać dodatkowe metody biznesowe rozszerzające funkcjonalność systemu o możliwość zatrudniania jednego pracownika w dwóch firmach Rozszerzyć system o komponent biznesowy ResourceBean przechowujący informacje o zasobach udostępnianych pracownikom firmy. Przez zasoby rozumiem środki trwałe jak np. komputer, samochód, telefon komórkowy. Kod aplikacji klienta ResourceClient.java ma umożliwiać wyświetlanie informacji o danym użytkowniku i zasobach jakie aktualnie posiada. W projekcie wykorzystać pakiet junit do realizacji testów jednostkowych klasy ResourceClientTest.java Zrealizować rejestrację użytkowników firmy przez zewnętrzny system wysyłania komunikatów JMS. Podczas rejestracji nowego użytkownika jego dane mają zostać także umieszczone na serwerze LDAP. Zrealizować aplikację klienta (np. działu wysyłania reklam do firm) aby pełniła rolę odbiorcy informacji o komunikatach JMS przesyłanych przez system w przypadku rejestracji nowej firmy. Rejestrację nowej firmy zrealizować jako prostą aplikację war z formularzem dodawania danych firmy. Wykorzystać wzorzec delegata biznesowego hermetyzującego kod obsługi JMS klienta. Rozszerzyć system rejestrujący pracowników o nowe pola. Dodać zestaw funkcji wyszukujących według różnych kryteriów, których deklaracje należy umieścić w interfejscie PracownikLocalHome. Kod definicji funkcji będzie generowany na podstawie języka zapytań EJB-QL. Opracować różne warianty, aby zaprezentować możliwości składniowe EJB-QL. Rozszerzyć system o komponent MagazynBean przechowujący towary danej firmy. Zamodelować mechanizm przechowywania informacji o sprzedaży danego towaru przez konkretnego pracownika. Zaprojektować metodę biznesową obliczającą prowizję (np. 1,5%) od wartości towarów sprzedanych w danym miesiącu. Rozszerzyć klasę ServiceLocator o możliwość wyszukiwania usług JMS. Zaprezentować jej działanie od strony klienta oraz od strony komponentów EJB. Jako problem do rozwiązania przy użyciu tej technologii przyjąć system, który przesyła informację o nakazie wykonania badań okresowych zatrudnionych w danej firmie. Do odbioru danych wykorzystać prosty komponent MDB przekazujący informacje na konsolę serwera. Rozszerzyć komponent PracownikBean o możliwość definiowania okresu urlopowego. Do tego celu wykorzystać wzorzec transferu danych do stworzenia klasy PracownikUrlopData.java. Zrealizować aplikację klienta, który będzie pobierał listę urlopów pracowniczych posortowaną według rozpoczęcia lub długości trwania. JMS, MDB WebService, AXIS 2xJ2EE, CMR CMR, junit JNDI, LDAP, JMS JMS, BussDelegate EJB-QL Facade, CMR ServiceLocator, JMS, MDB DTO, Facade,BussDe legate http://j2ee.ie.tu.koszalin.pl [Przemysław Sołtan e-mail:kerk@moskit.ie.tu.koszalin.pl ] -3-
Lp Opis Technologia 11 12 13 14 15 16 17 18 19 20 Rozbudować aktualną aplikację o testy jednostkowe realizowany przy pomocy projektu Cactus (http://jakarta.apache.org/cactus). Biblioteka ta to sposób na osadzanie biblioteki junit na serwerze i jej zdalne wywoływanie przez aplikację webową. Zorganizować serię testów na wszystkich klasach, a w szczególności komponentach EntityBean. Klient SOAP wykonuje zlecenie przelewu gotówki pomiędzy kontem Firmy i Pracownika. Zaadaptuj system do obsługi takiej operacji na komponentach FirmaBean i PracownikBean (każdy z komponentów rozszerzyć o pole double konto) Rozszerzyć aplikację o obsługę szyfrowania komunikacji klienta RMI z wykorzystaniem szyfrowania SSL. Opracować i opisać mechanizm szyfrowania i generacji certyfikatów dla aplikacji J2EE. Wykorzystać ANT'a do automatycznego podpisywania archiwów EAR. Rozbudować system o mechanizm wersjonowania Firm i Pracowników. Dane z systemu nie mają znikać, a jedynie się dopisywać. Wymaga to dodania dodatkowego identyfikatora do klas EntityBean zawierającego idfirmy i idpracownika, daty zmiany, oraz identyfikatora ważności danego wpisu czy jest bieżący, czy też już historyczny. Rozszerzyć metody wyszukiwania po określonym idfirmy i idpracownika. Zamodelować usługę Web Services udostępniającą możliwość realizacji raportów na temat historii zmian wprowadzanych w systemie. W tym celu każda metoda biznesowa opisana w komponencie fasady musi być wzbogacona o tworzenie obiektu Entity Bean o nazwie HistoriaBean w którym należy dokonywać zapisu czasu, wykonanej operacji i identyfikatorach id (kluczach głównych) Pracownika i/lub Firmy Rozszerz system o implementację forum na komponentach entity ForumBean i Kategoria Bean. Zrealizuj mechanizm dodawania nowych wiadomości przez autoryzowanych użytkowników. Komponent Kategoria ma umożliwiać realizacje relacji cyklicznych (kategoria może zawierać podkategorie) Opracować rozbudowaną aplikację kliencką umożliwiającą tylko odczyt danych o pracownikach i firmach. W tym celu zastosować określone ROLE dostępu do metod. Ograniczyć dostęp do metod setxxx). W projekcie należy uwzględnić wszelkie możliwości parametryzowania projektu (zmiana serwera JNDI, Properties itd...) Zaprojektować komponent sesyjny JndiBean za pomocą którego klient przez pośrednictwo fasady będzie miał dostęp do wszystkich nazw JNDI zdefiniowanych na serwerze J2EE. Zaimplementować operacje przeglądania (list), wyszukiwanie (lookup) oraz dodawania własnych nazw. Dodawanie nazw wykonać z użyciem autentykacji tylko dla określonej roli np. admin Rozszerzyć projekt o testowanie Delegata Biznesowego klienta przy pomocy biblioteki junit. Zaprezentować zestaw testów wraz z ich pogrupowaniem. Rozszerzyć projekt o testowanie Fasady Sesji umieszczonej na serwerze. W tym celu rozbudować fasadę o nowe metody i do testów użyć biblioteki JUnitEE. Zaprezentować testy wykorzystujące komunikację komponentów EJB z wykorzystaniem interfejsów zdalnych i lokalnych. Junit, Cactus SOAP, CMP SSL, ANT, Certyfikaty CMR Web Services Role, Autoryzacja CMR Autoryzacja, FacadeBean, Propertes SessionBean, JNDI JUnit, BussDelegate JUnitEE, FasadeBean http://j2ee.ie.tu.koszalin.pl [Przemysław Sołtan e-mail:kerk@moskit.ie.tu.koszalin.pl ] -4-
Lp Opis Technologia 21 22 23 24 25 26 27 Firmy wykorzystujące nasz system zostały w nim zarejestrowane. Dodatkowo każda z firm mogła się zarejestrować we własnej kolejce komunikatów (Queue) naszego serwera. Zrealizuj wysyłanie do kolejki danej firmy komunikatu podczas wstawiania i usuwania jej pracownika. Jako treść komunikatu należy przesyłać nazwisko, imię i PESEL, ale bez innych szczegółowych informacji. Wysyłki należy dokonać tylko, gdy dana firma używa kolejki. (rozszerzyć komponent FirmaBean o pole String zawierające null -brak kolejki lub jej nazwę np. jms/queuefirmaa itd... ) Opracować komponent sesyjny stanowy LicznikiBean realizujący rejestrację liczników biznesowych danego klienta. Licznik może być wykorzystany do zliczania np. liczby wywołać metody przelew, liczby nieudanych wywołać metody wypłata itd... Komponent powinien posiadań obiekt Map, którego zadaniem będzie przechowywanie par wartości (klucz=wartość). Zaimplementować wyszukiwaniem według klucza i zwiększanie jego wartości (inkrementacja). Uwaga! Zadeklarować możliwość wywoływanie metod komponentu w transakcji jak i bez nich. Zamodelować komponenty TowarBean(Entity) oraz ZakupyBean (Session). Komponent zakupów powinien posiadać możliwość podliczania ceny z uwzględnieniem stóp podatkowych za dany towar (A=22%, B=7%, C=...,...). Wartości stóp procentowych należy deklarować z poziomu konfiguracji Deploytool (nie w kodzie java). System raportowania pod wpływem otrzymania komunikatu JMS z kolejki z informacją o danej firmie (np. jej REGON) oraz treści komunikatu (np. tekst pozdrowień świątecznych) ma wysłać otrzymaną treść wszystkim pracownikom danej firmy zarejestrowanym w systemie. Do wysyłki użyć JavaMAIL i komponentu MDB. Zaprojektowany system ma być pośrednikiem pomiędzy systemami magazynowymi naszych klientów Firm. Zrealizuj mechanizm odpytywania wybranych firm (np. z danego regiony, lub o danym profilu rozszerzyć komponent FirmaBean o dodatkowe właściwości). Klient Java komunikuje się z komponentem FacadeBean, który pobiera odpowiednią listę firm. Następnie wykonuje do każdej z nich odwołanie protokołem SOAP o cenę danego towaru (np. książka o danym numerze ISBN). Podczas kolejnych odwołań następuje zapamiętanie najkorzystniejszej oferty. Po wykonaniu operacji informacja zwrotna trafia do klienta (klienta można obsługiwać także przez SOAP, RMI lub JMS). Rozbudować system o komponent ZusBean przechowujący kwotę opłaty przekazanej przez firmę za zatrudnionych pracowników. W komponencie FacadeBean zrealizować metody dodawania nowego wpisu (np. za dany miesiąc), określania kwoty na podstawie sumy kwot każdego pracownika danej firmy. Komponent PracownikBean musi posiadać pole kwotazus oraz odpowiednie metody do jego modyfikacji. Na serwerze LDAP przechowano informacje o firmach. Zaprojektować metodę aktywowaną przy pomocy komunikatu JMS, której zadaniem jest przeglądniecie drzewa LDAP i odnalezienie firm (DirContext), które nie zostały jeszcze zarejestrowane w FirmaBean. Dokonać automatycznej rejestracji firm. JMS, JNDI FacadeBean, transakcje SessionBean, Parameters JMS, MDB, JavaMail SOAP, Web Services, Session Bean FacadeBean LDAP, JMS http://j2ee.ie.tu.koszalin.pl [Przemysław Sołtan e-mail:kerk@moskit.ie.tu.koszalin.pl ] -5-
Lp Opis Technologia 28 29 30 31 32 33 34 35 36 37 38 39 40 System przechowuje informacje o pracownikach. Rozszerz jego funkcjonalność o możliwość przechowywania informacji na temat okresów pracy. W tym celu zadeklaruj komponent GrafikBean, który będzie przechowywał informację jaki pracownik, dla jakiej firmy (nie musi do niej należeć), przez jaki okres (ile godzin i od której godziny) i w jakim dniu wykonywał swoją pracę. Zadeklaruj metody wyświetlania informacji dla danego pracownika i np. grafik za dany tydzień/miesiąc dla wszystkich pracowników. Należy przemodelować system w ten sposób,że nazwa komponent PracownikBean będzie teraz określała komponent PrzesyłkaBean. W ten sposób system może pełnić rolę rejestracji firm oraz rejestracji przesyłek kurierskich, które mają trafić pod podany adres. Każda przesyłka ma posiadać pole status. Zaimplementować możliwość wycofania przesyłki (status=wycofanie), doręczenia (status=doreczono) i oczywiście tryb przesyłania (status=nadawca, status=w_drodze, status=odbiorca). Umożliwić wyświetlanie informacji o przesyłkach danej firmy według ich statusu. Zaprojektować testowanie logiczne aplikacji J2EE Project z wykorzystaniem atrapy testów MockEJB. Całość opracować z wykorzystaniem biblioteki testów jednostkowych JUnit. Dodatkowo w klasach adaptacyjnych wykorzystać bibliotekę Log4J do rejestracji logów. Przykładowe zagadnienia rozszerzające standardowy projekt: serwer LDAP FacadeBean EJB-QL MockEJB, Junit, Log4J dwa serwery J2EE ze wspólnym serwerem JNDI rejestracja komponentów w zewnętrznym systemie LDAP plik XML opisujący przelew klienta banku (Web Services) przesyłanie komunikatów JMS pomiędzy dwoma serwerami J2EE wywoływanie procedur RPC w WebService z poziomu EJB komunikacja asynchroniczna JMS dwóch systemów przelew bankowy obsługa transakcyjności deklaratywnej przelew bankowy obsługa transakcyjności programowej testy Jednostkowe junit oraz Cactus bezpieczeństwo autentykacja i autoryzacja użytkowników komponentów EJB http://j2ee.ie.tu.koszalin.pl [Przemysław Sołtan e-mail:kerk@moskit.ie.tu.koszalin.pl ] -6-
Zagadnienia podstawowe Komunikacja klienta z komponentem EJB za pośrednictwem JNDI; Budowa komponentów EJB (interfejsy i klasa); Cel i sposób realizacji wzorca Fasady; Różnice pomiędzy komponentami sesyjnymi EJB stateless i stateful oraz przykłady zastosowań; Mechanizm utrwalania danych stosowany w komponentach EJB; Mechanizm deklarowania referencji komponentów EJB w innych komponentach EJB; Cel i sposób realizacji wzorca obiektu transferu danych DTO; Różnice w definiowaniu interfejsów zdalnych i lokalnych; Omów cel stosowania abstrakcyjnych klas EntityBean dla CMP 2.X; Omów mechanizm definiowania relacji CMR komponentów entity bean; Co rozumiesz przez pojęcie transakcji? Opisz zasady ACID; Do projektu zostanie udostępniony szablon dokumentacji - (w OpenOffice.org) http://j2ee.ie.tu.koszalin.pl [Przemysław Sołtan e-mail:kerk@moskit.ie.tu.koszalin.pl ] -7-