2012-12-09 12 views
13

Sto provando a creare il mio primo pool di connessioni. Sto creando un'applicazione Web Java con Tomcat 7 e un DB MySQL e vorrei creare il pool di connessioni più semplice possibile. Ho dato un'occhiata a diversi tutorial ma non è chiaro per me, quindi mi piacerebbe che tu confermassi se sto andando bene.Pool di connessione DB di base con Java e Tomcat 7

ho scritto la seguente classe come manager pool di connessione:

package dao.mysql; 

import java.sql.Connection; 
import java.sql.SQLException; 
import org.apache.tomcat.jdbc.pool.DataSource; 
import org.apache.tomcat.jdbc.pool.PoolProperties; 

public class MySQLConnectionPool { 

    private static DataSource datasource; 
    private static String driver = "com.mysql.jdbc.Driver"; 
    private static String url = "jdbc:mysql://localhost:3306/mydb"; 
    private static String username = "user"; 
    private static String password = "password"; 

    public MySQLConnectionPool() { 
     datasource = new DataSource(configurePoolProperties(driver, url, username, password)); 
    } 

    private PoolProperties configurePoolProperties(String driver, String url, String username, String password) { 
     PoolProperties properties = new PoolProperties(); 
     properties.setDriverClassName(driver); 
     properties.setUrl(url); 
     properties.setUsername(username); 
     properties.setPassword(password); 
     return properties; 
    } 

    public static synchronized Connection getConnection() { 
     Connection connection = null; 
     try { 
      connection = datasource.getConnection(); 
     } catch (SQLException ex) { 
      System.out.println("Error while getting a connection from the pool! \nSQL state:" + ex.getSQLState() + "\nMESSAGE" + ex.getMessage()); 
     } 
     return connection; 
    } 
} 

Non sono sicuro circa le statiche proprietà né la sincronizzati.

E non sono sicuro delle classi "client" del pool. Mi sembra di capire che hanno solo per ottenere una connessione utilizzando

Connection con = MySQLConnectionPool.getConnection(); 

e, infine, chiudere questa connessione utilizzando

con.close(); 

E questo è tutto? E inoltre, c'è un modo più semplice o migliore per farlo?

Grazie mille!

risposta

18

Questo è il modo sbagliato per farlo.

Tomcat dispone già di un pool di connessioni ed è possibile configurare e configurare senza alcun codice tramite context.xml nella directory conf.

Una volta definito lì, tutto ciò che dovete fare è cercare la DataSource JNDI nel vostro codice. Hardcoding tutto ciò (e reinventare la ruota) è una pessima idea.

Per informazioni su come configurare un DataSource JNDI controllare il manuale: http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html

manuale

Il Tomcat ha anche un esempio su come ottenere una connessione dal pool:

InitialContext cxt = new InitialContext(); 
DataSource ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/dsname"); 

dove dsname è la nome fornito nel context.xml

+0

Un DAO non * gestisce * un DataSource, semplicemente * lo utilizza *. Si potrebbe anche voler leggere il tutorial JavaEE: http://docs.oracle.com/javaee/6/tutorial/doc/bncjj.html –

+0

Se il pool di connessioni è configurato come JNDI DataSource in Tomcat e l'attributo factory della risorsa è 'org.apache.tomcat.jdbc.pool.DataSourceFactory', qual è il tipo DataSource quando si accede all'origine dati da una classe java? Io uso 'org.apache.tomcat.jdbc.pool.DataSource', o dovrebbe essere' javax.sql.DataSource' (quest'ultimo è il valore dell'attributo 'type' della Risorsa)? – Sefran2

Problemi correlati