2012-02-10 107 views
0

目前我使用單獨的DBConnectionManager類來處理連接池,但我也意識到這是錯誤的方式,因爲每次doGet()時servlet都不會調用同一個池,被執行。針對Servlets的JDBC連接池

  1. 有人可以向我解釋爲什麼會出現上述情況嗎?
  2. JNDI是通過tomcat實現適當連接池的java servlets的方式嗎?

我有2篇文章的鏈接,這是用servlet實現連接池的正確方法嗎?

http://www.javaranch.com/journal/200601/JDBCConnectionPooling.html

http://onjava.com/onjava/2006/04/19/database-connection-pooling-with-tomcat.html

是否有可能保存數據庫管理器對象的背景下,像這樣:

mtdb = (MTDbManager) context.getAttribute("MTDBMANAGER"); 
if (mtdb == null) { 
      System.out 
        .println("MTDbManager is null, reinitialize MTDbManager");    

      initMTDB(config); 
      context.setAttribute("MTDBMANAGER", mtdb); 
     } 

然後我打電話mtdb.getInstance()的getConnection()和。它會一直引用這個對象。

謝謝。

回答

4

通常,最好的建議是將連接池留給應用程序服務器。只需使用JNDI查找數據源,然後讓應用程序服務器處理其餘部分。這使得您的應用程序可移植(不同的應用程序服務器具有不同的池化機制和設置),並且最有可能是最有效的。

+0

又一個問題,並做JNDI正確連接池?含義我將最大連接數設置爲5,第6個請求進入,JNDI將嘗試重新連接之前執行等待超時。 – Maurice 2012-02-10 09:10:54

+2

JNDI本身不會進行池化,您可以查找一個['javax.sql.DataSource'](http://docs.oracle.com/javase/6/docs/api/javax/sql/DataSource.html)對象爲您提供您需要連接時調用的getConnection()方法。如果沒有可用的連接,則對getConnection()的調用將被阻止。注:每次需要連接時都不必查找JNDI數據源,因此將引用緩存到數據源是非常常見的做法。希望有所幫助。 – beny23 2012-02-10 09:27:20