我正在使用Java Servlets的網站上工作,我的研究表明,最好每個用戶保持一個數據庫連接(而不是每次都只有一個連接坐在後臺或連接到數據庫)交易需要作出)。但是,我不知道如何完成這個任務。什麼我目前做的是在我的數據訪問對象類我有一個如何在Java Servlet應用程序上爲每個用戶創建一個數據庫連接?
private static Connection conn;
,我有一個HTTPSessionListener
- 上sessionCreated
事件我連接到數據庫使用這種靜態「conn將」變量,並在sessionDestroyed
事件我斷開在 「參數conn」 變量:
...在我的 「MySessionListener」 ......
public void sessionCreated(HttpSessionEvent sessionEvent) {
System.out.println("Session created!");
DAO.connect();
}
public void sessionDestroyed(HttpSessionEvent sessionEvent)
{
System.out.println("Session destroyed");
String user = (String) sessionEvent.getSession().getAttribute("userid");
if (user != null) DAO.signUserOut(user);
DAO.disconnect();
}
現在有了這個問題是:
- 恐怕這種方式本質上會降低到只有一個人人共享的連接(而不是每個用戶的連接),只是我不時斷開連接,如果沒有用戶。正確?
- 如果多個用戶在線並且一個用戶關閉了他們的會話,他們將關閉每個人的連接,直到其他人開始會話併爲每個人創建一個新的連接,對不對?我無法對此進行很好的測試,因爲我在筆記本電腦上使用3臺瀏覽器在本地進行測試,但即使關閉了有我的網站的瀏覽器,該會話也不會立即死亡,而且我也不確定究竟發生了什麼。我所知道的是,有時候我會得到一個異常,說「連接關閉後不允許交易」。
警告:雖然鏈接的Oracle文章給出了有關連接池基本工作原理的正確基本概念,但提供的代碼示例不應用於生產!這是非常麻煩,不可擴展。而是使用servletcontainer提供的連接池設施。甚至Tomcat也帶有內置的連接池。 – BalusC
@BalusC你是對的,這可能有點混亂,所以我現在刪除了這些引用。 –
謝謝大家,我現在正在查看http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html,並將弄清楚如何使用Tomcat的連接池。會問我是否還有其他問題。謝謝! – iLoop