Sql server 2008 当建筑中发生错误时,birt上的数据库连接未关闭

Sql server 2008 当建筑中发生错误时,birt上的数据库连接未关闭,sql-server-2008,tomcat,oracle10g,birt,Sql Server 2008,Tomcat,Oracle10g,Birt,我使用的是BIRT4.1 生成报表时出现问题时,与数据库的连接不会关闭 数据库中打开了太多连接,这会导致性能问题 这是我用来处理它的代码。但它不起作用: IRunAndRenderTask task; task.setRenderOption(renderOption); try { task.getAppContext().put("OdaJDBCDriverPassInConnectionCloseAfterUse", true); task.

我使用的是BIRT4.1

生成报表时出现问题时,与数据库的连接不会关闭

数据库中打开了太多连接,这会导致性能问题

这是我用来处理它的代码。但它不起作用:

IRunAndRenderTask task;
task.setRenderOption(renderOption);
try {
            task.getAppContext().put("OdaJDBCDriverPassInConnectionCloseAfterUse", true);
            task.setErrorHandlingOption(task.CANCEL_ON_ERROR);

            task.run();
        } catch (Exception ex) {
            logger.error(ex.getMessage(), ex);          
        }
        if (task.getErrors() != null && task.getErrors().size() > 0) {
            logger.error(task.getErrors().toString());              
            //task.cancel();
            task.close();
            task=null;          
            throw new Exception("Somes errors append during birt report gerenation");
        }

您是否考虑过将task.close代码移动到catch块中?异常是否在catch块中打印?也许您还应该尝试将调试语句添加到if task.getErrors条件中,以查看它是否正在执行。可能task.getErrors返回null,从而导致未调用close。我同意大卫的观点。您应该在try-catch块内的if语句之间有整个代码块。我将断点放入该块,并且正确执行close、cancel语句。在BIRT中,当生成过程中发生异常时,不会引发异常,但错误在task.geterrors中