java - Ubuntu 上的 Glassfish JDBC 连接池问题

标签 java ubuntu jdbc glassfish connection-pooling

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

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

 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();
            }
        }

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

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

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

我应该怎样做才能避免异常?

最佳答案

当前的finally block 的问题是:

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

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

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

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

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

对于关闭资源的顺序,请始终先关闭您稍后创建的资源。

关于java - Ubuntu 上的 Glassfish JDBC 连接池问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156035/

相关文章:

java - Android Studio LibGDX 中更新方法的问题

c++ - 如何编译和链接 cddlib 库?

java - JDBC替换: SQLNonTransientConnectionException

java - 为什么 Booleanexecute(String SQL) 总是 true,即使我的输入不在我的数据库中

MySql - 当 URL 中提供密码时,MySql 服务器认为没有密码

java - 将 LinkedBlockingQueue<> 中的数据放入非对象类型的数组

java - do...while 循环出现问题

java - Apache Axis : How to add complex parameter

ubuntu - 在 Ubuntu 上构建 vscode 时找不到包 'xkbfile'

PHAR 和 ZLIB 的 PHP 问题