Salve a tutti... sono un novizio del java e mi sto scontrando da un paio di giorni con un problema:

ho creato una WA che, una volta effettuato il login, mi riporta una tabella time report aziendale (ovvero tipo attività, orario, cliente, etc.) tutto bene se faccio la connessione al database in una classe chiamata TimeReportMysqlConnection.java... lì nel metodo getConnessione espleto la chiamata al database e tutto fila liscio dopodiché espleto anche le varie query che mi servono... il problema è che vorrei creare qualcosa di + efficace in quanto a configurabilità... ovvero creare il file xml col datasource del database e poi fare una classe che gestisca la comunicazione... successivamente richiamare questa quando serve di atuare la connessione al db.

Per cercare di essere più chiaro possibile metterei i codici della mia web application:

__________________________________________________ __
/*
* classe per la connessione al database
*/

package connectionData;

import java.sql.*;

import businessObj.Utente;
import businessObj.CollectionRecord;
import businessObj.Record;


public class TimeReportMysqlConnection {
private Connection connessione;




public Connection getConnessione() throws Exception {

if (connessione == null) {


try{
Class.forName("com.mysql.jdbc.Driver");//immetto il drivername

}
catch (Exception e) {
e.getClass();
}
connessione = DriverManager.getConnection("jdbc:mysql://localhost/test?"+"user=root&password=root");
}

return connessione;
}


public void setConnessione(Connection connessione) {
this.connessione = connessione;
}
/*
* richiamo una select sulla tabella "utente"
* per verificare che l'utente che effettua il login
* sia realmente presente nel db altrimenti dovrà registrarsi
*/
public Utente getUtente(Utente c) throws Exception {
/*
* Il PreparedStatement è uno statement che verrà invocato più volte
* specificando ogno volta parametri differenti.
* Questo permette, al DBMS sottostante, di ottimizzarne l’esecuzione e,
* allo sviluppatore, di avere un unico statement relativamente ad una
* classe di problemi.
*
* classi da importare: java.sql.PreparedStatement;
* java.sql.ResultSet;
* java.sql.Statement;
*/
PreparedStatement st = getConnessione().prepareStatement("select * from utente where nomeUtente = ? and password = ?");

st.clearParameters();

st.setString(1, c.getNomeUtente());
st.setString(2, c.getPassword());

ResultSet rs = st.executeQuery();

Utente user = null;

if (rs.next()) {

user = new Utente();

user.setNomeUtente(rs.getString("nomeUtente"));
user.setPassword(rs.getString("password"));


}

return user;
}

//classe per l'inserimento di un nuovo utente nella tabella Employees
public int insertUtente(Utente c) throws Exception {

PreparedStatement st = getConnessione().prepareStatement("insert into utente(nomeUtente, password, email, first_name, second_name) values(?,?,?,?,?)");
st.clearParameters();
st.setString(1, c.getNomeUtente());
st.setString(2, c.getPassword());
st.setString(3, c.getEmail());
st.setString(4, c.getFirst_name());
st.setString(5, c.getSecond_name());


st.execute();

ResultSet rs = st.getGeneratedKeys();
int key = 0;
if (rs.next()) {
key = rs.getInt(1);
}
return key;
}

/*
* classe che permette di effettuare la query SQL sulla tabella
* OS_TIMEREPORT
*/
public CollectionRecord getCollectionRecord() throws Exception {

/*
* qui utilizzo i metodi Statement e ResultSet:
* possiamo vedere i nostri dati!
* La connessione ci fornisce uno strumento fondamentale per impartire
* un comando SQL al database:
* un oggetto che implementi l'interfaccia java.sql.Statement.
* Questo è possibile utilizzando la nostra connessione ed in particolare
* il metodo createStatement:
*
* Utilizzando poi questo oggetto è possibile fare un'interrogazione al database
* utilizzando il metodo executeQuery e fornendo l'interrogazione SQL da effettuare.
* Il risultato dell'esecuzione della query è rappresentato da un oggetto che
* implementa l'interfaccia java.sql.ResultSet.
* Un ResultSet è quello che nel mondo dei database si chiama un cursore.
* Poiché il risultato di una interrogazione è una tabella
* il ResultSet consente di scorrere le righe della tabella una alla volta.
* Il tipico codice che si usa per scorrere la tabella è il seguente:
*
* while (rs.next()) {
* // Accede ai dati della riga.
* }
*/
Statement st = getConnessione().createStatement();
ResultSet rs = st.executeQuery("select * from record");

CollectionRecord records = new CollectionRecord();

while (rs.next()) {

/*
* costruisce il listato della tabella OS_TIMEREPORT
* partendo dall'object di tipo Record
* che ricalca la struttura della tabella OS_TIMEREPORT
*/

Record rec = new Record();

rec.setID(rs.getInt("ID"));
rec.setDate_entered(rs.getDate("date_entered"));
rec.setDate_modified(rs.getDate("date_modified"));
rec.setModified_by_user(rs.getInt("modified_by_use r"));
rec.setCreated_by(rs.getString("created_by"));
rec.setDescription(rs.getString("description"));
rec.setDeleted(rs.getBoolean("deleted"));
rec.setAssigned_user_id(rs.getInt("assigned_user_i d"));
rec.setDate(rs.getDate("date"));
rec.setNum_ore(rs.getInt("num_ore"));
rec.setMinuti(rs.getInt("minuti"));
rec.setTipo_att(rs.getString("tipo_att"));
rec.setCod_trasf(rs.getString("cod_trasf"));
rec.setAltre_spese(rs.getString("altre_spese"));
rec.setDec_spese(rs.getString("dec_spese"));

records.addRecord(rec);
}
return records;
}
}
__________________________________________________ ___

quindi ora ogni qualvolta mi serve la conn al DB richiamo questa classe

ora invece ho creato un file xml:

__________________________________________________ __
<?xml version="1.0" encoding="UTF-8"?>

<datasources>
<local-tx-datasource>
<jndi-name>MyDS</jndi-name>
<connection-url>jdbc:mysql://localhost/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
__________________________________________________ __

questo ora con un blocco stile try-catch siffatto:

__________________________________________________ _
try {
Context context = new InitialContext();
javax.sql.DataSource ds =(javax.sql.DataSource)context.lookup("MyDS");
Connection connection = ds.getConnection();
}
catch (Exception e) {
e.printStackTrace();
}
__________________________________________________ _

vorrei catturarlo all'interno di una classe e poi richiamare sempre questa per la connessione...
ma non so come fare...
avevo pensato di modificare la TimeReportMysqlConnection.java così:

__________________________________________________ __
public class TimeReportMysqlConnection {
private Connection connessione;


public Connection getConnessione() throws Exception {
if (connessione == null) {


try {
Context context = new InitialContext();
javax.sql.DataSource ds =(javax.sql.DataSource)context.lookup("MyDS");
Connection connection = ds.getConnection();
}
catch (Exception e) {
e.printStackTrace();
}
}
return connessione;
}
__________________________________________________ __

ma penso che non sia opportuno... qualcuno sa darmi qualche consiglio?

Vi ringrazio anticipatamente di tutto l'aiuto che potrete darmi!