Ubuntu上的Glassfish JDBC连接池问题

用户名

在Glassfish4和Ubuntu 14.04上部署后,我面临的一个严重问题。在Java中,由于某些原因,我没有使用休眠模式。我将作为查询的结果手动获取结果集,将结果集发送到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();
            }
        }

并且由于我是通过会话将结果集发送到JSP页面的,因此我将关闭JSP页面上的结果,如下所示:

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

现在的问题是,几分钟后,我的应用程序开始出现例外,显示已使用了最多的连接池。

我应该怎么做才能避免出现异常情况?

水疤

您当前的finally块的问题是:

如果关闭命令之一引发任何异常,则以下命令将不会运行。由于问题似乎是资源泄漏,因此可能是原因。

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

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

然后,资源将被关闭,并安全退出try块。

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

要订购关闭资源,请始终先关闭稍后创建的资源。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章