Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-05-2007, 16:10   #1
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6186
[Java] Pool di connessioni JDBC

Ciao ragazzi,
ho una domanda riguardo il pool di connessioni JDBC. In pratica, le connessioi vengono memorizzate e poi passate ad altri utenti senza crearne di nuove. Ma se io accedo ad un database mediante username e password, come fa a passarmi una connessione già esistente? Devo comunque specificare i miei parametri di login. Quindi forse quello che non rifà è il caricamento e la registrazione del driver JDBC?
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2007, 18:09   #2
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6186
Dai ragazzi, nessuno usa pool di connessioni?
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 08:40   #3
Dix 3
Senior Member
 
L'Avatar di Dix 3
 
Iscritto dal: Jan 2002
Messaggi: 1024
Anche io ho lo stesso porblema.. ma qui sembra che nessuno lo sappia... :P

io ho trovato mille modi diversi.. ma non so quale usare..

1) fare la classe da solo

Codice:
package conn;

import java.io.Serializable;
import java.util.*;
import java.sql.*;

// La classe che gestisce un pool di connessioni
public class ConnectionPool implements Serializable{

  // La variabile che gestisce l'unica istanza di ConnectionPool
  private static ConnectionPool connectionPool = null;  

  private Vector freeConnections;  // La coda di connessioni libere
  private String dbUrl;           // Il nome del database
  private String dbDriver;        // Il driver del database
  private String dbLogin;         // Il login per il database
  private String dbPassword;      // La password di accesso al database

  // Costruttore della classe ConnectionPool
  private ConnectionPool() throws ConnectionPoolException {
    freeConnections = new Vector();  // Costruisce la coda delle connessioni libere
    loadParameters();                // Carica I parametric per l'accesso alla base di dati
    loadDriver();                    // Carica il driver del database
  }


  // Funzione privata che carica i parametri per l'accesso al database
  private void loadParameters() {
    dbUrl = "jdbc:mysql://localhost:3306/[nomeDB]";  // Url per un database locale
    dbDriver = "com.mysql.jdbc.Driver";    // Driver per database mysql
    dbLogin = "user";                       // Login della base di dati
    dbPassword = "psw";                 // Password per l'accesso al database
  }

  // Funzione privata che carica il driver per l'accesso al database. 
  // In caso di errore durante il caricamento del driver solleva un'eccezione.
  private void loadDriver() throws ConnectionPoolException {
    try {
      java.lang.Class.forName(dbDriver);
    }
    catch (Exception e) {
      throw new ConnectionPoolException();
    }
  }

  public static synchronized ConnectionPool getConnectionPool() 
  throws ConnectionPoolException {
    if(connectionPool == null) {
      connectionPool = new ConnectionPool();
    }
    return connectionPool;
  }

  // Il metodo getConnection restituisce una connessione libera prelevandola 
  // dalla coda freeConnections oppure se non ci sono connessioni disponibili
  // creandone una nuova con una chiamata a newConnection
  public synchronized Connection getConnection() throws ConnectionPoolException {
    Connection con;
      
    if(freeConnections.size() > 0) {      // Se la coda delle connessioni libere non è vuota
      con = (Connection)freeConnections.firstElement();  // Preleva il primo elemento
      freeConnections.removeElementAt(0);                // e lo cancella dalla coda
      try {
        if(con.isClosed()) {         // Verifica se la connessione non è più valida
          con = getConnection();    // Richiama getConnection ricorsivamente
        }
      }
      catch(SQLException e) {           // Se c'è un errore
        con = getConnection();        // richiama getConnection ricorsivamente 
      }
    }
    else {                                // se la coda delle connessioni libere è vuota 
      con = newConnection();            // crea una nuova connessione
    }
    return con;                           // restituisce una connessione valida
  } 
    
  // Il metodo newConnection restituisce una nuova connessione
  private Connection newConnection() throws ConnectionPoolException {
    Connection con = null;
      
    try {
      con = DriverManager.getConnection(dbUrl,dbLogin,dbPassword);  // crea la connessione
    }
    catch(SQLException e) {                      // in caso di errore
      throw new ConnectionPoolException();       // solleva un'eccezione
    }
    return con;                                  // restituisce la nuova connessione
  }

  // Il metodo releaseConnection rilascia una connessione inserendola
  // nella coda delle connessioni libere
  public synchronized void releaseConnection(Connection con) {
    freeConnections.add(con);   // Inserisce la connessione nella coda
  }
}

MA credo che abbia delle limitazioni..
-Come fa a limitare il numero di connessioni.
-Il Timeout??
-Le trnasazioni??


2) usare JNDI ... ma non riesco bene a capire come funziona per ora..
http://tomcat.apache.org/tomcat-5.5-...l#Introduction

3) ho visto altre librerie in grado di fare un pool i connessioni ma non so bene come si utilizzano..

Se qualconu sa qualcosa o può consigliare ben venga ne sarei grato..
__________________
Dix 3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 08:47   #4
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Io ho usato
http://homepages.nildram.co.uk/~slink/java/DBPool/
e per le mie webbapp uso JNDI sfruttando tomcat per il pool di connessioni, e mi sembra la soluzione piu adatta.... se vedi la documentazione di tomcat c'è tutto segnato passo passo.
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 10:13   #5
0rph3n
Senior Member
 
L'Avatar di 0rph3n
 
Iscritto dal: Apr 2005
Città: Resana - TV
Messaggi: 960
Quote:
Originariamente inviato da isAlreadyInUse Guarda i messaggi
Io ho usato
http://homepages.nildram.co.uk/~slink/java/DBPool/
e per le mie webbapp uso JNDI sfruttando tomcat per il pool di connessioni, e mi sembra la soluzione piu adatta.... se vedi la documentazione di tomcat c'è tutto segnato passo passo.
bene bene, ho proprio un problemino con tomcat + jndi
nel file context ho configurato risorsa e parametri:
Codice:
<Resource name="jdbc/mioDB" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/mioDB">
...
</ResourceParams>
nel web.xml ho referenziato la risorsa:
Codice:
<resource-ref>
...
</resource-ref>
quando vado a fare il lookup del datasource, me lo trova ma quando provo a chiedergli gentilmente una connessione, sto stronzo mi risponde con questa eccezione:
Codice:
Cannot create JDBC driver of class '' for connect URL 'null'
il fatto che non riesca a trovare la classe del driver e l'url del db, mi sembra un po' strano visto che sono nello stesso file di configurazione dove è dichiarata la risorsa (il datasource) che viene invece trovata.

girando un po' per la rete mi sono imbattuto in diverse persone che hanno lo stesso problema e c'è chi ha risolto dichiarando risorsa e parametri nel server.xml e linkando la risorsa nel context.xml, chi rinominando il context.xml in %contestoApp%.xml e mettendolo nella cartella META-INF.
inutile dire che ho provato pure io, non ottenendo risultati.

mi sono accorto però che mancavano le librerie commons-dbcp e commons-pool e cercando un po le ho trovate nel sito di jakarta.
scaricate ed aggiunte non sono servite a nulla, se non a peggiorare la situazione in quanto il lookup della risorsa che prima andava a buon fine con quelle librerie restituiva null.

consigli?
0rph3n è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 10:24   #6
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Il connector per il db deve essere il common/lib di tomcat e solo li
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 10:41   #7
Dix 3
Senior Member
 
L'Avatar di Dix 3
 
Iscritto dal: Jan 2002
Messaggi: 1024
Quote:
Originariamente inviato da isAlreadyInUse Guarda i messaggi
Io ho usato
http://homepages.nildram.co.uk/~slink/java/DBPool/
e per le mie webbapp uso JNDI sfruttando tomcat per il pool di connessioni, e mi sembra la soluzione piu adatta.... se vedi la documentazione di tomcat c'è tutto segnato passo passo.


Grazie mille

queste librerie sono fantastiche..


ma sorge ancora un piccolo problema..

Quando faccio
Codice:
ConnectionPoolManager cpm = ConnectionPoolManager.getInstance("../db.properties");
// creo una connessione del Pool
Connection con = cpm.getConnection("intr");
dopo la connessione "con" la devo chiudere oppure no.. insomma devo fare
Codice:
con.close();
oppure esiste qualche altro modo..
o addirittura non serve..
__________________
Dix 3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 10:42   #8
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Leggi la documentazione, se non erro ci sta scritto che te le devi chiudere.
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 10:46   #9
Dix 3
Senior Member
 
L'Avatar di Dix 3
 
Iscritto dal: Jan 2002
Messaggi: 1024
Quote:
Originariamente inviato da isAlreadyInUse Guarda i messaggi
Leggi la documentazione, se non erro ci sta scritto che te le devi chiudere.

Grazie grazie grazie grazie... ave:

Ti sono debitore...
__________________
Dix 3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 10:47   #10
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Ok mi devi un caffè
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 11:42   #11
0rph3n
Senior Member
 
L'Avatar di 0rph3n
 
Iscritto dal: Apr 2005
Città: Resana - TV
Messaggi: 960
Quote:
Originariamente inviato da isAlreadyInUse Guarda i messaggi
Il connector per il db deve essere il common/lib di tomcat e solo li
il connector era nella directory WEB-INF/lib/ dell'applicazione...
...l'ho spostato in %CATALINA_HOME%/common/lib/.
risultato? ...sempre la stessa eccezione

edit: ho forse male interpretato il tuo consiglio?
0rph3n è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 11:45   #12
Dix 3
Senior Member
 
L'Avatar di Dix 3
 
Iscritto dal: Jan 2002
Messaggi: 1024
Quote:
Originariamente inviato da isAlreadyInUse Guarda i messaggi
Ok mi devi un caffè
te ne pago 10


io ho fatto questa classe per il

Codice:
public class ConnManager {
    
    private ConnManager() {}
   
    public static synchronized Connection getConnect() throws IOException, SQLException
    {
        ConnectionPoolManager cpm = null;
        cpm =  ConnectionPoolManager.getInstance("../db.properties");
        return cpm.getConnection("intr");
    }
}


ERRORE
Codice:
exception

org.apache.jasper.JasperException
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

root cause

javax.servlet.ServletException
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
	org.apache.jsp.admin2.ctrl_jsp._jspService(ctrl_jsp.java:92)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

root cause

java.sql.SQLException
	snaq.db.ConnectionPool.getConnection(ConnectionPool.java:222)
	snaq.db.ConnectionPoolManager.getConnection(ConnectionPoolManager.java:571)
	conn.ConnManager.getConnect(ConnManager.java:26)
	DB.UtenteApp.UtenteDAO.loadByUsername(UtenteDAO.java:139)
	DB.UtenteApp.Utente.leggiDatidaDB_LOGIN(Utente.java:297)
	org.apache.jsp.admin2.ctrl_jsp._jspService(ctrl_jsp.java:72)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
__________________
Dix 3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 11:47   #13
Dix 3
Senior Member
 
L'Avatar di Dix 3
 
Iscritto dal: Jan 2002
Messaggi: 1024
Il file e properties è presente nella cartella WEB-INF
cosi strutturato

Codice:
drivers=com.mysql.jdbc.Driver
logfile=dbpool.log

intr.url=jdbc:mysql://127.0.0.1:3306/intr
intr.user=root
intr.password=null
intr.maxpool=5
intr.maxconn=10
intr.expiry=30
intr.init=5
intr.validator=snaq.db.AutoCommitValidator
intr.cache=true
intr.debug=false
__________________
Dix 3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2007, 12:16   #14
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Mi sa che cosi non lo raggiungi il file
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2007, 17:52   #15
0rph3n
Senior Member
 
L'Avatar di 0rph3n
 
Iscritto dal: Apr 2005
Città: Resana - TV
Messaggi: 960
Quote:
Originariamente inviato da 0rph3n Guarda i messaggi
il connector era nella directory WEB-INF/lib/ dell'applicazione...
...l'ho spostato in %CATALINA_HOME%/common/lib/.
risultato? ...sempre la stessa eccezione

edit: ho forse male interpretato il tuo consiglio?
tadaaaaaaaaaaaan risolto!
prima avevo dichiarato la risorsa e poi avevo specificato i parametri in questo modo:
Codice:
<Resource name="jdbc/mioDB" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/mioDB">
...
</ResourceParams>
non so come mi sia venuto in mente di provare in questo:
Codice:
<Resource name="jdbc/mioDB" auth="Container" type="javax.sql.DataSource"
   nomeParametro="valoreParametro" ... />
e così funzica tutto ^^

'iao
0rph3n è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2007, 18:03   #16
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Infatti anche io faccio nel secondo modo come da documentazione Tomcat
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 08:22   #17
0rph3n
Senior Member
 
L'Avatar di 0rph3n
 
Iscritto dal: Apr 2005
Città: Resana - TV
Messaggi: 960
infatti io da povero degenerato avevo guardato la documentazione del 4 piuttosto di quella del 5.5
0rph3n è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
CMF Headphone Pro: un best-buy per i pi&...
Caviar ha presentato un iPhone Air placc...
Aggiornamento straordinario per Windows ...
Prime Vision: così Amazon trasfor...
ASTRO A10 Gen 2 in offerta su Amazon: cu...
Apple torna sui propri passi: su iOS 26....
LG NanoCell in super sconto su Amazon: 7...
Microsoft: più di metà deg...
Smartwatch Amazfit in super offerta su A...
D3HP: Cooler Master prova a riscrivere l...
I nuovi iPhone 17 sono un successo: vend...
Napster ritorna con Napster View, la web...
Lenovo ha presentato il primo notebook d...
OnePlus 15, assalto alla concorrenza: ba...
iPhone Air è un flop: Apple tagli...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:34.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v