2011-03-22 295 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在將它交付給應用程序之前檢查連接是否正常工作。一旦它意識到連接已關閉,它將用新的連接替換它。