glassfish JDBC 连接池
Posted
技术标签:
【中文标题】glassfish JDBC 连接池【英文标题】:glassfish JDBC connection pool 【发布时间】:2011-03-22 15:19:09 【问题描述】:我的应用程序使用 mysql jdbc 连接池。当我通过 glassfish 管理站点 ping 数据库时,我得到了很好的响应。当我使用我的应用程序时,一切正常。
我的问题发生在 mysql 服务器因任何原因崩溃时。崩溃后,我重新启动了 mysql 服务器,当我通过 glassfish 管理站点 ping 数据库时,我得到了很好的响应,但是当我使用我的应用程序时,我得到了一个错误。
我正在寻找一种方法来告诉 glassfish 重新建立连接。有什么想法吗?
【问题讨论】:
【参考方案1】:您可能会在应用程序中保留连接,而不是在完成连接后立即将它们返回到池中。
【讨论】:
【参考方案2】:查看 glassfish 文档,发现以下内容:
com.sun.appserv.jdbc.DataSource ds=
(com.sun.appserv.jdbc.DataSource)context.lookup("dataSource");
Connection con = ds.getConnection();
Statement stmt = null;
try
stmt = con.createStatement();
stmt.executeUpdate("Update");
catch (BadConnectionException e)
ds.markConnectionAsBad(con) //marking it as bad for removal
finally
stmt.close();
con.close(); //Connection will be destroyed during close.
来自this page 查找标题:标记不良连接,大约在页面下方的三分之二处。
【讨论】:
【参考方案3】:有时 GlassFish 并没有意识到池中的连接不再好。因此,它可能会在一段时间内将关闭的连接返回给应用程序(我已经看到这种情况长达 20 分钟)。
在这种情况下,您可以强制 GF 关闭旧连接并通过刷新连接池来创建新连接。
来自http://docs.oracle.com/cd/E19798-01/821-1752/giyeb/index.html 的片段。
您可以通过以下方式之一刷新 JDBC 连接池:
在管理控制台中,打开资源组件,打开 JDBC组件,选择Connection Pools,选择连接 您要冲洗的游泳池。然后选择左上角的刷新按钮 页面的一角。有关详细信息,请单击“帮助”按钮 管理控制台。
使用 asadmin flush-connection-pool 命令。有关详细信息,请参阅 Oracle GlassFish Server 3.0.1 参考手册。
另一个选项是在连接池中启用验证。这将迫使 GF 在将其发送给应用程序之前检查连接是否正常工作。一旦它意识到连接已关闭,它将用新连接替换它。
【讨论】:
以上是关于glassfish JDBC 连接池的主要内容,如果未能解决你的问题,请参考以下文章
Glassfish“连接已关闭”错误与连接池、JDBC 和 SQL Server 2008
在 GlassFish v4.1.1 中创建 jdbc 连接池 [重复]