Tra gli innumerevoli acronimi appartenenti alla piattaforma Java, non vi è dubbio che quello identificato da "J2EE" (recentemente rinominato dalla Sun in "Java EE") rappresenti uno dei più importanti e significativi.
J2EE sta per Java 2 Enterprise Edition ma, probabilmente, per coloro che non lavorano quotidianamente a contatto con la tecnologia Java questi quattro termini messi in fila non sono particolarmente esplicativi. Cercheremo, allora, di chiarire cosa si celi dietro la sigla J2EE, fornendo una panoramica generale su tale piattaforma.
Che cos'è la Java 2 Enterprise Edition (J2EE)?
La parola chiave nell'acronimo J2EE è certamente "Enterprise". Un'applicazione di tipo Enterprise è incentrata fortemente sulla risoluzione di problemi di business, ovvero, in generale, di quelle problematiche di particolare importanza (solitamente affrontate dalle imprese) i cui punti cardini sono incentrati sulla comunicazione, sul salvataggio sicuro e sincronizzato dei dati, sul recupero e sulla modifica dei dati stessi (solo per citarne alcuni).
Ad esempio, una società di trasporto aereo si troverà nella necessità di affrontare e risolvere nel migliore dei modi il problema delle prenotazioni dei propri voli, oppure un broker finanziario avrà bisogno di mettere a punto un'applicazione che consenta di monitorare in tempo reale l'andamento dei titoli di borsa, salvando e recuperando le quotazioni degli stessi quando necessario.
Tipicamente, un'applicazione di tipo Enterprise potrà prevedere svariate viste in relazione ai dati in gioco: una di tipo Web, ad esempio, ed un'altra più classica tipica delle applicazioni note come desktop applications (quelle che eseguiamo su Windows, per intenderci). Una caratteristica certamente predominante dovrà essere la robustezza: un'applicazione di tipo enterprise che faccia acqua da qualche parte porterà, inevitabilmente, ad una perdita economica (si pensi ad un broker che fornisca dati di borsa errati!). Viceversa, una applicazione solida, efficiente e priva di errori contribuirà in modo significativo alla crescita del business per una determinata azienda.
Le applicazioni enterprise si basano fortemente sull'ausilio di alcuni sistemi, denominati Application Server. Un Application Server, fornisce dei servizi di fondamentale importanza per le enterprise application, come ad esempio la facilitazione della comunicazione, la gestione delle connessioni ad un database e quella delle transazioni.
Se volessimo trovare una similitudine, potremmo dire che è possibile paragonare le funzioni svolte da un Application Server a quelle messe a disposizione da una libreria grafica: nessuno, infatti, si sognerebbe oggi di costruire "a mano" componenti grafici come bottoni, menu, scroll bar, ecc. senza avvalersi dell'ausilio di librerie grafiche già pronte come le Swing, rimanendo nell'ambito Java.
Allo stesso modo, un Application Server esonera il programmatore dal doversi preoccupare di gestire peculiarità importanti ma complesse come quelle enunciate pocanzi.
Java fornisce un modo univoco, per lo sviluppo di applicazioni di tipo enterprise su Application Server, mettendo a disposizione un insieme di librerie valide per qualsivoglia Application Server. Queste librerie, unite ad una collezione di servizi, componenti e contenitori (containers) costituiscono proprio l'essenza della piattaforma J2EE.
La relazione tra J2EE e J2SE
Probabilmente, a questo punto, ci si potrebbe chiedere quale relazione c'è tra J2EE e J2SE (Java 2 Standard Edition) e se si tratta di piattaforme mutuamente esclusive oppure se esiste una interazione tra le due. La risposta è che J2EE non rappresenta, in alcun modo, una alternativa a J2SE. Al contrario, quest'ultima fornisce una infrastruttura di base su cui si poggia la Java 2 Enterprise Edition. In altri termini, se si hanno delle conoscenze sulla programmazione Java basate sul J2SE queste non andranno in nessun modo perdute ed anzi rappresenteranno sempre un punto di riferimento necessario.
Architettura a strati (multi-tier)
In J2EE uno dei punti cardine è, certamente, quello dell'architettura a più strati (tiers). Ovvero, quello che avviene tipicamente quando si sviluppa un'applicazione J2EE è la suddivisione dell'applicazione stessa in più livelli detti, appunto, tiers. Vediamo di capire meglio di cosa si tratti.
In generale, se si pensa alla struttura di un'applicazione è possibile suddividerla logicamente in tre macro aree. La prima è quella adibita alla visualizzazione dei dati, alla interazione diretta con l'utente e alla raccolta delle informazioni provenienti dall'utente stesso. Tale area è quella solitamente definita come interfaccia utente o presentation. Ad interagire con l'area di presentation è un'altra area, incentrata prettamente sulla logica che consente ad un'applicazione di lavorare, gestire il processamento dell'informazione e comportarsi nella maniera attesa. Questa area è quella che viene definita area di business. Infine, il salvataggio dell'informazione e il reperimento della stessa rappresentano il compito svolto da quella parte di software che costituisce l'area di accesso ai dati (data access).
Tali aree in cui è facilmente scomponibile un'applicazione prendono il nome di strati o tiers.
Volendo, ora, identificare le varie tecnologie J2EE all'interno della struttura multi-tier, in generale, potremmo disegnare un modello di applicazione J2EE.
Lo strato di presentation può essere suddiviso in due diversi tipologie: i web client e gli application client. Un web client è rappresentato tipicamente da un browser che si interfaccia, appunto, con componenti di tipo web identificabili, in J2EE, nelle pagine JSP e nelle Servlet. Viceversa, gli application client sono applicazioni "standalone", come può essere, ad esempio, una classica GUI scritta utilizzando le Swing.
La differenza sostanziale consiste nel fatto che mentre gli application client possono interagire direttamente con lo strato di business, i web client passano attraverso uno strato intermedio, noto come web tier.
Il business tier, è costituito, in J2EE, da tre componenti fondamentali: gli Entity Beans, i Session Beans e i Message Driven Beans. Tali componenti sono noti come Enterprise Java Beans (EJB) e non vanno assolutamente confusi con i JavaBeans.
Il Data Access Layer (anche conosciuto come Enterprise Information System Layer o, piu' brevemente, EIS layer) è generalmente costituito da un RDBMS come, ad esempio, Oracle.
Il concetto di Container
Abbiamo detto che un Application Server rappresenta un sistema che fornisce dei servizi di fondamentale importanza per le applicazioni J2EE, sollevando il programmatore dall'onere di dover gestire alcune problematiche in modo diretto. Abbiamo citato la gestione della comunicazione, la transazionalità e le connessioni al database come esempi di tali servizi ma potremmo aggiungerne ancora altri come, ad esempio, la gestione dello stato e il multi-thread.
La suddivisione tra logica applicativa (a carico del programmatore) e servizi di basso livello (come quelli che abbiamo appena elencato) avviene implementando questi ultimi in appositi container (contenitori). Per rendere meglio l'idea del container possiamo paragonarlo ad una console per video giochi che consenta all'utente di inserirvi una cartuccia a propria scelta ed eseguire i giochi in essa contenuti. La console fornisce, in questo caso, un insieme di servizi che permettono all'utente di giocare ed interagire con il video game senza che questi debba minimamente preoccuparsi di come ciò avvenga (esonerandolo, quindi, da problemi del tipo: quale tipologia di controller sia utilizzato o come il gioco stesso venga visualizzato a video).
J2EE fornisce dei container ad hoc sia per i componenti web che per quelli di business. In particolare sono definiti dei container per gli Enterprise Java Beans, per le pagine JSP, per le Servlet e per i client J2EE.
Tecnologie utilizzate in J2EE
Diamo uno panoramica alle tecnologie e alle API principali utilizzate nella piattaforma Java 2 Enterprise Edition (di alcune abbiamo già fatto menzione):
- JDBC (Java Database Connectivity) API: L'insieme di interface che consente alle applicazioni di interagire con i più svariati database.
- RMI (Remote Method Invocation) : Ne abbiamo parlato in un articolo specifico. Consente di invocare metodi di oggetti remoti.
- EJB (Enterprise Java Beans): Rappresentano i componenti il cui compito è quello di gestire la logica di business (ovvero il business tier).
- Servlet e JSP (Java Server Pages) : I componenti, probabilmente, più noti ed utilizzati nelle applicazioni J2EE. Se ne è parlato abbondantemente negli articoli e nelle guide presenti in HTML.it
- JMS (Java Message Service): Un insieme di API che fornisce un sistema di messaggistica destinato allo scambio di informazioni (messaggi) tra più componenti J2EE.
- JTA (Java Transaction API): Consente ai componenti J2EE di eseguire transazioni distribuite.
- JNDI (Java Naming and Directory Interface): È un insieme di API che consentono di interfacciarsi con i servizi di naming e directory. Un servizio di naming e directory si occupa di fornire una soluzione per trovare ed identificare ed associare nomi con dati, servizi e risorse.
- JavaMail: Un insieme di API che consente ai componenti J2EE di inviare e ricevere messaggi di posta elettronica in modo indipendente dalla piattaforma.
Alla prossima.