Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
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: 6851
[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: 6851
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


Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Stellantis richiama 700.000 auto ibride ...
Proton lancia Meet: la nuova piattaforma...
Siri potrebbe avere uno store dedicato a...
Amazon, crollano i prezzi su robot aspir...
Amazon Haul lancia il -20% sulle offerte...
Apple aggiorna le liste di prodotti vint...
Tutti i dispositivi Amazon in offerta og...
Non solo smartphone, cuffie e orologi: N...
MacBook Air M4 2025 in offerta su Amazon...
Xiaomi porta HyperOS 3.1: rollout avviat...
Portatile HP super completo a 649€: 32GB...
OnePlus spoilera il nuovo Nord 6: il mid...
Nuova rimodulazione da Fastweb: è...
NASA: lanciata la missione Artemis II ve...
Intel riacquista la Fab 34 in Irlanda, u...
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:08.


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