Java Enterprise Tutorial – Getting Started – Parte 2

Ora creiamo un package nel nostro modulo EJB facendo click destro su source Packages e poi su New->Package e chiamiamolo entity; successivamente, facendo click destro sul package appena creato, selezioniamo create new entity class from databases.
Nella finestra di dialogo selezioniamo la tabella user e clicchiamo su add e poi next, a questo punto ci viene chiesto come vogliamo chiamare la classe e in quale package posizionarla, lasciamo tutto di default e clicchiamo su finish.
Questa che è stata creata non è altro che una classe java che rispecchia la nostra tabella Users del DB, è per questo motivo che questi tipi di classi vengono chiamate Entity Bean proprio perchè rappresentano entità, ovvero copie in memoria di dati persistenti in una struttura dati.
Analizzando il codice potrete vedere che, a differenza di una normale classe java, sono presenti delle annotazioni precedute dalla @: queste servono a comunicare all’application server, e di conseguenza al gestore della persistenza, il legame tra l’oggetto e la relativa tabella del db.

firstclass

Non possiamo entrare nel dettaglio delle annotazioni altrimenti ci dilungheremmo troppo: chiunque volesse soddisfare la propria curiosità si può rifare alla specifiche sun.
Ora creiamo il nostro primo session Bean, creiamo un nuovo package cliccando con il tasto destro su source->packages e chiamiamolo session, facciamo click destro su quest’ultimo e selezioniamo New->Session Bean.
Chiamiamo il nostro bean UserServe, lasciamo la spunta su stateless,  spuntiamo entrambe le voci Remote e Local e clicchiamo su finish.
Abbiamo appena creato un session less bean ovvero un bean che non mantiene nessun valore in memoria e può essere usato contemporaneamente da più bean senza avere un rapporto uno ad uno con questi ultimi.
Noterete che sono stati creati tre file, uno è UserServeBean, l’oggetto vero e proprio in cui implementeremo i nostri metodi, e gli altri due sono le sue interfacce, una per accessi locali, ovvero dall’interno dello stesso modulo EJB, e uno per accessi remoti, ovvero dall’esterno del modulo.
Ora posizioniamoci con il mouse all’interno della classe appena creata e noteremo un commento
// Add business logic below. (Right-click in editor and choose
// “Insert Code > Add Business Method” or “Web Service > Add Operation”)

Seguiamo la prima indicazione, ovvero aggiungiamo un business method, in realtà possiamo scrivere il nostro metodo a mano, ma poi dovremmo riportarlo nelle due interfacce: usando questo tool, invece, esso verrà riportato nelle interfacce automaticamente.
Nella finestra di dialogo creiamo un metodo chiamato createUser passandogli come parametri i dati di un utente, esclusa la chiave, come tipo di ritorno settiamo boolean: ricordiamoci di spuntare il radio button in basso “Remote” e clicchiamo su finish.

metodo

Ora che abbiamo creato lo scheletro del nostro primo metodo bisognerà implementare l’effettiva scrittura: trattandosi di strumenti enterprise non dovremmo scrivere nessuna query, il tutto verrà demandato all’unità di persistenza.
Prepariamoci ad utilizzare l’EntityManager importando i seguenti pckages:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;

Ora diciamo al nostro bean come si chiama la persistence unit, prepariamo una variabile di tipo EntityManagerFactory e all’interno del nostro metodo inizializziamo una variabile di tipo EntityManager utilizzando la factory definita in precedenza.

emanager

Ora non resta altro che creare un oggetto di tipo Users con i parametri che ci vengono passati.
Ricordiamo di importare entity.Users ed utilizziamo il costruttore del nostro entity bean per creare l’oggetto.
Successivamente chiamiamo il metodo persist sull’oggetto EntityManager passandogli l’oggetto users appena creato.

persist1

Come potete notare il metodo persist è void ovvero non ci fornisce nessun ritorno di tipo boolean: per sapere se l’operazione è andata a buon fine bisogna intercettare le quattro possibili eccezioni che possono generarsi in questo tipo di contesto

EntityExistsException
IllegalStateException
IllegalArgumentException
TransactionRequiredException

Catturiamo le eccezioni con un try catch e all’interno dei vari catch valorizziamo una variabile booleana a false in modo da avere un ritorno negativo se si verifica una qualsiasi delle quattro eccezioni.
Di seguito potete vedere lo screenshot del metodo completo.

classe_completa

Ora possiamo dire che abbiamo creato il nostro primo modulo EJB funzionante, non ci resta che creare un Servlet sul progetto WAR che invochi il metodo CreateUser.
Spostiamoci sul progetto WAR e creiamo un nuovo package nella cartella source packages chiamandolo servlet, facendo clic destro su quest’ultimo selezioniamo New->Servlet, nella finestra di dialogo chiamiamo la nostra servlet doCreateUser, clicchiamo su next e nella finestra successiva lasciamo tutto com’è e clicchiamo su finish.
Abbiamo appena creato una servlet che sarà accessibile da browser con il nome /doCreateUser: non è lo scopo di questo tutorial spiegare cos’è una servlet o una pagina JSP, difatti si suppone che l’utente  dovrebbe già averne una conoscenza sufficiente per affrontare l’apprendimento della tecnologia Enterprise.
Ora facciamo click destro all’interno della classe e andiamo su InsertCode->Call Enterprise Bean, nella finestra di dialogo selezioniamo il bean, spuntiamo il radio button remote e clicchiamo ok.
Ora ci viene resa disponibile una variabile chiamata userServeBean di tipo UserServeRemote sulla quale possiamo chiamare il metodo createUser ed intercettarne il ritorno per stamparne l’esito a video.
Di seguito ecco il codice completo del metodo processRequest della servlet.

servlet

Prima di eseguire un test, sopratutto se utilizzate windows, è probabile che il connector mysql non sia presente in glassfish; per ovviare alla mancanza è sufficiente copiare il JAR di cui abbiamo parlato all’inizio del tutorial nella cartella lib del dominio in uso appartenente a glassfish
(Percorso di esempio : C:/Programmi/GlassfishV2/domains/domain1/lib)
Ora possiamo cliccare con il tasto destro sul progetto principale e selezionare Deploy, a questo punto netbeans creerà i pacchetti necessari e ne farà il deploy automatico su glassfish che nel frattempo verrà avviato.
Nelle finestra output in basso è presente la tab GlassFishV2 che stampa l’output dell’application server, in caso di errore è in quest’ultima che potremo leggere i dettagli di eventuali eccezioni.
Se tutto è andato a buon fine dovrebbe apparire nella finestra output un BUILD SUCCESFULL:
ora possiamo lanciare il progetto cliccando sulla freccia verde in alto oppure con il tasto destro sul progetto principale MyFirstJEE e poi Run.
Si aprirà il browser di default del sistema mostrando una pagina Hello Word!
Ora che il nostro dominio web è avviato non dobbiamo far altro che richiamare la nostra servlet aggiungendo all’url “doCreateUser” sperando che la finestra che vi verrà mostrata sia questa:

pagina

Bene, siamo arrivati alla fine di questo primo tutorial, che spero vi sia servito a prendere dimestichezza con l’ambiente enterprise e che sopratutto sia stato un utile esercizio per cominciare a comprenderne le logiche.
Restano ancora da affrontare argomenti basilari come l’estrazione dei dati attraverso le NamedQuery o attraverso le NativeQuery e come utilizzare, e quando, un bean di tipo session full: ma questi saranno argomenti per un altro tutorial.
In caso di problemi postate pure un commento e sarò felice di aiutarvi!!
Vi ricordo che potete scaricare il progetto netbeans completo di questo tutorial cliccando qui!