A volte potrebbe servirvi la connessione diretta al database per farci sopra delle query, ma in Liferay la cosa potrebbe sembrare un po' complicata da fare, perché l'architettura applicativa è abbastanza complessa e trovare l'oggetto Connection
potrebbe non essere semplice!
Invece i nostri amici hanno messo a disposizione una classe di utilità che rende le cose molto semplici: lacom.liferay.portal.kernel.util.InfrastructureUtil
.
Che cosa fa di magico questa classe? Beh, sostanzialmente esporta tutti i servizi di infrastruttura verso il client che le chiama, esponendo dei metodi statici per recuperare:
getDataSource()
: il datasource
getMailSession()
: la javax.mail.Session
per inviare mail
una serie di altri metodi per accedere ad altri oggetti di infrastruttura! :)
Ora voi direte: ok, abbiamo la connessione al database -attraverso il DataSource
-, ma come facciamo a restituirla al pool, una volta che l'abbiamo utilizzata? Dobbiamo fare la conn.close()
e gestire le eccezioni che vengono sollevate?
Oppure vi potreste domandare "ma come faccio a prendere una connessione da un JNDI name che non è quello "di default"?" Oppure: "ma non esiste un altro modo più semplice per aver accesso all'oggetto Connection
?"
Oh, ma quante domande fate?? :D
Scherzi a parte, per queste operazioni, invece, vi viene in aiuto un'altra classe di utilità che i progettisti di Liferay hanno realizzato per noi!
Nel dettaglio, stiamo parlando della com.liferay.portal.kernel.dao.jdbc.DataAccess
.
Questa classe, oltre ad esporre i metodi per recuperare la connessione di default (ovviamente espone un metodo getConnection()
), espone altri metodi statici come:
getConnection(String location)
: recupera una connessione dato il JNDI
name
svariati metodi di cleanUp
per pulire Connection
, Statement
e ResultSet
Spero di avervi alleviato un po' di pene e sofferenze evitandovi di cercare all'interno del core la classe che fa più al caso vostro!
Ovviamente le sorprese sul database di Liferay non finiscono qui, ma per il momento questo penso vi possa bastare! ;)
Alla prossima! ;)