I d i J EE Introduzione a Java EE

Luca Cabibbo
Architetture Software
I
Introduzione
d i
a J
Java EE
Dispensa MW 5
ottobre 2008
1
Introduzione a Java EE
Luca Cabibbo – SwA
- Fonti
2
‰
Java Platform, Enterprise Edition
http://java.sun.com/javaee/
‰
The Java EE 5 Tutorial
http://java sun com/javaee/5/docs/tutorial/doc/
http://java.sun.com/javaee/5/docs/tutorial/doc/
‰
[SAP/2e] Chapter 16, J2EE/EJB
Introduzione a Java EE
Luca Cabibbo – SwA
- Obiettivi e argomenti
‰
Obiettivi
ƒ descrivere le possibili architetture applicative per la piattaforma
Java EE
ƒ descrivere la tecnologia EJB e il supporto alla loro esecuzione
ƒ discutere
di
le
l qualità
li à sostenute d
dalla
ll piattaforma
i
f
JJava EE
‰
Argomenti
ƒ introduzione alla piattaforma Java EE
ƒ Enterprise Bean
ƒ Session bean
ƒ Message-driven bean
ƒ Java EE e qualità
3
Introduzione a Java EE
Luca Cabibbo – SwA
* Introduzione alla piattaforma Java EE
‰
4
La piattaforma Java Enterprise Edition (Java EE)
ƒ il problema – oggi c’è il bisogno di sviluppare applicazioni
distribuite, transazionali e portabili, che sfruttino la velocità,
sicurezza ed affidabilità delle tecnologie di tipo enterprise –
queste applicazioni devono essere progettate
progettate, costruite e
prodotte con meno soldi, tempo e risorse
ƒ la soluzione Java EE – con Java EE lo sviluppo di applicazioni
enterprise con Java non è mai stato così facile o veloce –
intento di Java EE 5 è fornire agli sviluppatori un insieme
potente di API,
API per ridurre il tempo di sviluppo
sviluppo, ridurre la
complessità delle applicazioni, e migliorare le prestazioni delle
applicazioni
ƒ Java EE 5 introduce un modello di programmazione
semplificato ...
Introduzione a Java EE
Luca Cabibbo – SwA
Java EE
‰
Java Enterprise Edition (Java EE)
ƒ modello/piattaforma per la progettazione, lo sviluppo,
l’assemblaggio e il deployment di applicazioni
distribuite/enterprise
ƒ supporto per
ƒ applicazioni distribuite multi-livello
ƒ componenti riusabili
ƒ gestione unificata della sicurezza
ƒ controllo flessibile delle transazioni
ƒ interazione sincrona/asincrona
ƒ web service
ƒ gestione di dati persistenti
ƒ ...
5
Introduzione a Java EE
Luca Cabibbo – SwA
Java EE
‰
6
Alcuni obiettivi di Java EE
ƒ modello di programmazione semplificato
ƒ ma richiede una comprensione degli aspetti architetturali e di
altri aspetti resi trasparenti
ƒ supporto per qualità
li à architetturalmente
hi
l
significative
i ifi i
ƒ portabilità, disponibilità e scalabilità, sicurezza, apertura, ... –
ma come sono ottenute?
ƒ supporto per l’integrazione di sistemi esistenti
Introduzione a Java EE
Luca Cabibbo – SwA
Modello applicativo di Java EE
7
Introduzione a Java EE
Luca Cabibbo – SwA
Modello applicativo di Java EE
‰
8
Modello applicativo di Java EE
ƒ Java EE fornisce un modello per lo sviluppo di applicazioni
distribuite multi-livello
ƒ client tier, middle tier e back-end tier
ƒ client
li
tier
i – supporto per diversi
di
i tipi
i i di client
li
ƒ web tier – componenti web in esecuzione sul server Java EE
ƒ business tier – componenti di logica applicativa in
esecuzione sul server Java EE
ƒ back
back-end
end tier – EIS tier – accessibile tramite API standard
Introduzione a Java EE
Luca Cabibbo – SwA
Componenti Java EE
‰
Le applicazioni Java EE sono fatte di componenti – ce ne sono di
diverse tipologie
ƒ client applicativi e applet – componenti di tipo client
ƒ componenti web – Java Servlet, JSP, JSF – gestiti dal server
Java EE
ƒ Enterprise Java Beans (EJB) o semplicemente Enterprise Bean
– gestiti dal server Java EE
‰
I componenti sono programmi Java, il cui ciclo di vita è diverso da
quello dei programmi Java più semplici
ƒ compilazione
ƒ assemblamento
ƒ deploy
ƒ esecuzione e g
gestione a cura di un application
pp
server Java EE
9
Introduzione a Java EE
Luca Cabibbo – SwA
Livello client e comunicazione col server
10
Introduzione a Java EE
Luca Cabibbo – SwA
Livello web
11
Introduzione a Java EE
Luca Cabibbo – SwA
Livello business e EIS
12
Introduzione a Java EE
Luca Cabibbo – SwA
Contenitori Java EE
‰
La gestione dei componenti è basata su contenitori
ƒ i componenti devono essere assemblati e rilasciati (deployed)
in un contenitore
ƒ i contenitori (container) sono ambienti runtime standardizzati –
che forniscono servizi specifici ai componenti
ƒ ad es., sicurezza, gestione delle transazioni, persistenza, ...
ƒ i componenti si aspettano che questi servizi siano offerti da
tutte le implementazioni della piattaforma Java EE
ƒ l’assemblaggio
gg p
prevede la specifica
p
di p
parametri p
per
personalizzare il tipo di supporto che deve essere fornito dal
contenitore
ƒ l’erogazione
l’
i
di questi
ti servizi
i ièb
basato
t su meccanismi
i i di
intercettazione delle richieste e delegazione
13
Introduzione a Java EE
Luca Cabibbo – SwA
Introduzione a Java EE
Luca Cabibbo – SwA
Contenitori
14
Un esempio noto: applicazioni web
15
Introduzione a Java EE
Luca Cabibbo – SwA
Un esempio noto: applicazioni web
‰
Una servlet (HTTP) è una classe usata per estendere le capacità
del server che ospita l’applicazione sulla base di un modello di
programmazione
i
richiesta-risposta
i hi t i
t
‰
Ciclo di vita di una servlet – controllato dal server
ƒ quando il server riceve una richiesta per una servlet
ƒ se un’istanza non è stata creata, la crea e la inizializza
ƒ invoca il metodo di servizio – ad es., doPost – passandogli
gli oggetti richiesta e risposta
ƒ se il server ha bisogno di rimuovere la servlet
servlet, la finalizza e la
rimuove
‰
In linea di principio, un oggetto servlet può essere usato per
gestire zero o più richieste – in zero o più sessioni
16
Introduzione a Java EE
Luca Cabibbo – SwA
Un esempio noto: applicazioni web
‰
Condivisione di informazioni tra componenti web
ƒ non è opportuno che informazioni da condividere siano gestite
dall’oggetto servlet
ƒ sono usati di alcuni oggetti di supporto – gestiti dal server
ƒ contesto web
b – per gestire
i llo stato d
dell’applicazione
ll’
li
i
ƒ sessione – per gestire lo stato della sessione
ƒ richiesta
ƒ pagina
‰
Come fa il contenitore ad offrire questi servizi ai suoi componenti?
ƒ la servlet può chiedere il suo contesto al contenitore
ƒ il contenitore passa sempre la sessione alla servlet – nella
richiesta – possibile perché il server intercetta la richieste
ƒ contestualmente,
contestualmente il contenitore può offrire ulteriori servizi ai suoi
componenti
17
Introduzione a Java EE
Luca Cabibbo – SwA
Java EE: scenari applicativi
‰
18
Con Java EE sono possibili numerosi scenari applicativi, a due o
più livelli
ƒ i vari livelli sono infatti opzionali – tranne forse il livello client
Introduzione a Java EE
Luca Cabibbo – SwA
API di Java EE
19
Introduzione a Java EE
Luca Cabibbo – SwA
* Enterprise Bean
‰
20
Gli Enterprise Bean sono componenti Java EE che implementano
la tecnologia EJB
ƒ componenti server-side
ƒ la specifica EJB definisce un “modello (standard) per
componenti
componenti”
ƒ si tratta dunque di un’architettura basata su componenti
ƒ in applicazioni multi-livello
ƒ per implementare logica applicativa
ƒ per usufruire di servizi forniti dal contenitore EJB come gestione
delle transazioni, controllo della concorrenza, affidabilità,
sicurezza, scalabilità
ƒ poiché questi servizi sono disponibili, lo sviluppatore può
concentrarsi sulla soluzione di problemi di business
ƒ componenti portabili,
portabili e che possono essere riusati in
applicazioni diverse
Introduzione a Java EE
Luca Cabibbo – SwA
Tipi di enterprise Bean
‰
21
Due tipi di enterprise bean
ƒ session bean
ƒ esegue un compito per un client
ƒ message-driven bean
ƒ agisce come un listener per un certo tipo di messaggi
Introduzione a Java EE
Luca Cabibbo – SwA
Session bean
‰
22
Session bean
ƒ un session bean esegue un compito per un cliente –
rappresenta un singolo client all’interno dell’AS
ƒ serve ad implementare (incapsulare) logica applicativa
specifica per il cliente
ƒ il suo stato può riflettere (o meno) la sua interazione con un
client particolare
ƒ in linea di principio non è condiviso tra più client
Introduzione a Java EE
Luca Cabibbo – SwA
Session bean
‰
Due tipi di session bean
ƒ stateless
ƒ fornisce/rappresenta del comportamento lato server – può
anche implementare un web service
ƒ stateful
t t f l
ƒ gestisce anche lo stato della conversazione con un client –
per tutta la durata di una sessione
‰
Si noti che la presenza o l’assenza di stato
ƒ non ha niente a che vedere con il fatto che il session bean
abbia un proprio stato
ƒ riguarda il fatto che il session bean debba conservare – o meno
– lo stato della sessione/conversazione con il suo client
23
Introduzione a Java EE
Luca Cabibbo – SwA
Message-driven bean
‰
Message-driven bean
ƒ un message-driven bean consente di elaborare messaggi in
modo asincrono – agisce come un listener di messaggi JMS o
altri tipi di messaggi
ƒ definisce un metodo onMessage – invocato dal contenitore
quando è disponibile un messaggio – così come doPost di
una servlet è invocato dal contenitore quando viene ricevuta
una richiesta http
ƒ la destinazione da cui riceve messaggi è specificata dal suo
d
descrittore
itt
di deployment
d l
t
ƒ ad es., per la gestione di workflow
‰
Nota
ƒ i session bean possono essere usati per inviare e ricevere
messaggii JMS iin modo
d sincrono
i
– ma non in
i modo
d asincrono
i
24
Introduzione a Java EE
Luca Cabibbo – SwA
* Session bean
‰
25
Consideriamo il modello di programmazione degli enterprise bean
di tipo session
ƒ un session bean implementa ed espone un’interfaccia remota
ƒ i suoi client accedono ai servizi offerti mediante l’interfaccia
remota
Introduzione a Java EE
Luca Cabibbo – SwA
Modello di programmazione
‰
26
Accesso locale
ƒ oltre all’interfaccia remota, un session bean può offrire servizi
localmente, mediante un’interfaccia locale
ƒ i servizi locali possono essere acceduti solo da componenti
client che risiedono nello stesso contenitore
ƒ per brevità, ignoriamo questo aspetto
Introduzione a Java EE
Luca Cabibbo – SwA
Modello di programmazione
‰
Implementazione di un session bean
ƒ un session bean è costituito da vari elementi
ƒ l’interfaccia remota – e l’eventuale interfaccia locale
ƒ la classe che implementa il session bean
ƒ informazioni circa la sua configurazione
27
Introduzione a Java EE
Luca Cabibbo – SwA
Remote interface per Hello
package hello;
import javax.ejb.Remote;
@Remote
@R
t
public interface HelloRemote {
/* dichiara le funzionalità offerte dall’enterprise bean */
public String hello(String name);
}
session bean definito nell’ambito
nell ambito di un
progetto EJB
d compilare
da
il
e ffare il d
deploy
l su un AS
28
Introduzione a Java EE
Luca Cabibbo – SwA
Implementazione per Hello
package hello;
import javax.ejb.Stateless;
@Stateless(mappedName=“ejb/Hello”)
@Stateless(mappedName=
ejb/Hello )
public class Hello implements HelloRemote {
/* iimplementa
l
t i metodi
t di d
dell’interfaccia
ll’i t f
i remota
t */
public String hello(String name) {
return “Hello, ” + name + “!”;
}
}
sono possibili diverse convenzioni con i nomi
• HelloRemote per l’interfaccia
• HelloBean,
HelloBean HelloImpl o Hello per l’implementazione
l implementazione
29
Introduzione a Java EE
Luca Cabibbo – SwA
Client per Hello (1)
package hello.client;
iimportt javax.ejb.EJB;
j
jb EJB
import hello.HelloRemote;
public class HelloClient {
@EJB(mappedName=“ejb/Hello”)
private static HelloRemote hello;;
p
public HelloClient() { }
...
}
da compilare ed eseguire
come application client
30
Introduzione a Java EE
Luca Cabibbo – SwA
Client per Hello (2)
public static void main(String[] args) {
HelloClient client = new HelloClient();
client.doConversation();
}
public void doConversation() {
String answer = hello.hello(“Luca”);
System.out.println(answer);
}
31
Introduzione a Java EE
Luca Cabibbo – SwA
EJB ed annotazioni
‰
32
Nel codice mostrato, le annotazioni rivestono un ruolo importante
ƒ @Remote, @Local, @Stateless e @Stateful dichiarano il ruolo
svolto dalle diverse unità di programmazione
ƒ nell’esempio, quando verrà fatto il deploy dell’applicazione, il
session bean sarà registrato sul server JNDI
ƒ con un nome di default o con il nome indicato
esplicitamente – ejb/Hello
ƒ hanno a che fare con le “interfacce fornite”
ƒ@
@EJB indica una dependency
p
y injection
j
ƒ prima di iniziare l’esecuzione dell’application client, verrà
effettuata una ricerca sul server JNDI di un EJB di tipo
H ll R
HelloRemote
t (ejb/Hello)
( jb/H ll ) – il riferimento
if i
t remoto
t all bean
b
memorizzato nella variabile hello
ƒ ricerca con un nome indicato esplicitamente o di default
ƒ si tratta di un’ “interfaccia richiesta”
Introduzione a Java EE
Luca Cabibbo – SwA
EJB e composizione
‰
33
Il binding (collegamento) tra i diversi componenti runtime di
un’applicazione Java EE (in questo caso, l’EJB e l’application
client)
li t) viene
i
d
dunque effettuato
ff tt t sulla
ll b
base d
delle
ll iinformazioni
f
i i di
deployment
ƒ nell
nell’esempio
esempio, sono immerse nel codice tramite annotazioni
ƒ in pratica, potrebbero essere separate dal codice in
opportuni file di configurazione
g
ƒ si noti il tipo di dipendenze tra componenti
ƒ l’EJB non sa nulla dei suoi client
ƒ l’application client deve conoscere interfaccia e nome
simbolico dell’EJB – ma non deve sapere nulla circa la sua
particolare implementazione
Introduzione a Java EE
Luca Cabibbo – SwA
Modello di programmazione
‰
34
Si noti anche che
ƒ l’enterprise bean non viene mai creato esplicitamente dal
programmatore
ƒ come una servlet, viene creato dal contenitore, se e quando
serve
ƒ le chiamate al bean sono in realtà chiamate remote
ƒ come in Java RMI
ƒ come per le servlet, ci aspettiamo che il bean possa definire dei
metodi che verranno chiamati dal contenitore – e non dai suoi
client remoti
ƒ in momenti specifici della vita del bean
Introduzione a Java EE
Luca Cabibbo – SwA
Il session bean Counter
‰
Consideriamo un altro breve esempio
ƒ un enterprise bean di tipo session/stateful
‰
Interfaccia remota
package counter;
import javax.ejb.Remote;
@Remote
public interface CounterRemote {
/* incrementa il contatore e restituisce il suo valore */
public
bli int
i t count();
t()
}
35
Introduzione a Java EE
Luca Cabibbo – SwA
Implementazione del bean Counter
package counter;
import
p jjavax.ejb.Stateful;
j
;
import javax.annotation.*;
@Stateful(mappedName=“ejb/Counter”)
@Stateful(mappedName
ejb/Counter )
public class CounterBean implements CounterRemote {
private int val;
/* assegna un valore iniziale al contatore */
@PostConstruct
un metodo annotato @
@PostConstruct
public
bli void
id initialize()
i iti li () {
viene eseguito subito dopo la
this.val = 0;
costruzione dell’istanza del bean
}
/* incrementa il contatore e restituisce il suo valore */
public int count() {
val++; return val;
}
}
36
Introduzione a Java EE
Luca Cabibbo – SwA
Client per Counter (1)
package counter.client;
import javax.ejb.EJB;
javax ejb EJB;
import counter.CounterRemote;
public class CounterClient {
@EJB(mappedName=“ejb/Counter”)
private static CounterRemote counter;
public CounterClient() { }
public static void main(String[] args) {
CounterClient client = new CounterClient();
client.doConversation();
();
}
da compilare ed eseguire
come application client
... segue ...
}
37
Introduzione a Java EE
Luca Cabibbo – SwA
Client per Counter (2)
public void doConversation() {
for (int i=1; i<=50; i++) {
System.out.println( counter.count() );
/* stamperà 1, 2, ..., 50
g
mandati in esecuzione
* anche se vengono
* più client concorrenti */
}
}
38
Introduzione a Java EE
Luca Cabibbo – SwA
Ciclo di vita dei session bean
‰
39
La programmazione degli enterprise bean richiede la conoscenza
del loro ciclo di vita
ƒ durante alcuni eventi significativi della vita di un enterprise
bean, vengono infatti invocati eventuali metodi etichettati con
delle opportune annotazioni
Introduzione a Java EE
Luca Cabibbo – SwA
Ciclo di vita dei session bean stateless
‰
40
Ad esempio, si consideri un session bean (stateless) che fornisce
un metodo findProduct(int id) per effettuare la ricerca di un
Product in una base di dati
ƒ findProduct potrebbe ottenere una connessione alla base di
dati, fare l’interrogazione, e chiudere la connessione
ƒ la connessione jdbc potrebbe essere riutilizzata in più
esecuzioni di findProduct – aprendola in un metodo annotato
@PostConstruct e chiudendola in un metodo annotato
@PostConstruct,
@PreDestroy
Introduzione a Java EE
Luca Cabibbo – SwA
Ciclo di vita dei session bean stateful
‰
41
Il ciclo di vita dei session bean stateful è più complesso
ƒ un session bean stateful può essere “passivato”
passivato – lo stato della
sessione può essere serializzato e salvato automaticamente in
memoria secondaria – per essere poi “attivato” (ricaricato) in
memoria in un secondo tempo
Introduzione a Java EE
Luca Cabibbo – SwA
Ciclo di vita dei session bean stateful (1/2)
‰
42
I metodi di callback del ciclo di vita devono essere pubblici, senza
parametri, void – ed annotati come segue
ƒ @PostConstruct
ƒ invocato dal contenitore su istanze del bean appena
costruite – dopo che tutte le iniezioni di dipendenze sono
state completate – prima della prima invocazione dei metodi
di business
ƒ @PreDestroy
ƒ invocato dopo l’esecuzione di metodi annotati @Remove –
prima che l’istanza del bean sia rimossa dal contenitore
ƒ @Remove
ƒ invocato
i
t su richiesta
i hi t d
dall client
li t per iindicare
di
lla fifine d
della
ll
sessione – ad es., @Remove public void endSession() {}
Introduzione a Java EE
Luca Cabibbo – SwA
Ciclo di vita dei session bean stateful (2/2)
ƒ @PrePassivate
invocato prima che il contenitore passivi il bean (serializza e
salva lo stato) – prima che il container rimuovi il bean
temporaneamente dalla sua memoria
ƒ @PostActivate
ƒ invocato dal contenitore dopo aver attivato (caricato e
deserializzato lo stato) il bean
ƒ
43
Introduzione a Java EE
Luca Cabibbo – SwA
Attivazione e passivazione
‰
Il contenitore EJB gestisce un pool di oggetti EJB
ƒ assegna le richieste ad oggetti in questo pool
ƒ può decidere di riassegnare un oggetto, inizialmente assegnato
ad un client, ad un client diverso
ƒ il client
li
di
diverso potrebbe
bb non aver ancora completato
l
lla sua
sessione
‰
Il container gestisce lo swapping di oggetti EJB mediante
ƒ passivazione – lo stato del bean serializzato e salvato in
memoria – il metodo @PrePassivate specifica come rilasciare
risorse non serializzabili (ad es., connessioni)
ƒ attivazione – lo stato del bean ripristinato dai dati salvati in
memoria – il metodo @PostActivate specifica come riprendere
risorse
44
Introduzione a Java EE
Luca Cabibbo – SwA
* Message-driven bean
‰
45
Message-driven bean
ƒ un message-driven bean è un enterprise bean che consente di
elaborare messaggi in modo asincrono
ƒ funge normalmente da ascoltatore di messaggi JMS
ƒ questii messaggii JMS possono essere iinviati
i id
da altri
l i
componenti Java EE e non
Introduzione a Java EE
Luca Cabibbo – SwA
Similitudini e differenze
‰
I message-driven bean sono simili ai session bean stateless
ƒ le istanze sono equivalenti, poiché non gestiscono stato
conversazionale
ƒ un message-driven bean può elaborare messaggi da più clienti
‰
I message-driven bean sono diversi dai session bean
ƒ poiché non vengono acceduti mediante un’interfaccia – ma
tramite una destinazione JMS
46
Introduzione a Java EE
Luca Cabibbo – SwA
Produttore di messaggi
‰
Come produttore, può essere utilizzato l’application client
SimpleProducer mostrato nel contesto di JMS
ƒ che genera ed invia un certo numero di messaggi di testo alla
destinazione jms/MyQueue
47
Introduzione a Java EE
Luca Cabibbo – SwA
Esempio – SimpleMessageConsumerEJB (1)
package simplemessageconsumer;
import
p jjavax.ejb.*;
j ;
import javax.jms.*;
import java.util.logging.*;
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(
propertyName = "destinationType",
propertyValue = "javax.jms.Queue"
) }},
mappedName = “jms/MyQueue")
public class SimpleMessageConsumer implements MessageListener {
...
}
48
Introduzione a Java EE
Luca Cabibbo – SwA
Esempio – SimpleMessageConsumerEJB (2)
@MessageDriven(...)
public class SimpleMessageConsumer implements MessageListener {
public SimpleMessageConsumer()
p
p
g
() { }
public void onMessage(Message message) {
...
}
}
49
Introduzione a Java EE
Luca Cabibbo – SwA
Esempio – SimpleMessageConsumer (3)
public void onMessage(Message message) {
Logger logger = Logger.getLogger("SimpleMessageConsumer");
try {
if (message instanceof TextMessage) {
TextMessage msg = (TextMessage) message;
logger.info("SimpleMessageConsumer: Message received: " +
msg.getText());
} else {
logger.warning("Message of wrong type: " +
message.getClass().getName());
}
} catch (Exception e) {
System.err.println("Exception in SimpleMessageConsumer");
e.printStackTrace();
}
}
da compilare e fare il deploy su un AS
50
Introduzione a Java EE
Luca Cabibbo – SwA
* Java EE e qualità
‰
La piattaforma Java EE si propone di sostenere/realizzare un
certo numero di qualità
ƒ alcune tipiche per applicazioni web e applicazioni distribuite
ƒ altre più strategiche
‰
Per alcuni attributi di qualità, discutiamo brevemente
ƒ obiettivi di progetto
ƒ come raggiunti
ƒ tattiche usate
51
Introduzione a Java EE
Luca Cabibbo – SwA
Soluzioni Java EE – in sintesi
‰
52
Soluzioni di Java EE
ƒ componenti EJB
ƒ JSP
ƒ Java servlet
ƒ JMS – Java Messaging Service
ƒ JNDI – Java NAming and Directory Interface
ƒ JTS – Java Transaction Service
ƒ JCA – J2EE Connector Architecture
ƒ Client
Cli t A
Access S
Services
i
COM B
Bridge
id
ƒ RMI over IIOP
ƒ JDBC
ƒ WS
ƒ ...
Introduzione a Java EE
Luca Cabibbo – SwA
Portabilità
‰
53
Portabilità – “write once, run everywhere”
ƒ obiettivi
ƒ portabilità su piattaforme/AS diversi – con uno sforzo minimo
ƒ non garantito dal solo linguaggio Java – i componenti lato
server richiedono
i hi d
servizi
i i addizionali
ddi i
li come transazioni
i ie
sicurezza
ƒ come raggiunta
ƒ la specifica impone che i contenitori per componenti
forniscano servizi addizionali definiti contrattualmente
ƒ contenitori definiti per le principali piattaforme
ƒ tattiche usate
ƒ maintain existing interfaces, generalize modules, abstract
common services
Introduzione a Java EE
Luca Cabibbo – SwA
Costruibilità
‰
54
Costruibilità
ƒ obiettivi
ƒ alcuni servizi comuni devono poter essere gestiti in modo
semplice – ad es., transazioni, sicurezza, servizi di naming,
...
ƒ come raggiunta
ƒ la specifica impone che i contenitori implementino diversi
servizi comuni pronti da usare
ƒ servizi specificati
p
spesso
p
a livello di rilascio – i descrittori di
deployment consentono di selezionare e configurare i servizi
da usare
ƒ tattiche
t tti h usate
t
ƒ abstract common services, maintain interfaces, hide
information
Introduzione a Java EE
Luca Cabibbo – SwA
Specificità bilanciata
‰
55
Specificità bilanciata
ƒ obiettivi
ƒ standard per componenti dettagliato abbastanza – per
definire una semantica di riferimento
ƒ ma allo
ll stesso tempo, abbastanza
bb
generale
l per consentire
i
ai venditori di offrire funzionalità/caratteristiche
specifiche/aggiuntive
ƒ come raggiunta
ƒ servizi p
per EJB specificati
p
in termini di API – dettagliato
g
– ma
generale per consentire al costruttore del contenitore di
implementare caratteristiche specifiche e ottimizzazioni
ƒ tattiche
t tti h usate
t
ƒ anticipate expected changes, abstract common services,
hide information
Introduzione a Java EE
Luca Cabibbo – SwA
Trasparenza nell’implementazione
‰
56
Trasparenza nell’implementazione
ƒ obiettivi
ƒ fornire una trasparenza completa in modo che programmi
client possano essere indipendenti dai dettagli
implementativi – ad es.,
es piattaforma hw/sw,
hw/sw posizione dei
componenti, ...
ƒ come raggiunta
ƒ l’uso di interfacce (remote e locali) incoraggia il
disaccoppiamento tra interfaccia e implementazione
ƒ le decisioni relative alle implementazioni degli enterprise
bean sono quindi trasparenti ai suoi client
ƒ tattiche
t tti h usate
t
ƒ maintain existing interfaces, semantic coherence
Introduzione a Java EE
Luca Cabibbo – SwA
Interoperabilità
‰
57
Interoperabilità
ƒ obiettivi
ƒ supportare l’interoperabilità di componenti lato server
realizzati su contenitori di fornitori diversi
ƒ interoperabilità
i
bili à con CORBA e componentii Mi
Microsoft
f
ƒ come raggiunta
ƒ supporto per l’interoperabilità tra componenti lato server
definito contrattualmente a livello della piattaforma
ƒ sostiene anche la definizione di bridge verso altre
piattaforme (CORBA e COM)
ƒ supporto per Web services
ƒ tattiche usate
ƒ adherence to defined protocols
Introduzione a Java EE
Luca Cabibbo – SwA
Evolvibilità/estendibilità
‰
58
Evolvibilità/estendibilità
ƒ obiettivi
ƒ possibilità di adottare diverse tecnologie in modo
incrementale
ƒ possibilità
ibili à di iincorporare nuove tecnologie
l i quando
d iintrodotte
d
ƒ come raggiunte
ƒ specifiche partizionate in categorie (ad es
es., web tier
tier, EJB
tier) – che possono essere adottate ed evolvere
separatamente
p
ƒ specifica basata su componenti consente estensioni future –
alcune tecnologie attuali erano assenti in versioni precedenti
ƒ tattiche usate
ƒ semantic coherence, hide information
ƒ anticipate
ti i t expected
t d changes
h
Introduzione a Java EE
Luca Cabibbo – SwA
Disponibilità/affidabilità
‰
Disponibilità/affidabilità
ƒ obiettivi
ƒ sistema disponibile 24/7 – con fuori servizio di breve durata
ƒ come raggiunta
ƒ contenitori implementano servizi per la gestione di
transazioni e meccanismi di recovery
ƒ tattiche usate
ƒ heartbeat, transactions, passive redundancy
59
Introduzione a Java EE
Luca Cabibbo – SwA
Prestazioni
‰
60
Prestazioni
ƒ obiettivi
ƒ il sistema deve rispondere rapidamente agli utenti
ƒ come raggiunta
ƒ l’approccio a componenti distribuiti rende possibile la
ridistribuzione del carico e il tuning
ƒ tattiche usate
ƒ configuration files, load balancing, maintain multiple copies
Introduzione a Java EE
Luca Cabibbo – SwA
Scalabilità
‰
Scalabilità
ƒ obiettivi
ƒ il sistema deve sopportare variazioni del carico – senza
intervento umano
ƒ come raggiunta
i
ƒ architettura client/server multi-livello
ƒ la piattaforma prevede la possibilità di espandere il numero
di server e fare bilanciamento del carico
ƒ tattiche usate
ƒ load balancing
61
Introduzione a Java EE
Luca Cabibbo – SwA
Sicurezza
‰
62
Sicurezza
ƒ obiettivi
ƒ autenticazione e autorizzazioni
ƒ come raggiunta
ƒ la specifica definisce diversi meccanismi per la sicurezza –
dichiarativi, basati su ruoli e programmabili
ƒ tattiche usate
ƒ authentication, authorization, data confidentiality
Introduzione a Java EE
Luca Cabibbo – SwA
Usabilità
‰
63
Usabilità
ƒ obiettivi
ƒ utenti diversi devono poter accedere contenuti diversi in
forme diverse
ƒ come raggiunta
i
ƒ la piattaforma prevede tecnologie specifiche (ad es., JSP e
servlet) per fornire contenuti in forme diverse
ƒ tattiche usate
ƒ separate user interface
Introduzione a Java EE
Luca Cabibbo – SwA