Newsgroup: it.comp.java
Titolo: Utilizzo di un DataSource.......

Uso di datasource......
Salve ragazzi,
avrei un aiuto da chiedervi su un aspetto che sto realizzando nella mia
applicazione java.
In particolare ho realizzato una classe per gestire la connessione con
un db mysql
codice:
import java.sql.*;
import java.util.Vector;
public class Database {
   private String nomeDB;       // Nome del Database a cui connettersi
   private String nomeUtente;   // Nome utente utilizzato per la
connessione al Database
   private String pwdUtente;    // Password usata per la connessione al
Database
   private String errore;       // Raccoglie informazioni riguardo
l'ultima eccezione sollevata
   private Connection db;       // La connessione col Database
   private boolean connesso;    // Flag che indica se la connessione è
attiva o meno
   public Database(String nomeDB) { this(nomeDB, "", ""); }
   public Database(String nomeDB, String nomeUtente, String pwdUtente)
{
      this.nomeDB = nomeDB;
      this.nomeUtente = nomeUtente;
      this.pwdUtente = pwdUtente;
      connesso = false;
      errore = "";
   }
   // Apre la connessione con il Database
   public boolean connetti() {
      connesso = false;
      try {
         // Carico il driver JDBC per la connessione con il database
MySQL
         Class.forName("com.mysql.jdbc.Driver");
         // Controllo che il nome del Database non sia nulla
         if (!nomeDB.equals("")) {
            // Controllo se il nome utente va usato o meno per la
connessione
            if (nomeUtente.equals("")) {
               // La connessione non richiede nome utente e password
               db =
DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB);
            } else {
               // La connessione richiede nome utente, controllo se
necessita anche della password
               if (pwdUtente.equals("")) {
                  // La connessione non necessita di password
                  db =
DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB +
"?user=" + nomeUtente);
               } else {
                  // La connessione necessita della password
                  db =
DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB +
"?user=" + nomeUtente + "&password=" + pwdUtente);
               }
            }
            // La connessione è avvenuta con successo
            connesso = true;
         } else {
            System.out.println("Manca il nome del database!!");
            System.out.println("Scrivere il nome del database da
utilizzare all'interno del file \"config.xml\"");
            System.exit(0);
         }
      } catch (Exception e) { errore = e.getMessage(); }
      return connesso;
   }
   public boolean eseguiAggiornamento(String query) {
	      int numero = 0;
	      boolean risultato = false;
	      try {
	         Statement stmt = db.createStatement();
	         numero = stmt.executeUpdate(query);
	         risultato = true;
	         stmt.close();
	      } catch (Exception e) {
	         e.printStackTrace();
	         errore = e.getMessage();
	         risultato = false;
	      }
	      return risultato;
	   }
   public Vector eseguiQuery(String query) {
	      Vector v = null;
	      String [] record;
	      int colonne = 0;
	      try {
	         Statement stmt = db.createStatement();     // Creo lo
Statement per l'esecuzione della query
	         ResultSet rs = stmt.executeQuery(query);   // Ottengo il
ResultSet dell'esecuzione della query
	         v = new Vector();
	         ResultSetMetaData rsmd = rs.getMetaData();
	         colonne = rsmd.getColumnCount();
	         while(rs.next()) {   // Creo il vettore risultato scorrendo
tutto il ResultSet
	            record = new String[colonne];
	            for (int i=0; i<colonne; i++) record[i] =
rs.getString(i+1);
	            v.add( (String[]) record.clone() );
	         }
	         rs.close();     // Chiudo il ResultSet
	         stmt.close();   // Chiudo lo Statement
	      } catch (Exception e) { e.printStackTrace(); errore =
e.getMessage(); }
	      return v;
	   }
   // Chiude la connessione con il Database
   public void disconnetti() {
      try {
         db.close();
         connesso = false;
      } catch (Exception e) { e.printStackTrace(); }
   }
   public boolean isConnesso() { return connesso; }   // Ritorna TRUE
se la connessione con il Database è attiva
   public String getErrore() { return errore; }    // Ritorna il
messaggio d'errore dell'ultima eccezione sollevata
   public Connection getConnection() { return db; }
}
Ho realizzato le altri classi e sviluppato l'applicazione che funziona
egregiamente.
Un pò in ritardo ho considerato il fatto di utilizzare un Datasource
invece delle classiche operazioni per stabilire la connessione col db.
Domanda 1) Che vantaggi ha usare questo tipo di "connessione" rispetto
alla classica class for name etc...solo di linguaggio?O anche
prestazionali?
Domanda 2) Volendo modificare il mio codice per passare all'altra
implementazione devo modifcare solo le prime istuzioni di
connessione?Cioè query e risultati vanno considerate con lo stesso
codice?
Ho letto su internet che dovrei ottenere un'origine dati con JNDI
codice:Initial Context ctx=new Initial Context();
DataSource ds=(DataSource) ctx.lookup("nome-datasource").
Che devo mettere per nome-datasource?
Vi ringrazio,se potete farmi un esempio di codice lo gradirei.....
grazie per la vostra disponibilità

 Che devo mettere per nome-datasource?
Guarda che i DataSource sono implementati dai webserver (che li
implementano). Se non stai facendo un'applicazione web o, se non usi un
webserver che li implementa, non li hai a disposizione. In caso
contrario dovrai impostare sulla sua console di amministrazione il
puntamento al db attraverso un nome jndi scelto da te e che poi userai
per ottenere il DataSource medesimo.