Notification Server - samodzielna implementacja aplikacji
Celem zadania jest stworzenie w technologii rozproszonej WS serwera,
który zbiera i magazynuje napływające doń informacje o zdarzeniach.
Następnie, na żądanie, udostępnia owe informacje zarejestrowanym
klientom.
Przykładowa realizacja składa się z następujących elementów:
- Notification - interfejs definiujący funkcjonalność serwera (wraz z annotacjami)
- NotificationImpl - implementacja logiki biznesowej serwisu utrzymujący zbiór (kolejkę)
zdarzeń, dodający do tego zbioru nowe zdarzenia i udostępniający owe
zdarzenia klientom
- NotificationServer - Opublikowanie web serwisu
- Event - klasa opisująca pojedyncze zdarzenie, może zawierać
dowolnie wybrane pola czy metody
- EventGenerator - typ klienta, który tworzy nowe
zdarzenia i rejestruje je w serwerze
- EventMonitor - typ klienta, który pobiera instniejące zdarzenia
z serwera (i, dla przykładu, wypisuje je na stdout)
Wskazówki i pomysły
- Można dobrać się w dwie osoby i podzielić pracą!
- Oba typy klientów mogą działać jednorazowo lub też w jakiegoś
rodzaju pętli (z udziałem człoweka lub bez)
- Serwer można wyposażyć w różne kolejki zdarzeń z różnymi nazwami
(tzw. topic) - wtedy monitory mogą pobierać tylko te zdarzenia,
którymi są zainteresowane
- W WS łatwiej zaimplementować model powiadamiania typu pull
(klient sam zgłasza się po wiadomości) - spróbować zaimplementować także
model push (klient rejestruje się w serwerze jako zainteresowany i
jest automatycznie powiadamiany w chwili nadejścia wiadomości)
- Czasem warto rozbić funkcjonalność takiego serwera na dwie części
(osobno przyjmowanie i publikowanie zdarzeń) - dlaczego?
Metody i obiekty które mogą się przydać:
- Thread.sleep(int) - uśpienie (w milisekundach)
- Calendar.getInstance().getTime() - czas
- Calendar.getInstance().getTimeInMillis() - czas w [ms]
- java.util - pakiet zawierający kolekcje obiektów
- System.in.read() - czytanie z strumienia wejściowego
- DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()) - stowrzenie XMLGregorianCalendar z czasem bierzącym
Tomasz Gubała, Marek Kasztelnik