Ubuntu上的Glassfish JDBC连接池问题

时间:2015-08-22 12:19:47

标签: java ubuntu jdbc glassfish connection-pooling

在Glassfish4和Ubuntu 14.04上部署后我遇到的服务器问题。在java中,由于某些原因我没有使用hibernate。我手动获取结果集作为查询的结果,将结果集发送到JSP页面并迭代它。

问题是,我已将finally块设置如下:

 finally {
            try {

                if (conn != null) {
                    conn.close();
                }
                if (ctx != null) {
                    ctx.close();
                }
                if (cstatement != null) {
                    cstatement.closeOnCompletion();
                }

            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            } catch (NamingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

因为我通过会话将Resultset发送到JSP页面,所以我在JSP页面上关闭结果如下:

if(resultset!= null)resultset.close();

现在问题是,几分钟后我的应用程序开始提供异常,即已使用最大连接池。

我应该怎么做以避免异常?

1 个答案:

答案 0 :(得分:1)

当前finally块的问题是:

如果从其中一个close命令抛出任何异常,则不会运行以下命令。由于问题似乎是资源泄漏所以可能是原因。

如果您在JDK7 +下运行且资源可自动关闭,请尝试使用

try(Connection conn=DriverManager.getConnection();
  Statement stat=conn.createStatement){
}

然后安全地关闭资源,退出try block。

如果你需要从finally块中关闭资源,请尝试为每个close语句包装一个try catch。

对于关闭资源的排序,请务必先关闭您之后创建的资源。