2012-04-10 120 views
1

我面临一个问题,实际上我在我的项目中使用c3p0进行连接池,它也使用Spring,Hibernate和JSF。我的问题是,在我的网页中,我们有一个名为“注销”的链接,当用户单击注销时,连接应该被释放,www.google.com返回到池中,这是可能的。释放连接到c3p0连接池

在此先感谢 PRASHANT

+0

如果您知道 – 2012-04-10 10:42:23

+0

我增加了我接受的答案我不太理解这个问题,因为您的c3p0池与您的用户请求无关。该池是自我管理的(当连接在一段时间后没有被使用时,该连接要么关闭,要么放回池中)。 – 2012-04-10 11:19:45

+0

是的,您的权利池与用户请求无关,但在我们的网页上,我们有一个名为logout的链接。在一种情况下,如果我有一个maxPoolSize 2和2用户登录,那么当第三个用户尝试登录时,他应该等待连接free.I想要这样做,如果我点击我的注销链接,然后用户注销,也是它释放连接,以便等待获取连接的另一个用户获得连接并完成工作。 – 2012-04-10 11:27:16

回答

1

你期待是控制并发用户数登录到你的系统

当3位用户尝试登录那么他应该等待连接 释放

现在,您可以使用并发计数器

实现这个
  • 创建过滤器来过滤所有请求。
  • 每当一个新的请求创建增量计数器当用户注销递减计数器
  • 当计数器命中最大值使该线程等待,直到插槽可

您可以通过JMX或单独的管理控制台控制最大用户数。 此外,当处理它的线程终止时应该释放一个连接(因为会话对象没有任何引用,所以它可以被GC化,超时之后它将在池中重用)。

它总是最好不要使用数据库资源创建瓶颈。

+0

没有其实我只是试图这样做,当任何用户注销然后连接返回到池 – 2012-04-10 11:50:22

+0

我明白,但一个连接是一个资源链接到正在运行的线程,如果线程死了,然后连接返回到池(迟早)。 – 2012-04-10 11:52:14

+0

你的意思是没有办法做到这一点吗? – 2012-04-10 11:56:27