Enterprise JavaBeans

Transkrypt

Enterprise JavaBeans
Enterprise JavaBeans
1. Wprowadzenie.
2. Przegląd komponentów EJB.
●
komponenty encyjne,
●
komponenty sesyjne,
●
komponenty sterowane komunikatami.
3. Kontener komponentów EJB: JBoss.
1
Enterprise JavaBeans
Enterprise JavaBeans (EJB) to specyfkacja modelu komponentów
serwerowych używanych w rozproszonych aplikacjach biznesowych.
Komponenty EJB reprezentują procesy biznesowe (sprzedaż,
magazynowanie, rozliczenia itp.). Aplikacja biznesowa to zbiór takich
komponentów. Komponenty są udostępniane i zarządzane poprzez
kontenery EJB. Komponenty działające w ramach jednej aplikacji nie
muszą znajdować się na jednym serwerze (kontenerze).
2
Enterprise JavaBeans
partnerzy
biznesowi
aplety, aplikacje,
RMI, CORBA
przeglądarka www
strony JSP
serwlety
komponenty EJB
komponenty encyjne
złącza
inny system
wewnętrzny
partner biznesowy
SQL
3
Przegląd komponentów
Podstawowe części, z których tworzone są aplikacje biznesowe to:
utrwalanie danych
- odbywa się w abstrakcyjnej warstwie ponad
JDBC. Polega na odwzorowaniu obiektów na zapis w bazie danych.
Utrwalanie zostało określone poprzez Java Persistence API, które
defniuje odwzorowanie dla zwykłych obiektów Javy (POJO) zwanych
także komponentami encyjnymi.
●
przesyłanie komunikatów - komponenty jak również aplikacje mogą
wymieniać
sie
wiadomościami.
EJB
wspiera
asynchroniczną
i
synchroniczną wymianę komunikatów poprzez Java Message Service
(JMS) oraz komponenty message-driven beans.
●
usługi web services – usługi realizowane poprzez sieć internet za
pośrednictwem Simple Object Access Protocol (SOAP) lub Web Service
Description Language (WDSL).
4
Komponent encyjny
Komponent encyjny (entity bean) to POJO, odwzorowany w relacyjnej
bazie danych. Komponenty encyjne modelują elementy aplikacji
biznesowych, które wyrażają się rzeczownikami.
Implementacją komponentu encyjnego jest klasa oznaczona jako
@javax.persistence.Entity
zawierająca
atrybut
poprzedzony
adnotacją @javax.persistence.Id (klucz główny)
5
Komponent encyjny
import javax.persistence.*;
@Entity
@Table(name="USERS")
public class User {
private int id;
private String name;
private int age;
@Id
@GeneratedValue
@Column(name="USER_ID")
public int getId( ) {
return id;'
}
public void setId(int pk) {
this.id = pk;
}
6
Komponent encyjny
@Column(name="USER_NAME")
public String getName( ) {
return name;
}
public void setName(String str) {
this.name = str;
}
}
@Column(name="USER_AGE")
public int getAge( ) {
return age;
}
public void setAge(int v) {
this.age = v;
}
7
Komponent korporacyjny
Komponenty korporacyjne (enterprise bean) dzielą się na dwa typy:
sesyjne (session bean) i sterowane komunikatami (message-driven
bean).
Komponenty sesyjne służą do zarządzania zadaniami realizowanymi
przez aplikację, natomiast komponenty przenoszące komunikaty
pozwalają koordynować zadania realizowane przez inne komponenty.
8
Komponent sesyjny
Implementacja komponentu sesyjnego składa się z:
●
zdalnego interfejsu oznaczonego @javax.ejb.Remote i określającego
metody dostępne dla aplikacji na zewnątrz kontenera,
●
lokalnego interfejsu oznaczonego @javax.ejb.Local i określającego
metody dostępne dla komponentów działających w ramach tego
samego kontenera,
●
końcowego
interfejsu
oznaczonego
@javax.jws.WebService
i określającego metody dostępne z zewnątrz poprzez protokół SOAP,
●
klasy implementującej komponent oznaczonej @javax.ejb.Stateful
albo @javax.ejb.Stateless.
9
Komponent sesyjny
import javax.ejb.Remote;
@Remote
public interface CalculatorRemote {
public int add(int x, int y);
public int subtract(int x, int y);
}
import javax.ejb.*;
@Stateless
public class CalculatorBean implements CalculatorRemote {
public int add(int x, int y) { return x + y; }
}
public int subtract(int x, int y) { return x - y; }
10
Komponenty stanowe
i bezstanowe
Komponenty sesyjne stanowe przechowują informację o stanie
interakcji z klientem. Stan nie jest zapisywany w bazie danych. Jest
on utrzymywany dopóki klient aktywnie korzysta z komponentu.
Później jest bezpowrotnie tracony.
●
W komponentach bezstanowych wywołania metod są niezależne.
Komponenty bezstanowe charakteryzują się większą wydajnością i
efektywniejszym zarządzaniem pamięcią ponieważ jeden komponent
może obsługiwać wielu klientów.
11
Komponenty stanowe
i bezstanowe
@Stateful
public class TravelAgentBean implements TravelAgentRemote {
// Referencja do usługi wypełniana przez kontener EJB
@PersistenceContext private EntityManager entityManager;
// Referencja do komponentu wypełniana przez kontener EJB
@EJB private ProcessPaymentRemote process;
private Customer customer;
private Cruise cruise;
private Cabin cabin;
public void setCustomer(Customer cust) {
// Nowy rekord w bazie danych
entityManager.create(cust);
customer = cust;
}
public void setCabinID(int id) {
cabin = entityManager.find(Cabin.class, id);
}
12
Komponenty stanowe
i bezstanowe
public void setCruiseID(int id) {
cruise = entityManager.find(Cruise.class, id);
}
}
public Reservation bookPassage(String card, double price)
throws IncompleteConversationalState {
if (customer == null ||cruise == null ||cabin == null){
throw new IncompleteConversationalState( );
}
try {
// Nowy komponent
Reservation reservation = new Reservation(
customer,cruise,cabin,price,new Date( ));
// zapis w bazie danych
entityManager.persist(reservation);
process.byCredit(customer,card,price);
// komponent zwracany klientowi jako POJO
return reservation;
}catch(Exception e){ throw new EJBException(e); }
}
13
Komponenty sterowane
komunikatami
Implementacja komponentu do obsługi komunikatów:
●
interfejsu Message określającego metody za pomocą których JMS
dostarcza komunikaty do komponentu
●
klasy implementującej komponent oznaczonej
@javax.ejb.MessageDriven implementującej interfejs
javax.jms.MessageListener.
14
Komponenty sterowane
komunikatami
@MessageDriven
public class ReservationProcessorBean implements
javax.jms.MessageListener {
// Referencja do usługi wypełniana przez kontener EJB
@PersistenceContext private EntityManager entityManager;
// Referencja do komponentu wypełniana przez kontener EJB
@EJB private ProcessPaymentRemote process;
public void onMessage(Message message) {
try {
MapMessage reservationMsg = (MapMessage)message;
// Odebranie referencji komponentu z wiadomości
Customer customer =
(Customer)reservationMsg.getObject("Customer");
// Odebranie innych danych
int cruisePk = reservationMsg.getInt("CruiseID");
int cabinPk = reservationMsg. getInt("CabinID");
double price = reservationMsg.getDouble("Price");
String card = reservationMsg.getString("card");
15
Komponenty sterowane
komunikatami
// Wstawienie komponentu do bazy danych
entityManager.persist(customer);
// Odnalezienie komponentów
Cruise cruise = entityManager.find(Cruise.class, cruisePK);
Cabin cabin = entityManager.find(Cabin.class, cruisePK);
// Nowy komponent encyjny
Reservation reservation = new Reservation(
customer,cruise,cabin,price,new Date( ));
entityManager.create(reservation);
}
}
// Wywołanie metody komponentu sesyjnego
process.byCredit(customer,card,price);
} catch(Exception e) {
throw new EJBException(e);
}
16
Kontener EJB
Kontener to środowisko, w ramach którego działa serwer komponentów.
Kontener zarządza obiektami EJB, pomaga im tworzyć komponenty oraz
udostępnia
usługi
związane
z
transakcjami,
bezpieczeństwem,
współbieżnością i wyszukiwaniem komponentów. Komponenty mają
dostęp
do
kontenera
poprzez
(javax.ejb.SessionContext,
czemu
podczas
obsługi
interfejs
javax.ejb.EJBContext
javax.ejb.MessageDriven-Context)
żądań
klientów
mogą
dzięki
używać
przechowywanych tam informacji.
17
JBoss - instalacja
Wymagania:
●
JDK
Instalacja:
●
pobranie http://www.jboss.org/
●
rozpakowanie lub uruchomienie instalatora
Uruchomienie:
●
run.sh (run.bat) w podkatalogu bin.
●
strona główna: http://localhost:8080/,
●
sterowanie http://localhost:8080/jmx-console,
●
zatrzymanie: shutdown.sh (shutdown.bat).
18
Struktura katalogów
bin – skrypty startowe i związane z nimi pliki.
client – przechowuje pliki konfguracyjne i pliki jar, które mogą być
wykorzystane przez aplikacje klienckie lub zewnętrzne kontenery.
lib – wewnętrzne biblioteki serwera JBoss.
server – każdy z podkatalogów umieszczonych tutaj określa inną
konfgurację serwera. Konfguracja może być przekazana przy
uruchomieniu serwera poprzez opcje -c <nazwa konfiguracji>.
19
Konfguracja serwera
W podkatalogu server początkowo znajdują sie trzy konfguracje:
minimal – niezbędne minimum do uruchomienia serwera aplikacji.
Zawiera usługi logowania, JNDI oraz skaner nowych aplikacji. Nie
zawiera kontenera serwletów, EJB i JMS.
default – domyślna konfguracja, zawierająca usługi wchodzące w skład
specyfkacji J2EE.
all – uruchamia wszystkie dostępne usługi. Zawiera RMI/IIOP, obsługę
klastrów oraz narzędzia dla usług webowych (web-services deployer),
które nie znajdują sie w konfguracji domyślnej.
20
Konfguracja serwera
Pojedyncza konfguracja serwera składa się z podkatalogów:
conf – zawiera plik jboss-service.xml konfgurujący podstawowe usługi
serwera oraz pliki konfguracyjne pozostałych usług.
data - katalog na dane dla wbudowanej bazy Hypersonic. Używany
ponadto przez JBossMQ (implementacja JMS) do przechowywania
komunikatów.
deploy – miejsce na aplikacje użytkownika (pliki jar, war oraz ear).
lib – biblioteki jar używane w danej konfguracji serwera. Można tutaj
umieszczać własne pliki: np. biblioteki JDBC.
log – miejsce na logi serwera - tworzone są z wykorzystaniem log4j.
tmp – katalog tymczasowy do przechowywania rozpakowanych aplikacji,
work – katalog roboczy wykorzystywany przez Tomcat'a do kompilacji
plików.
21
Uruchomienie aplikacji
Technologia J2EE została zaprojektowana tak, aby kod aplikacji był
niezależny od serwera na którym jest ona uruchamiana. Deskryptory
dla EJB oraz aplikacji (odpowiednio ejb-jar.xml i web.xml) także nie
muszą być modyfkowane przy zmianie kontenera J2EE. Jednakże w
celu uruchomienia aplikacji na konkretnym serwerze zwykle należy
dostarczyć specyfczne deskryptory oraz skrypty sterujące pracą bazy
danych.
JBoss używa następujących dodatkowych plików:
●
jboss.xml – opis EJB,
●
jboss-web.xml – opis aplikacji,
●
application-client.xml,
●
jbosscmp-jdbc.xml.
22
Uruchomienie prostej
aplikacji
Aplikację przygotowujemy tak jak dla serwera Tomcat i kopiujemy
ją(plik jar, war lub ear) do podkatalogu \server\default\deploy
a następnie w przeglądarce uruchamiamy stronę:
http://localhost:8080/nazwa_aplikacji/skrypt_lub_servlet
23
Podsumowanie
partnerzy
biznesowi
aplety, aplikacje,
RMI, CORBA
przeglądarka www
strony JSP
serwlety
komponenty EJB
komponenty encyjne
złącza
inny system
wewnętrzny
partner biznesowy
SQL
24

Podobne dokumenty