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.

  • Ra

    Ciao Mauro,
    molto interessante il tuo sito.
    Sono nuovissimo alla JEE, provengo dal mondo dello
    scripting Ruby/BioRuby in particolare. Sapresti
    consigliarmi un libro per imparare bene a progettare ed
    usare le varie “possibilità” che offre questa
    tecnologia ? Grazie in anticipo.

    PS: lavoro come ricercatore e in ambiente “accademico”
    una ambiente jee può sembrare strano ma ritengo che
    possa per quanto ho capito, essere una opportunità

  • http://www.rmhomepages.com Mauro Rocco

    Ra, sicuramente la tecnologia enterprise è attualmente in ascesa, certo il suo itilizzo è limitato solo a grossi contesti organizzattivi, questo è un motivo per cui non è utilizzata dall’utente medio, ma le sue potenzialità la rendono spesso indispenzabile per garantire riusabilità,sicurezza e semplicità dei sistemi distribuiti complessi.
    Per quando riguarda il libro, uno molto interessante e in lingua italiana è certamente il libro che cito nell’articolo “Enterprise JavaBeans” di Monson-Haefel Richard completo di molti esempi pratici ma che purtroppo fa riferimento alle specifiche 2.0 che potrebbero rischiare di confondere chi vuole iniziare.
    Io personalmente consiglierei “Guide to J2ee: Enterprise Java” di John Hunt, Beate Hermelin (purtroppo solo in inglese) che da un approccio più introduttivo senza entrare eccessivamente nei dettagli, ma affrontanto tutti gli argomenti della tecnologia compreso un utile capitolo dedicato ai “Pattern di progetto” per sistemi distribuiti enterprise che ho trovato davvero interessante.
    Se proprio non potete rinunciare all’italiano allora buttatevi su “Java – Enterprise Edition 5” di Diotalevi Filippo, personalmente non ho avuto modo di analizzarlo a fondo ma penso sia un buon approccio “praticheggiante” alla tecnologia sicuramente utilissimo ma per chi ha già ha un’infarinatura teorica delle logiche Enterprise che spesso non sono legate alla tecnologia specifica.
    Spero che la mia risposta sia stata abbastanza esaustiva, in caso contrario non esitare a postare una nuova domanda.
    Ciaoooo

  • Ra

    Grazie Mauro per la risposta.
    Per quanto riguarda il testo, guarderò ciò che mi hai consigliato. Direi che è opportuno documentarsi direttamente con le nuove specifiche.
    Per ciò che riguarda lo sviluppo è vero, in “piccole” realtà tutto può perdere di importanza. Sto impiegando parecchio tempo a metabolizzare la struttura, la progettualità non è banale e spesso ritorno sui miei passi. Volevo scrivere un articolo su questo aspetto ma credo che l’ambiente della ricerca dovrebbe puntare maggiormente su tecnologie come queste. Ti terrò aggiornato e quando prenderò i libri ti farò sapere come mi sarò trovato.
    Ora purtroppo non ho molto tempo ma sono incuriosita parecchio anche da Scala: http://www.scala-lang.org/

    A presto!

    PS: continua con gli articoli!

  • Mauro Rocco

    Il problema principale e che dire Java Enterprise è dire tanto, infatti è un’insieme di tecnologie, innanzi tutto bisogna conoscere java a fondo, bisogna sapere cos’è una servlet e come si sviluppa lato web, per non parlare dei Java Message Service o di Java Mail che meritano corsi a parte e dedicati.
    Oltre tutto bisognerebbe conoscere meglio anche i protocolli che servono a implementare strutture enterprise e le varie tencologie in gioco (Unità di persistenza, CORBA protocol ecc.) la quantità di conoscenza è davvero mastodontica, comunque con il libro in inglese consigliato dovresti avere una corretta infarinatura per poi approfondire pezzo per pezzo.
    Ti basti sapere che io ancora non conosco il 40% della tecnologia nei dettagli nonostante ci lavori da 2 anni…. è dura ma secondo me ne vale la pena!!!!!1

  • mauro

    ciao mi chiamo anche io mauro.
    Ho installato glassfsih 3.1 sia su windows e su ubuntu.
    ma ho un porblema su entrambi i sistemi.
    quando tento di creare degli utenti al realm file per utilizzare la security in una applicazione , il pannello della gui admin glassfsih rimane bloccato .( dove c’pè scritto gestisci utenti),
    ho fatto : http:localhost:4848
    sono anato a : config-server/security/realm/file
    quando appare il pannello gestisci utenti , appare unmessaggio: il prcesso è lunfgo attender:….

    ma non ne esce piu e rimane bloccato…….
    puoi aiutarmi? grazie mille.
    mauro

  • Mauro Rocco

    In questi casi non sò quanto io possa aiutarti. A me non da nessun problema con ubuntu 11.04 , in rete non ho trovato nessun riferimento particolare a questo problema.
    Su windows non posso aiutarti di certo, su che versione di ubuntu lo hai provato, come hai installato Glassfish ?

  • mauro

    ciao glassfish l’ho installato sia con l’installere che come scompattamento del file zip.
    penso sia un errore della versione localizzata in italiano …
    mi sembra che manchino delle traduzioni .
    bo????