2011-08-22 527 views
6

我正在開發一個應用程序,使用GWT,Hibernate(基於XML的映射),MySQL-在Tomcat6.0中。 IDE-Netbeans 6.9 我在Netbeans中設置了項目屬性「在保存時部署」選項。非法訪問:此Web應用程序實例已被停止

當我的應用程序運行在服務器長時間飄飛我的應用程序無法連接到數據庫,並拋出以下異常

最終的以下堆棧跟蹤被拋出調試的目的,以及一個錯誤引起的試圖終止導致非法訪問的線程
,並且沒有功能影響。

java.lang.IllegalStateException 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 
     at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4273) 
     at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1444) 
     at org.hibernate.connection.DriverManagerConnectionProvider.close(DriverManagerConnectionProvider.java:152) 
     at org.hibernate.connection.DriverManagerConnectionProvider.finalize(DriverManagerConnectionProvider.java:142) 
     at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) 
     at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) 
     at java.lang.ref.Finalizer.access$100(Finalizer.java:14) 
     at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 

當我重新啓動我的Tomcat服務器,我又能夠連接Database.Please告訴我,通過它我可以得到無縫的性能,並能得到無需重新啓動Tomcat的完成工作的方式。

回答

5

您可能會打開越來越多的連接並且永遠不會關閉它們,最終達到數據庫配置的最大連接數。

找到你在哪裏打開連接,並確保你關閉它們。如果您爲每個請求打開一個連接但不關閉它,那麼很容易找到並修復。或者當你遇到錯誤時你可能不會關閉你的連接 - 檢查你的異常處理代碼。

使用DB連接時推薦的方法是使用一個try finally做出最大的努力,在關閉數據庫連接:

Connection con; 
try { 
    con = ...; // open connection 
    // do work 
catch (SQLException e) { 
    // do whatever 
} finally { 
    if (con != null && !con.isClosed()) { 
     try { 
      con.close(); 
     catch (SQLException e) { 
      // Don't throw from here or you'll lose any return/exception from above 
      log.error("Failed to close connection", e); 
     } 
    } 
} 
+0

恕我直言,如果是這樣的話,我會期待一個錯誤500,而不是一個據報道。事實上,不需要數據庫連接的Servlet應該仍然​​可以工作。 – SJuan76

+0

事實上,不需要數據庫的Servlets工作正常...... –

+0

然後尋找波希米亞的解決方案(但我仍然認爲這是一條相當具有誤導性的消息......) – SJuan76

相關問題