590 likes | 762 Views
Przegląd technologii J2EE. Jakub Kostynowicz Kamil Rembalski. Struktura J2EE. Aplety (Applets). Programy java działające po stronie klienta. Wykorzystują maszynę wirtualną zawarta w przeglądarce. Przegladarka wywołuje kolejno metody init(), start(), stop(), destroy(). Aplety (Applets).
E N D
Przegląd technologii J2EE Jakub Kostynowicz Kamil Rembalski
Aplety (Applets) • Programy java działające po stronie klienta. • Wykorzystują maszynę wirtualną zawarta w przeglądarce. • Przegladarka wywołuje kolejno metody init(), start(), stop(), destroy()
Aplety (Applets) • Mogą zawierać klienty sieciowe - Sockety, RMI, CORBA. • Mogą utrzymywać łączność jedynie z serwerem, z którego zostały pobrane. • Konkurencja: ActiveX, Macromedia Flash
Serwlety (Servlets) • Coś podobnego do programów CGI • Dziedziczą po klasie HttpServlet • Metody doXXX() wywoływane przez kontener serwletów po otrzymaniu odpowiedniego żądania • Metody init() i destroy(), inicjujące i niszczące serwlet.
Serwlety (Servlets) • Klasy HttpServletRequest i HttpServletResponse: dostęp do nagłówków Http, parametramów żądań, cookies, sesji, IP użytkownika wywołującego serwlet oraz metody autentykacji i informacji o rolach użytkownika
Koncept: Deskryptory • Pliki xml, pozwalające programiście opisać aplikację. • Przekazywanie parametrów inicjacyjnych dla serwletów, wiązanie serwletów z wzorami zapytań
Java Server Pages • Pliki HTML/WML zawierające skryplety - fragmenty kodu w javie. • Konwertowane (Kompilowane) do postaci serwletów • Możliwość definiowania własnych bibliotek tagów JSP • Łatwe korzystanie z JavaBeans
Koncept: Kontrolery • Centralny serwlet przechwytujacy wszystkie żądania. • W zależności od żądania (akcji) wywołuje odpowiedni Handler, obsługujacy dane zdarzenie. • Mapy zdarzenie-handler przechowywane są w plikach konfiguracyjnych.
Technologia pomocnicza: Struts • Gotowe wzorce kontrolera • Usystematyzowany schemat aplikacji • Bogata bilblioteka tagów JSP, upraszczająca tworzenie formularzy, iterowanie po listach czy choćby generowanie linków.
Java API for XML Parsing • Umożliwia pracę z danymi zapisanymi w XML'u za pomocą: • parsera - SAX • modelu danych - DOM • transformacji - XSLT
SAX • Umożliwia proste parsowanie dokumentów XML za pomocą parsera opartego na obsłudze zdarzeń. Parserowi podczepiamy napisaną przez nas klasę o odpowiednim interfejsie. Podczas parsowania parser będzie wywoływał opowiednie metody tej klasy. • Zdarzenia: startDocument, startElement, characters, endElement, endDocument
DOM (Document Object Model) • Podstawową wadą SAX'a jest sekwencyjny dostęp, DOM eliminuje tą wadę • DOM jest to zbiór interfejsów, które odwzorowują strukturę dokumentu XML. Podstawowe interfejsy to Document, Element i Node. Obiekty tych interfejsów tworzą drzewo, które również nazywa się DOM'em.
XSLT (XML Stylesheet Language Transformations) • Java API for XSLT- umożliwia transformowanie dokumentów XML za pomocą arkuszy XSL w sposób zgodny ze specyfikacją XSLT, zdefiniowaną przez W3C. • Pozwala na prezentacje danych zawartych w dokumencie XML przy pomocy arkusza XLS
Technologia pomocnicza: Ant • „Małe narzędzie do dużych zadań” • Skrypty w postaci plików xml, pozwalające kompilować nawet najbardziej złożone aplikacje. • Zupełne uwolnienie się od środowisk IDE. • Nie ma potrzeby pisania skryptów do każdej aplikacji.
Co potrafi mrówka? • Kompilować klasy Java, pliki JSP • Czytać pliki konfiguracyjne .properties • Kopiować, kasować, zmieniać nazwy plików. • Zarządzać wersjami buildów. • Komunikować się z CVS • Pakować programy do postaci plików .jar
BEA Weblogic 8.1 • Serwer aplikacji J2EE • Wszystkie technologię powiązane z J2EE • Własna maszyna wirtualna JRockit • Własne sterowniki JDBC • Pomost JCOM • Pomost Tuxedo
JDBC • API pozwalające komunikować się z bazami danych. • Każdy producent pisze sterownik JDBC do własnej bazy danych. • Możliwość wykonywania zapytań SQL i przeglądania wyników. • Pule połaczeń.
Java Naming and Directory Interface • Odpowiednik Naming Service z CORBA. • Możliwość wiązania obiektów z nazwami, tworzenia podkontekstów w postaci drzewa. • Możliwość podłączenia do LDAP • Większość serwerów aplikacji oferuje własne JNDI.
JDBC 2 • Pakiet javax.sql • klasa DataSource - fabryka połaczeń z bazą danych, powiązana z nazwą w JNDI. • Pule połaczeń. • Multipule - zbiory pul połaczeń, możliwość tworzenia pul zapasowych lub pobierania danych z kilku źródeł.
Enterprise Java Beans Co to jest java bean? Można powiedzieć, że jest to klasa (obiekt klasy) napisana w sposób zgodny z pewnym standardem, przez co mogą nią zarządzać programy. Zgodnie z zaleceniami, komponent JavaBean powinien mieć metody setXXX / getXXX dla każdego atrybutu. Bean nie znaczy fasola! Nazwa „Java” pochodzi od nazwy gatunku kawy, a „coffee bean” oznacza ziarno kawy. JavaBean raczej nie znaczy „fasolki javy”.
Enterprise Java Beans • Gotowy wzorzec obiektowej warstwy logiki biznesowej. • Ustandaryzowany sposób komunikacji z bazami danych • Dostęp do Obiektów logiki biznesowej przez RMI-IIOP i JNDI
EJB - jak to działa? • Generuje kod obiektuEJB - odpowiednika szkieletu z CORBA. • Zarządza istniejącymi ziarnami, wywołując na nich metody. • Może zapewniać trwałość ziaren. Większość rzeczy robi za nas kontener EJB.
EJB - co musimy napisać • Klasa ziarna - własciwa implementacja logiki biznesowej. Klasa ta zaweira wszystkie atrybuty i implementacje metod. • Remote interface - zbiór metod dostępnych zdalnie. • Local interface - zbiór metod dostepnych lokanie • Home interfaces - zbiór metod klasy, używanych do tworzenia/ znajdywania ziaren.
EJB - rodzaje ziaren Ile mamy rodzajów ziaren EJB?
EJB - rodzaje ziaren • Session bean - świadczy usługi klientom. Reprezentuje raczej procesy niż dane. Są ziarna sesyjne posiadające stan i nie posiadające stanu. • Entity bean - reprezentuje obiekty logiki biznesowej. Dzielą się na ziarna CMP i BMP. • Message driven bean - ziarno obsługiwane przez JMS - o tym później.
Stateless Session Beans • Ziarna nie posiadające stanu - pamietają dane na czas wywołania metody. • Kontener może bardzo łatwo tworzyć pule takich ziaren. • Przykład: ziarno kompresujace dane.
Statefull session beans • Ziarna posiadające stan. • Kontener buduje pule ziaren zapamiętywując ich stan. Ziarno jest więc usypiane (pasywowane) i budzone (aktywowane) jako zupełnie inne ziarno. • Należy uważać, jeśli zapamiętuje się stan ziarna np. w bazie danych. Jeśli w międzyczasie wystapi awaria kontenera, dane nie zostaną usunięte. • Przykład: wózek sklepowy.
Entity beans • Ziarna o trwałym stanie. • Posiadają klasy kluczy głównych. • Kontener tworzy pule tych ziaren aktywując je i pasywując. • Ich interfejsy Home posiadaja metody findByXXX(), pozwalające wyszukiwać ziarna. • Przykład: Pracownik.
Entity beans: BMP / CMP BMP / CMP (?)
Entity beans: BMP Bean managed persistance • Używając JDBC, sami piszemy metody pobierające stan ziarna z bazy danych, zapisujące ten stan oraz metody pozwalające wyszukiwać ziarna. • Sami obsługujemy relacje miedzy ziarnami - trzeba albo wczytać cały graf obiektów (aggresive loading), albo w metodach getXXX() i setXXX() znaleźć te obiekty (lazy loading) • Dużo pisania...
Entity Beans: CMP Container managed persistance • Kontener dba o zachowanie trwałości ziarna. Nie musimy pisać metod Load(), Store() itp. • Nie musimy pisać metod typu findByXXX(), jedynie zadeklarować je w interfejsie Home. • Kod jest dzięki temu kilkakrotnie krótszy, i nie musimy pisać ani jednej linijki SQL.
Entity Beans: CMP Container managed persistance Jest w deskryptorze. Deskryptor zawiera nazwy pól z bazy danych odpowiadające atrybutom ziarna oraz deklaracje asocjacji miedzy ziarnami, dzieki czemu jest w stanie wygenerować odpowiednie inserty i update’y. Jednak skąd kontener miałby wiedzieć, co oznacza findBiggerThen (int i) czy findByColor(String color) ? Jak generuje odpowiednie zapytania?
Entity Beans: CMP EJB-QL Język zapytań na Entity Beans’ach. Posiada większość konstrukcji znanych z języka sql oraz możliwość trawersowania pól obiektów. Zapytania ejb-ql zapisywane są w deskryptorach, jako opisy metod findXXX() dla kontenera. Przykład: SELECT OBJECT(a) AS a FROM StudentBean WHERE student.dataUrodzenia.miesiąc = 5
XDoclet • Dość nowa technologia. • Jej twórcy twierdzą, że jest w stanie wygenerować do 83% kodu. • Jest to gruba przesada, ale tak czy inaczej jest to mocne narzędzie. • Wcześniejsze rozwiązania: programy typu Middlegen.
XDoclet - jak to działa • W kodzie umieszczamy komentarze z odpowiednimi oznaczeniami, podobnymi do parametrów javadoc. • Na podstawie tych oznaczeń XDoclet generuje za nas „głupi kod” - wszyskie interfejsy ejb, deskryptory ejb oraz deskryptory dla wiekszości kontenerów EJB. • Współpracuje z technologią ant.
Zostawmy na momencik EJB-ki... JMS (?)
Java Messaging Service • API do łatwego, niezawodnego przesyłania danych. Dane przesyłane są w postaci „wiadomości”. • Do wiadomości można dopisywać obiekty i typy proste (klucz-wartość). • Istnieja dwa modele wysyłania wiadomości: point-to-point, gdzie wiadomośc wysyłana jest do konkretnego klienta, oraz publish/subscribe, gdzie wiadomość wysyłana jest do wszystkich klientów zarejestrowanych w temacie (topic)
EJB - message driven beans • Ziarna, dostępne przez JMS. • Jest to w zasadzie asynchroniczne wołanie metod. • JMS jest szybsze niż RMI-IIOP czy CORBA. • Najprostszy model ziaren. • Dużo problemów z bezpieczeństwem, load-balancingiem i transakcjami.
EJB - Message driven beans. Ze względu na złożoność JMS oraz fakt, że chodzi tu w zasadzie o asynchroniczne wołanie metod, ten rodzaj ziaren prawdopodobnie zostanie zastapiony ziarnami typu Asynchronicznego albo po prostu nowym interfejsem w ziarnach sesyjnych. Będzie tak, gdy specyfikacja EJB uwzględni asynchroniczne RMI. Póki co nie ma jednak niczego na ich miejsce, a programisci musza pisać ogromne ify żeby dowiedzieć się, o co w ogóle chodzi w danej wiadomości.
Sesja Enterprise JavaBean od strony klienta import javax.naming.*; public class EJBClient { public static void main (String[] argv) { // get the JNDI naming context Context initialCtx = new InitialContext (); // use the context to lookup the EJB Home interface AccountHome home=(AccountHome)initialCtx.lookup("Account"); // use the Home Interface to create a Session Bean object Account account = home.create (1234, "Athul", 1000225.28d); // invoke business methods account.credit (1000001.55d); // remove the object account.remove (); } }
Java Trasnaction API • Zarządca transakcji (ang. transaction manager) dostarcza funkcje i usługi wymagane do wyznaczania początku i końca transakcji, transakcyjnego zarządzania zasobami i synchronizacji • Serwer aplikacji (ang. application server) stanowi środowisko uruchomieniowe dla aplikacji z uwzględnieniem zarządzania stanem transakcji (np. serwer EJB) • Zarządca zasobów (ang. resource manager) umożliwia aplikacjom dostęp do zasobów. Aplikacje łączą się z zarządcą zasobów poprzez dedykowaną bibliotekę programową. Przykładem zarządców zasobów są serwery relacyjnych baz danych (komunikacja przez odpowiedni sterownik JDBC) lub serwery zarządzania komunikatami (dostępne poprzez interfejs Java Message Service - JMS) • Transakcyjna aplikacja (np. składajaca się z wielu EJB) powierza zarządzanie transakcjami serwerowi aplikacji • Zarządca komunikacji (ang. communication resource manager) umożliwia współpracę zarządców transakcji poprzez przekazywanie kontekstu transakcji
Java Trasnaction API • Transakcje dla ziaren EJB: • declarative - deklarujemy transakcje dla każdej metody w deskryptorze • programative - sami wywołujemy metody begin() i commit() • client-initiated - transakcje zaprogramowane w kodzie klienta