Przegląd technologii J2EE

advertisement
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
Download