我正在使用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