Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
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: 6076
[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: 6076
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


Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Government Data Intelligence for Agricul...
iPhone 17e limitato per non oscurare iPh...
Windows 11 può usare l'IA per cla...
Microsoft Edge diventa più sicuro...
Yakuza Kiwami 3: il nuovo trailer mostra...
Geely lo fa davvero: auto con garanzia a...
'Troppi videogiochi': ecco perché...
Videogiochi e TV aumentano la concentraz...
OneXFly Apex è la console portati...
Dati impressionanti: le auto autonome di...
Il folle esperimento: 12 modem 56K uniti...
Philips Sonicare 3100 in super offerta s...
Auto elettriche: dalla Cina il prototipo...
Più di 2.000 operai cinesi e fond...
ECOVACS DEEBOT T50 MAX PRO OMNI scende d...
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: 10:57.


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