Newsgroup: it.comp.java
Titolo: Progetto DBCP di Jakarta...

Salve ragazzi,
vorrei chiedervi un aiuto perchè sono caduto nel panico più totale.
Stavo realizzando un'applicazione in jsf che si interconnette con un db
mysql.
Ho realizzato il tutto con le jdbc 1.0,ma ora mi è stato detto di
passare ad un datasource, per cui usando il server Tomcat ho pensato di
appoggiarmi al progetto Jakarta DBCP.
Avendo già la classe scritta per la connessione al db con le jdbc 1.0
vorrei modificarla per adattarla a questa nuova tecnologia....ma non so
dove mettere mano....ho letto la documentazione ma mi sembra
terribilmente difficile,nonostante abbia già usato nella mia
applicazione componenti esterni per fare l'upload di un file...
Qualcuno ha voglia di aiutarmi?
La classe è la seguente,come posso riscriverla nel nuovo ambito?
Come devo modificare il web.xml del server?
Vi prego aiutatemi...
ackage giu;
/*
 * Classe dedicata alla gestione del Database.
 * Gestisce l'apertura e la chiusura della connessione col Database
 * Fornisce i metodi per l'esecuzione delle query sul Database
 */
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 Database2(String nomeDB) { this(nomeDB, "", ""); }
   public Database2(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; }   
}

Perchè non usi i datasource che ti puo mettere a disposizione direttamente
il Tomcat??
Se guardi un po di documentazione vedrai che è abbastanza facile configurare
il tutto.
Inoltre le modifiche che dovresti apportare alla tua classe sarebbero
minime, invece
di usare Class.forName e DriverManager.getConnection ti ritroveresti
semplicemente
ad interrogare un Context da cui il Datasource e quindi ad invocare
datasource.getConnection
Salve ragazzi,
vorrei chiedervi un aiuto perchè sono caduto nel panico più totale.
Stavo realizzando un'applicazione in jsf che si interconnette con un db
mysql.
Ho realizzato il tutto con le jdbc 1.0,ma ora mi è stato detto di
passare ad un datasource, per cui usando il server Tomcat ho pensato di
appoggiarmi al progetto Jakarta DBCP.
Avendo già la classe scritta per la connessione al db con le jdbc 1.0
vorrei modificarla per adattarla a questa nuova tecnologia....ma non so
dove mettere mano....ho letto la documentazione ma mi sembra
terribilmente difficile,nonostante abbia già usato nella mia
applicazione componenti esterni per fare l'upload di un file...
Qualcuno ha voglia di aiutarmi?
La classe è la seguente,come posso riscriverla nel nuovo ambito?
Come devo modificare il web.xml del server?
Vi prego aiutatemi...
<cut>

Grazie Andrea,
ho consultato questi indirizzi
http://tomcat.apache.org/tomcat-4.1-doc/printer/jndi-datasource-examples-howto.html
http://tomcat.apache.org/tomcat-4.1-doc/printer/jndi-resources-howto.html
ma ho dei problemi nel modificare il server.xml di Tomcat.
Mi aiuteresti?

dimenticavo di dirti che uso come web server tomcat embedded in Exadel
Studio Pro....cambia qualcosa?

proviamo.... che problemi hai???


non credo, l'importante è che tu possa configurare il server.xml
cmq... che problemi hai??


Grazie della tua disponibilità, ti chiedo di aiutarmi perchè sto
impazzendo,c'ho messo una marea di tempo per farlo funzionare bene con
le jdbc 1.0......con queste ci capisco poco...
Ho seguito i consigli sul sito che ti ho postato,ho creato una piccola
applicazione in JSF ma ho quest'eccezione:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented
it from fulfilling this request.
exception
javax.servlet.ServletException: Cannot find FacesContext
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
	org.apache.jsp.pages.test_jsp._jspService(test_jsp.java:107)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
javax.servlet.jsp.JspException: Cannot find FacesContext
Non essendo ancora esperto di jsf e soprattutto di JNDI e Datasource ti
chiedo di aiutarmi a risolvere il problema......
Per quanto riguarda le modifiche al server.xml menzionate nell'articolo
che ti ho postato le ho fatte,spero bene e sono:
<!-- MySQL dB username and password for dB connections  -->
    <parameter>
     <name>username</name>
     <value>root</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>shevagol</value>
    </parameter>
    <!-- Class name for mm.mysql JDBC driver -->
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
    </parameter>
Ho semplicemente messo username e password....le devo mettere
li???Inoltre ho sostituito la stringa per mysql....
Il web.xml dell'applicazione è
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="
http://java.sun.com/xml/ns/j2ee
"
 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
"
xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
">
 <display-name>test dbcp</display-name>
 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>server</param-value>
 </context-param>
 <listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
 </listener>
 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.faces</url-pattern>
 </servlet-mapping>
 <resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/TestDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>
</web-app>
Ti prego aiutami

 ha scritto nel messaggio
news:1152111987....@v61g2000cwv.googlegroups.com...
Grazie della tua disponibilità, ti chiedo di aiutarmi perchè sto
impazzendo,c'ho messo una marea di tempo per farlo funzionare bene con
le jdbc 1.0......con queste ci capisco poco...
Ho seguito i consigli sul sito che ti ho postato,ho creato una piccola
applicazione in JSF ma ho quest'eccezione:
<cut>
root cause
javax.servlet.jsp.JspException: Cannot find FacesContext
QUI è chiaro! Ti sta dicendo che hai un problema con Java Server Faces, ma
non ti so aiutare perche non le ho mai usate...
Per quanto riguarda i parametri per JNDI/Datasource, non capisco bene se hai
seguito TUTTE le indicazioni dei link che hai postato precedentemente e cmq,
bisogna anche vedere come hai modificato la classe per accedere al db...
fammi sapere....
