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) • 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ń JSP (?) 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 (?) 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ń. JNDI (?) 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ł. EJB (?) 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? Większość rzeczy robi za nas kontener EJB. • Generuje kod obiektuEJB - odpowiednika szkieletu z CORBA. • Zarządza istniejącymi ziarnami, wywołując na nich metody. • Może zapewniać trwałość ziaren. 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: pointto-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, loadbalancingiem 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 (); } } JTA- (?) Java Trasnaction API 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 JAAS (?) Java Authorization and Authentication Service API to miało być bardzo uniwersalne, gotowe do podłączenia do dowolnego systemu odpowiedzialnego za bezpieczeństwo. Java Authorization and Authentication Service API to miało być bardzo uniwersalne, gotowe do podłączenia do dowolnego systemu odpowiedzialnego za bezpieczeństwo. Cel został osiągnięty.... Java Authorization and Authentication Service Jest to typowy przykład fragmentu programu, który wystarczy napisac raz, a potem stosować do woli w wielu aplikacjach. Wiekszość rzeczy robi za nas serwer aplikacji: my piszemy tylko klienta, moduł logowania i obiekt akcji. Serwer aplikacji powinien zapewniać obsługe ról, przechowywanie haseł, loginów. Nasza rola podczas pisania modułu logowania ogranicza się do skorzystania z narzędzi dostarczonych z serwerem. Connector architecture Connector architecture •Podstawowym problemem przy tworzeniu aplikacji rozproszonych jest to, że zazwyczaj działają w heterogenicznym środowisku. •Istnieje problem integracji aplikacji J2EE z istniejącymi systemami, nie przystosowanymi do specyfikacji J2EE. •J2EE Connector Architecture - Architektura standardowego sposobu komunikacji z systemami EIS nie napisanymi w języku Java EIS -Enterprise Information System, najczęściej systemy typu ERP (Enterprice Resource Planning) takie jak SAP R/3 •Komunikacja odbywa się wyłącznie poprzez adaptery zasobów (resource adapters). •Jeden adapter umożliwia korzystanie z systemu EIS wielu różnym komponentom EJB. •Architektura J2EECA definiuje standardowe API, które narzuca szkielet adaptera nie definiując jego metod - umożliwia tworzenie adapterów do wielu różnorodnych systemów. Connector architecture Serwery aplikacji i adaptery zasobów są oparte na technice Kontraktów. Adapter realizuje 2 rodzaje kontraktów: • Kontrakty aplikacji (Application Contract)– definiujące API, poprzez które komponenty takie jak EJB komunikują się z systemami EIS • Kontrakty systemowe (System Contract) łączą adapter zasobów z usługami zarządzanymi przez serwer J2EE (pule połączeń, transakcje, zarządzanie bezpieczeństwem) Podsumowanie Serwer aplikacji Edycja Art Technology Group Wersja Release EJB J2EE License J2EE Certif. Cena 6.0 sie-02 1.1 Tak 1.2 $15,000 CPU Express 7.0 kwi-02 Tak Tak Server 7.0 kwi-02 2.0 Tak 1.3 Workgroup Server 8.1 Beta Appserver Edition Web Server Express Standard Enterprise J2EE Technology 7.0 8.1 5.2 5.2 5.0 5.0 5.0 6.0 lut-03 lut-03 sty-03 sty-03 mar-01 sie-01 mar-02 gru-02 1.3 1.1 2.0 2.0 2.0 Tak Tak Tak Tak Tak Tak Tak Tak 1.2 1.3 1.3 1.3 Standard 6.0 gru-02 2.0 Tak 1.3 Enterprise 6.0 gru-02 2.0 Tak 1.3 Developer License v4 4.0 maj-02 2.0 Tak 1.3 $495 (basic) $3,000(Premium) $10,000 (Advantage) $17,000 (Premium) $4,000 Darmowa wersja próbna $12,000 CPU $399 Server $800 Server $12,000 CPU $35,000 CPU $1,495 Dev $5,000 CPU $5,000 Dev $10,000 CPU $10,000 Dev $20,000 CPU Darmowy Full License v4 Developer Professional Enterprise Standard Enterprise Wireless Personalization Option Developer Pre-Release 4.0 4.0 4.0 4.0 9.02 9.02 9.02 9.02 9.03 maj-02 wrz-02 wrz-02 wrz-02 mar-02 mar-02 mar-02 mar-02 cze-02 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 Tak Tak Tak Tak Tak Tak Tak Tak Tak 1.3 1.3 1.3 1.3 1.2 1.2 1.2 1.2 1.3 $899 CPU $495 Dev $5,000 CPU $10,000 CPU $10,000 CPU $20,000 CPU $10,000 CPU $10,000 CPU TBA 7.0 sie-01 1.1 Tak 1.2 $25,000 CPU 6.2 kwi-02 1.1 Tak 1.2 Na żądanie Platform Edition 7.0 paź-02 2.0 Tak 1.3 darmowe Standard Edition Developer 7.0 4.12 paź-02 2.0 wrz-02 2.0 Tak Tak 1.3 1.3 $2000 CPU Darmowy Small Bus. 4.12 wrz-02 2.0 Tak 1.3 $2995 Server Advanced 4.12 wrz-02 2.0 Tak 1.3 $7500 CPU Enterprise 4.12 wrz-02 2.0 Tak 1.3 $20,000 CPU Developer Web Standard Pro Enterprise 3.2.0 3.2.0 3.2.0 3.2.0 3.2.0 Tak Tak Tak Tak Tak 1.3 1.3 1.3 1.3 1.3 $399 Seat $999 CPU $1500 CPU $2500 CPU $15,000 CPU Dynamo Application Server WebLogic Borland Enterprise Server IBM Websphere IONA 2.0 2.0 2.0 1.3 Orbix ASP 6.0 Macromedia JRun Server Novell eXteNd Oracle 9i AS Persistence Power Tier for J2EE SAP AG Web Application Server Sun Microsystems Sun ONE Sybase EAServer Trifork Enterprise Application Server lut-03 lut-03 lut-03 lut-03 lut-03 2.0 2.0 2.0 2.0 2.0 SERWERY APLIKACJI ZGODNE Z J2EE BEA