Aplikacja do wysyłania poczty W ramach zadania należy zaimplementować w technologii J2EE aplikację do wysyłania poczty elektronicznej do wielu odbiorców. Aplikacja ma mieć następującą funkcjonalność: - wysyłanie poczty do jednego lub wielu odbiorców naraz - zapamiętywanie wysłanych listów w bazie danych, z możliwością przeglądania i wykorzystania do ponownej wysyłki - nie jest wymagana obsługa HTML ani załączników - wystarczy możliwość wysyłania zwykłych listów tekstowych - możliwość wykorzystywania do wysyłki listów wielu serwerów SMTP - do różnych adresatów listy mogą być wysyłane przez różne serwery SMTP - książka adresowa - możliwość dodawania, usuwania i edycji wpisów oraz wykorzystywania wpisów do wysyłki listów; wpis powinien zawierać dane osobowe, adres email oraz (opcjonalnie) nazwę serwera SMTP przez który należy wysyłać listy do danej osoby; konfiguracja aplikacji ma zawierać adres domyślnego serwera SMTP - używany gdy dla adresata nie jest podany inny serwer - ze względu na czasochłonność wysyłki listu do wielu adresatów, wysyłka powinna być realizowana asynchronicznie: komponent warstwy logiki wstawia żądania wysyłki do kolejki JMS, skąd są pobierane i realizowane przez komponent MDB - do wysyłania poczty przez SMTP używamy API JavaMail - aplikacja ma być wyposażona w dwa zupełnie różne implementacyjnie i wizualnie (ale równoważne funkcjonalnie) interfejsy użytkownika: - interfejs WWW zrealizowany z użyciem stron JSP (i opcjonalnie jednego z frameworków MVC, np. Struts, Tapestry, WebWork itp.) - interfejs w zupełnie innej technologii - np. program kliencki komunikujący się z warstwą logiki przez zdalnie wywołania (RMI, CORBA lub SOAP) lub interfejs oparty o "grubego" klienta (jeden z interfejsów w technologii XUL, Droplets itp) lub jeszcze inny; celem realizacji dwóch interfejsów jest wymuszenie całkowitej separacji warstwy prezentacji od warstwy logiki. - do komunikacji z bazą danych można użyć bezpośrednich wywołań JDBC, mechanizmów EJB (CMP), biblioteki Hibernate lub interfejsu JDO - wedle uznania - logika aplikacji może (ale nie musi) korzystać z komponentów Session Beans.