Newsgroup: it.comp.java
Titolo: Accesso a database

Non volendo utilizzare un framework già implementato (Hibernate & Co.) quali
classi di appoggio utilizzereste voi per sviluppare delle librerie di
accesso a database (MySQL e Oracle, nello specifico) in modo che:
- le connessioni siano gestite in modo intelligente (pool asincrono);
- ci sia la possibilità di utilizzare le transazioni;
il tutto minimizzando il codice (non ho bisogno di cose complesse)?
Conosco abbastanza la "tecnologia" da usare ma non riesco a scegliere un
approccio opportuno...


Faccio un po' fatica a capire il perche',comunque se non vuoi
utilizzare Hibernate & co. direi che l' alterativa e' creare delle
classi tue che fanno da wrapper intorno alle chiamate JDBC.Come pool
di connessioni io utilizzerei uno gia' fatto e testato come quello
creato da Apache che e' incluso nella distribuzione id Tomcat.


A costo di sembrare ripetitivo direi Spring :) include uno strato di
integrazione con JDBC che risolve tantissimi problemi:
- elimina la maggior parte del codice ripetitivo che si usa di solito
con JDBC: try/catch vari, apertura connessioni, ecc.
- offre delle comode e *sensate* astrazioni per gestire query, mappare
a mano ResultSet e classi, recuperare le chiavi generate e via
discorrendo.
Dai un'occhiata al capitolo "II. Middle Tier Data Access" sulla
documentazione di Spring, in particolare il paragrafo "11. Data access
using JDBC" e i Javadoc di JdbcTemplate. Non ne rimarrai deluso.
--
www.megadix.it

 creato da Apache che e' incluso nella distribuzione id Tomcat.
Ci butto un occhio, grazie.

> A costo di sembrare ripetitivo direi Spring [ecc]
Non ho ben capito, da quanto dici, di quanta libertà resta al programmatore
(a basso livello); cmq andrò sicuramente a vederlo, Spring avevo già
intenzione di studiarmelo. Grazie, ciao.


In sostanza le classi di integrazione JDBC di Spring servono a:
- liberarti dal codice che in inglese viene chiamato "boilerplate":
tutto quel codice ripetitivo che ogni volta bisogna scrivere (e troppe
volte si fa copia-e-incolla!) per aprire connessioni, gestire
eccezioni, transazioni, rollback e macumbe varie;
- offrire  un modello di programmazione che utilizza il design pattern
"Template Method": tu implementi dei metodi specifici e a chiamarteli
con gli argomenti giusti ci pensa Spring. Vedi:
http://en.wikipedia.org/wiki/Template_method_pattern
per una trattazione più completa.
Ci sono molte classi utili soprattutto per chi vuole andare a basso
livello come te: ti devi preoccupare solo di scrivere ed eseguire il
codice SQL (JdbcTemplate), mappare i risultati (MappingSqlQuery),
eccetera...
Dagli un'occhiata, non te ne pentirai ;)

 quali
non so se rientra nell'elenco dei framework che tu *non* vorresti usare....
in caso contrario ti suggerisco iBATIS
ciao

Ok, grazie.
Oggi in realtà ho risolto velocemente usando il servizio JNDI di Tomcat e
appoggiandoci sopra le mie librerie per la gestione veloce delle query; ho
lasciato in sospeso la creazione di un buon ConnectionPool (pur essendocene
già tanti implementati è una struttura che mi attira), per le transazioni ho
visto che è questione di due righe...
Cmq dopo un po' di esperimenti andrò probabilmente ad usare uno dei
framework già consolidati.

 in caso contrario ti suggerisco iBATIS
visto che lo conosci ti chiedo un paio cose
- usi i DAO o SQLMaps di IBATIS??
- mi spieghi per sommi capi il modo di usare Ibatis, ho letto un po di
documentazione ma non c'ho capito molto...
grazie

 documentazione ma non c'ho capito molto...
forse arrivo un pò tardi con la risposta, cmq ecco qua :)
uso ibatis SQLMaps, per la precisione assieme a Spring.
con ibatis continui ad avere un dao e continui a scrivere SQL però il codice 
SQL è completamente separato dal codice java e inoltre hai il mapping 
automatico dei resultset e parametri sui tuoi javabeans.
In pratica:
- Dentro dei file xml scrivi le tue query SQL e le istruzioni per il mapping 
dei resultset su classi javabean, e anche per il mapping dei parametri che 
usi nelle query (ad esempio i valori di input delle INSERT)
- Nei tuoi DAO sfrutti il framework ibatis per chiamare in esecuzione queste 
query, con metodi che lavorano direttamente con le tue classi javabean, cioè 
non ti devi preoccupare tu di mappare i resultset o di settare i parametri 
negli statement.
Ad esempio hai metodi del tipo loadForList(...) che fa la query sul db, ti 
mappa i risultati e ti torna direttamente una lista di tuoi bean.
Se ti scarichi il pacchetto c'è un bel tutorial oltre che il reference 
manual.
sei hai problemi chiedi pure
ciao