Java Enterprise Edition JEE

Citando letteralmente wikipedia

J2EE (dall’inglese Java 2 Enterprise Edition) è la versione enterprise della piattaforma java. Essa è costituita da un insieme di specifiche che definiscono le caratteristiche e le interfacce di un insieme di tecnologie pensate per la realizzazione di applicazioni di tipo enterprise e mission critical. Chiunque può realizzare una implementazione di tali specifiche e produrre application server compatibili con le specifiche J2EE“.

Io aggiungo che, come giustamente dice il sito SUN, la tecnologia è pensata esclusivamente per lo sviluppo di applicazioni server-centric e multitier.

Ad esempio, per creare il nostro software server-side non dovremmo più preocupparci di scrivere il nostro “server” in Java utilizzando magari le RMI, questa parte viene totalmente lasciata ad un “Application Server” che si occuperà proprio della comunicazione dei dati tra l’applicazione client e il server.
Inoltre esso si occuperà anche dell’interfacciamento con un generico database rendendo l’applicazione completamente indipendente dal tipo di DBMS utilizzato.

Parlando di tecnologia java enterprise dobbiamo naturalmente citare l’effettiva implementazione ovvero il “Bean”.
I beans sono i componenti che implementano il lato server, ovvero logica di business nell’architettura j2ee.
Sono sempre degli oggetti java ma devono essere sviluppati seguendo rigidamente delle specifiche che serviranno poi a comunicare all’application server come gestire l’oggetto.

Copiamo un altro pò da wikipedia, precisando che di seguito il termine “contenitore” specifica una particolare parte dell’application server.
Esistono tre tipi di EJB:

EJB di Entità (Entity EJB): il suo scopo è di inglobare gli oggetti sul lato server che memorizzano i dati. Gli entity bean forniscono la caratteristica della persistenza dei dati:
o Persistenza gestita dal contenitore (CMP): il contenitore si incarica della memorizzazione e del recupero dei dati relativi a un oggetto utilizzando una tabella di una base di dati.
o Persistenza gestita dal bean (BMP): in questo caso è il bean a occuparsi del salvataggio e recupero dei dati a cui fa riferimento, il salvataggio può avvenire in una base di dati o con qualsiasi altro meccanismo perché è il programmatore che si incarica di realizzare il meccanismo della persistenza dei dati.
EJB di sessione (Session EJB): gestiscono l’elaborazione delle informazioni sul server. Generalmente sono una interfaccia tra i client e i servizi offerti dai componenti disponibili sul server. Ne esistono di due tipi:
o con stato (stateful). I bean di sessione con stato sono oggetti distribuiti che posseggono uno stato. Lo stato non è persistente, però l’accesso al bean è limitato ad un unico client.
o senza stato (stateless). I bean di sessione senza stato sono oggetti distribuiti senza uno stato associato, questa carattestistica permette un accesso concorrente alle funzionalità offerte dal bean. Non è garantito che il contenuto delle variabili di istanza si conservi tra diverse chiamate ai metodi del bean.
EJB guidati da messaggi (Message driven EJBs): sono gli unici bean con funzionamento asincrono. Tramite il Java Message Service (JMS), si iscrivono a un argomento (topic) o a una coda (queue) e si attivano alla ricezione di un messaggio inviato all’argomento o alla coda a cui sono iscritti. Non richiedono una istanziazione da parte dei client
“.

Il tutto, anche se siete dei profondi conoscitori della OOP, potrebbe sembrarvi un pò aleatorio, ma addentrandosi nella tecnologia e provando ad utilizzarla molti concetti si chiariranno rendendo evidenti le potenzialità della stessa.

Questo è in realtà solo la punta dell’iceberg, tutto ciò che è “nodo critico” di un’applicazione distribuita viene lasciata il più possibile alla gestione dell’Application Server limitando l’intervento del programmatore, questo potrebbe sembrare una mancanza di libertà ma in realtà è sempre possibile prendersi i propri rischi e “mettere le mani in pasta”.
Il tutto serve effettivamente ad “Aggiungere capacità che provvedono ad una completa,stabile,sicura e veloce applicazione Java per l’impresa“.

Ma ora provo a rispondere ad una domanda dal così detto milione di dollari!
Quando effettivamente è necessarrio utilizzare una tecnologia simile?

A mio modesto parere la sconsiglierei vivamente se la nostra unica interfaccia deve essere il WEB, ovvero anche se abbiamo il nostro megaportale con tanti megaservizi il cui unico canale di interfaccia è il WEB la J2EE è effettivamente “Sprecata” o per meglio dire “Inadeguata”, ci sono molte altre tecnologie che offrono comunque costi in termini di “tempo di sviluppo” sicuramente minori e sopratutto offrono un’automazione in quelle fasi critiche dei sistemi web come templating system ed admin area.

Deve essere effettivamente utilizzata quando il nostro sistema avrà utilizzatori con diverse necessità e con diverse interfacce, un esempio lampante che rende davvero l’idea è quello utilizzato nel libro “Enterprise JavaBeans” di Monson-Haefel Richard in cui tutto il testo è incentrato su una grande compagnia di crociera immaginaria, la Titan, che attraverso la tecnologia J2EE riesce a gestire i sistemi di approvvigionamento, manutenzione e addirittura il sito web per le prenotazioni delle cabine, utilizzando lo stesso software server e massimizzando il riutilizzo di moduli ed oggetti comuni alle diverse interfacce ed utilizzatori.
Ad oggi non consiglio comunque il libro che si rifà alle specifiche 2.0 che sono davvero ostiche e di non semplice utilizzo; dalle 2.0 in poi, invece, il costo di apprendimento penso sia devvero giustificato dal quadagno effettivo in termini di semplicità e velocità di sviluppo.

Infine volevo specificare che l'”Application server”, che deve necessariamente far parte della tecnologia, può variare e ne possono essere usati di diversi (NewtWeaver di SAP, JEUS 6 di TmaxSoft)
Io consiglio comunque l’utilizzo dell’application server open source di casa sun chiamato GlassFish davvero di facile uso e configurazione e come se non bastasse con una splendida integrazione tra quest’ultimo e l’amato IDE “Netbeans”, sempre prodotto SUN.