2012-12-10 39 views
1

我使用NetBeans和Tomcat 7創建Web應用程序,並且我想創建我的第一個連接池。 我已經按照Tomcat文檔在這裏所有的步驟: http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html集中在一個類中查找Tomcat 7中的資源jdni

但在我的應用我有很多DAO每個許多不同的方法的對象,所以我想避免編寫的代碼查找數據源並在每個訪問數據庫的方法中獲得連接,所以我創建了一個類來集中這個操作並返回一個連接到不同的DAO對象。

你可以看到下面的代碼,但正如我所說這是我第一次這樣做,所以我不知道......這對你有意義嗎?有沒有更好的方法來做這樣的事情?或者在每種方法中編寫代碼會更好?

如果這樣做有道理,我可以使用Context還是DataSource作爲靜態屬性來避免連續查找?

非常感謝!

我的ConnectionPool類:

package dao.mysql; 

import java.sql.Connection; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import org.apache.tomcat.jdbc.pool.DataSource; 


public class ConnectionPool { 

    public static Connection getConnection() { 
     Connection connection = null; 
     try {    
      Context initCtx = new InitialContext(); 
      Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
      DataSource ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB"); 

      connection = ds.getConnection(); 

     } catch (SQLException ex) { 
      Logger.getLogger(ConnectionPool.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (NamingException ex) { 
      Logger.getLogger(ConnectionPool.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return connection; 
    } 
} 

回答

1

您可以使用JDBC連接池作爲一個singleton bean這裏描述in this article.

+0

感謝@anubhava但我現在很困惑,因爲其實我的第一種方法是什麼就像你發佈的鏈接中的內容,其他用戶說我正試圖「重新發明輪子」。請看看我在這裏的第一篇文章:http://stackoverflow.com/questions/13792469/basic-db-connection-pool-with-java-and-tomcat-7/13792571#13792571並說我,如果我的第一個方法是正確的。非常感謝! – MikO

+0

@MikO:我同意在上面的代碼中使用通過JNDI定義的數據源更好。但是我給出了這個鏈接,告訴你如何使用連接池和ServletContextListener,這樣你就可以乾淨地初始化和銷燬​​所有的數據庫連接。 – anubhava

+0

好吧,所以我上面的代碼是正確的,是有道理的?使用JDNI並將查找集中在一個類中?並且非常感謝。 – MikO