2011-03-22 238 views
0

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

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

我正在寻找一种方法来告诉glassfish重新建立连接。有任何想法吗?

回答

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查找标题谈到:标记接触不良,它的大约三分之二下跌的一页。

0

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

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

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

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

在管理控制台中,打开资源组件,打开 JDBC组件,选择连接池,然后选择连接 池您想冲洗。然后选择页面左上角 的Flush按钮。有关详细信息,请单击 管理控制台中的帮助按钮。

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

另一种方法是在连接池中启用验证。这将迫使GF在将它交付给应用程序之前检查连接是否正常工作。一旦它意识到连接已关闭,它将用新的连接替换它。