glassfish JDBC连接池

时间:2011-03-22 15:19:10

标签: java jdbc glassfish-3

我的应用程序使用mysql jdbc连接池。当我通过glassfish管理站点ping数据库时,我收到了很好的回复。当我使用我的应用程序时,一切正常。

出于任何原因,mysql服务器崩溃,我的问题就发生了。崩溃后,我重新启动mysql服务器,当我通过glassfish管理站点ping数据库时,我收到了很好的响应,但是当我使用我的应用程序时,我收到错误。

我正在寻找一种告诉glassfish重建连接的方法。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

你可能会在你的应用程序中挂起你的连接,而不是在你完成它们之后立即将它们返回到池中。

答案 1 :(得分:1)

仔细查看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寻找标题:标记不良连接,它大约是页面的三分之二。

答案 2 :(得分:0)

有时GlassFish没有意识到池中的连接不再好。因此,它可能会暂时将关闭的连接发回应用程序(我已经看到这种情况发生了长达20分钟)。

在这种情况下,您可以强制GF关闭旧连接&通过刷新连接池来创建新连接。

来自http://docs.oracle.com/cd/E19798-01/821-1752/giyeb/index.html的摘录。

  

您可以通过以下方式之一刷新JDBC连接池:

     

在管理控制台中,打开Resources组件,打开   JDBC组件,选择Connection Pools,然后选择连接   你要冲洗的游泳池。然后选择左上角的Flush按钮   页面的一角。有关详细信息,请单击中的“帮助”按钮   管理控制台。

     

使用asadmin flush-connection-pool命令。有关详细信息,请参阅   Oracle GlassFish Server 3.0.1参考手册。

另一种选择是在连接池中启用验证。这将迫使GF在将其发送给应用程序之前检查连接是否正常。一旦它意识到连接已关闭,它将用新连接替换它。