CORSO DI JSP

<< Indice

J2EE - un ambiente per lo sviluppo di applicazioni distribuite multilivello

Indice


Prima di entrare nel merito delle web application e web services realizzate con JSP e servlets su Tomcat ci occorre fare una panoramica su cosa sia la piattaforma J2EE (JavaTM 2 Platform Enterprise Edition).

TOPApplicazioni distribuite multilivello

Il concetto primario della piattaforma J2EE è il componente.

Def 1. Componente (component). Software funzionale autosufficiente che comunica con altri componenti.

I componenti J2EE si situano entro 4 livelli (tiers).

  1. Livello Client
  2. Livello Web
  3. Livello Business
  4. Livello EIS (Enterprise Information System)

Immaginiamo che tali livelli risiedano su 3 macchine diverse (anche se possono coesistere in una stessa macchina):

il livello 1 risieda in una macchina CLIENT

i livelli 2 e 3 risiederanno in una macchina J2EE SERVER MACHINE

il livello 4 risidederà in un EIS Server.

Grosso modo possiamo pensare al CLIENT come al nostro PC, al J2EE SERVER come all'application Server in cui risiede, ad esempio, Tomcat e al EIS Server ad esempio come ad un Oracle Server (Fig. 1)

Fig. 1 - Applicazione multilivello


TOPLivello CLIENT

Un componente di un livello CLIENT può essere:

  1. Un Web client (o thin client)
  2. Un Application client (o thick client)

1) Un Web client si basa sulla presenza di un browser più una pagina dinamica o di una applet Java. Tutto il calcolo viene demandato ai livelli successivi.

2) Un Application client è una applicazione stand-alone che comunica in HTTP con i componenti del livello web/business. Essa pemette una interazione grafica con l'utente più ricca di quella che di solito si relizza in HTML (esempio: menu a tendina con selezione di più di una lettera). Oltre a questo generalmente l'application client realizza una buona parte di lavoro (o tutto) che di solito un web client demanda al livello Web (al J2EE server) comunicando direttamente con il livello logico di Business (Fig. 2)

Nel livello client sia i web client che gli application client si possono avvalere del supporto di JavaBeansTM (che tuttavia non vengono considerati componenti J2EE) che sono delle classi Java che comunicano con l'esterno tramite dei metodi set/get che servono per impostare i dati del calcolo e per leggere i risultati.

Fig. 2 - Differenza tra un web client e un application client

Web Client o Application Client?

Dipende...
WEB potente come capacità elaborativa, come GUI, come velocità.
+ distribuibile. In inglese si dice che è di più facile deployment. Letteralmente deployment significa schieramento, lo possiamo intendere come qualcosa di molto simile a installazione o distribuzione.
Forse la locuzione italiana che più si avvicina a questo uso di deployment è "posa in opera". Non devo installare software nel client (solo un browser e una Java Virtual Machine - se sono previste Applet).
APP   Le righe sopra, moltiplicate per (-1).

Noi ci occuperemo SOLO di web client.


TOPLivello WEB

Quando intendiamo parlare di questo livello, vuol dire che ci siamo già trasferiti in un server J2EE.

Un componente di un livello WEB può essere:

  1. Una Servlet
  2. Una pagina JSP

Fig. 3 - Livello web

Le servlet (1) sono delle classi Java compilate in bytecode ed eseguite nel server (server + applet); la loro funzione è quella di ricevere REQUEST e inviare RESPONSE.

Le pagine JSP (2) sono dei documenti di testo in cui esiste HTML statico e istruzioni JSP: il server J2EE processa il file e produce una servlet che viene compilata runtime ed eseguita.

Come i componenti di tipo client, anche i componenti del livello web (servlet e pagine JSP) possono fare uso di JavaBeans. Di solito si usano per gestire la comunicazione con il livello Business/EIS. Vedremo un esempio quando ci occuperemo specificatamente dell'integrazione con un database.

Per ciò che riguarda altre caratteristiche di questo livello (il server vero e proprio) dobbiamo prima parlare dei contenitori.


TOPLivello BUSINESS

Il livello business costituisce la logica che sta alla base dell'applicazione, ne è il punto fondamentale.

Per la complessità delle applicazioni che svilupperemo qui, il livello Web e Business non si distingueranno, per noi saranno la stessa cosa.

Possiamo comunque immaginare che questo livello contenga ad esempio la gestione di un e-shop, con tutte le funzioni di carrello, di catalogo, di servizio di pagamento e così via. I beans del livello business gestiscono la comunicazione tra livello business e livello EIS.

Tuttavia per vedere come si fa a sfruttare un bean per realizzare determinate funzioni, ne possiamo pensare uno che non fa esattamente questo (gestire la comunicazione col livello business) ma che per esempio disegna un form HTML.

Esempio: Progettare un JavaBean per disegnare elementi di una form HTML.

Fig. 4 - Livello business

Queste funzioni vengono sfruttate dalle servlet e dalle pagine JSP e sono realizzate tramite dei BEANS. In tutta la filosofia J2EE, si tratta di pensare di avere a che fare con dei mattoncini LEGO che possono essere riutilizzati.

I beans sono di tre tipi:

  1. ENTITY: sono beans che gestiscono informazioni persistenti, quelle per intenderci che vengono salvate nelle righe di un database.
  2. SESSION: sono i beans che gestiscono le informazioni transitorie, quelle che dipendono da una particolare istanza del web client. Si veda la sezione che riguarda le sessioni negli appunti.
    Per farsi un'idea concreta della differenza tra entity bean e session bean, si pensi ad un entity bean come a quella classe che rappresenta un ordine e al session bean come a quella classe che realizza un carrello.
  3. MESSAGE-DRIVEN: sono bean che permettono ai livelli business-EIS di integrarsi con altri sistemi che interagiscono in modo asincorno con il sistema (ad esempio non attrraverso l'interfaccia web ma tramite script di cron o quant'altro).
    Questi bean sfruttano la teconologia JMS (Java Message Service). Non ci occuperemo di questi beans.

I JB che svilupperemo noi saranno quelli che ci permettono di modularizzare l'accesso al database (senza dover ripetere in ogni pagina JSP il codice per accedere a Oracle).


TOPLivello EIS (Enterprise Information System)

E' il livello di gestione dei dati, possiamo pensare ad un server Oracle o mySQL, oppure ad un sistema gestionale, come SAP.

TOPContenitori

Le funzionalità di ciascun componente è dovuta al fatto che esso viene sviluppato a partire da un substrato che fornisce le funzioni di base e l'interfaccia con esse. Questo substrato è detto contenitore (container).

Di fatto il contenitore di cui ci occuperemo è il servlet container, che per noi sarà Tomcat. Esso fornisce tutte le funzionalità di basso livello (allocazione di variabili, comunicazioni a livello TCP/IP, sicurezza, directory service etc.)

Anche al livello client c'è un container ed è il browser con un Java plug-in (applet container).

Fig. 5 - Vari tipi di contenitore

TOPPackaging

Quando avremo scritto una applicazione, avremo costruito nel file system un archivio articolato in directory di file JSP, CSS, JPG etc. L'installazione su altri sistemi da quello di sviluppo (deployment) si fa normalmente ricorrendo ad un archiviazione compatta, che assomiglia molto al TAR (Tape ARchive) di Unix.

Una applicazione J2EE viene rilasciata in un file EAR (Enterprise ARchive).

Un file EAR è un Java ARchive con estensione .ear.

Un file EAR contiene moduli J2EE.

Un modulo J2EE è l'insieme di una o più componenti J2EE per lo stesso tipo di contenitore, più un descrittore di installazione dei componenti.

Un descrittore di installazione dei componenti è un file XML che descrive le impostazioni dell'installazione.

Esempio: la sintassi del comando jar è analog a quella di tar di Unix;

C:\Programmi\Apache Group\Tomcat 4.1\webapps>jar cvf magazzino1.jar magazzino1/
aggiunto manifesto
aggiunta in corso di: magazzino1/(in = 0) (out= 0)(archiviato 0%)
aggiunta in corso di: magazzino1/WEB-INF/(in = 0) (out= 0)(archiviato 0%)
aggiunta in corso di: magazzino1/WEB-INF/classes/(in = 0) (out= 0)(archiviato 0%)
aggiunta in corso di: magazzino1/WEB-INF/tlds/(in = 0) (out= 0)(archiviato 0%)
aggiunta in corso di: magazzino1/WEB-INF/lib/(in = 0) (out= 0)(archiviato 0%)
aggiunta in corso di: magazzino1/jsp/(in = 0) (out= 0)(archiviato 0%)
aggiunta in corso di: magazzino1/jsp/login.jsp(in = 1756) (out= 839)(compresso 52%)
...

Nell'esempio viene creato un archivio JAR (che si può aprire sia da linea di comando, usando jar, che con il WinZip per chi usa Microsoft Windows) di nome magazzino1.jar, che contiene la directory magazzino1/.
Al loro interno, i file ear possono contenere vari tipi di moduli che sono sempre degli archivi di tipo tar ma specializzati ed organizzati per i tipo di contenuto (se si tratta di javaBeans, di codice jsp, eccetera).

Per creare un archivio JAR da una directory usare il comando:

c:\>jar cf archivio.jar *.class per comprimere in un file archivio.jar tutti i .class della directory attiva.

Per visualizzare il contenuto di un JAR utilizzare il comando:

c:\>jar tf archivio.jar

Vi sono quattro tipi di moduli J2EE:

  1. Moduli EJB (Enterprise JavaBeans) che contengono i file .class degli enterprise beans e un descrittore XML. Essi sono pacchettizzati in un file .jar.
  2. Moduli WEB: contengono, in un file .war i file .class per le servlets, i file JSP, i file HTML / jpeg / gif e un descrittore XML.
  3. Moduli "Resource Adapter" che contengono tutto il java necessario a connettersi col livello EIS (connettori a database ad esempio) più il descrittore XML, pacchettizzato in un file .rar.
  4. Moduli application client (.class + .xml) se la parte client non è affidata ad un web client.

Così organizzata, una applicazione multilivello può essere installata su qualsiasi server J2EE compliant in modo rapido ed indolore.


<< Indice