【发布时间】:2011-07-24 00:10:42
【问题描述】:
我正在使用 Java Servlets 开发一个网站,我的研究表明,最好为每个用户保留一个数据库连接(而不是始终只有一个连接位于后台或每次都连接到数据库)需要进行交易)。但是,我不知道如何做到这一点。我目前正在做的是在我的数据访问对象类中我有一个
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 个浏览器进行本地测试,但即使我关闭了打开我的网站的浏览器,会话也不会立即终止,我不确定到底发生了什么.我所知道的是,有时我会收到一个异常提示“连接关闭后不允许交易”。
【问题讨论】:
标签: java mysql servlets connection-pooling