【问题标题】:glassfish JDBC connection poolglassfish JDBC 连接池
【发布时间】:2011-03-22 15:19:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: java jdbc glassfish-3


    【解决方案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 在将其发送给应用程序之前检查连接是否正常工作。一旦它意识到连接已关闭,它将用新连接替换它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-13
          • 2010-12-27
          • 1970-01-01
          • 2014-08-15
          • 2015-11-16
          • 2018-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多