Bug 157453 connections not released running report with parameters
Running a report with dynamic parameters (combo filled with db query) there are a lot connections that aren't released after execution. These connections are used to fill combo box with data from db. This causes reaching max connection limit on db (Oracle 9) I see that in class BirtViewerReportService there are some methods that create a task of type IGetParameterDefinitionTask but they never close it. I.e. public Collection getParameterSelectionList( IViewerReportDesignHandle design, InputOptions runOptions, String paramName ) throws ReportServiceException { /**** TASK CREATION ****/ IGetParameterDefinitionTask task = getParameterDefinitionTask( design, runOptions ); ViewerAttributeBean bean = getViewerAttrBean( runOptions ); if ( bean != null ) task.setParameterValues( bean.getParameters( ) ); /**** TASK EXECUTION ****/ /**** EXTRACT COMBO DATA ****/ Collection selectionList = task.getSelectionList( paramName ); /**** CONNECTION LOST TASK NEVER CLOSED ****/ return convertEngineParameterSelectionChoice( selectionList ); } I don't know if closing these tasks is the right thing. I try to close the task inside the task itself in method public Collection getSelectionList( String name ) ... if ( DesignChoiceConstants.PARAM_VALUE_TYPE_DYNAMIC .equals( selectionType ) ) { try { if (parameter.getDataSetName() != null) { return getChoicesFromParameterQuery(parameter); } else if (isCascadingParameter(parameter)) { Object[] parameterValuesAhead = getParameterValuesAhead(parameter); return getChoicesFromParameterGroup(parameter, parameterValuesAhead); } } finally { close(); } } ... and it's working for my reports (without any loose of connections and any performance decrease) Thanks! PS: note that with reports without parameters there are no problems
viewer/org.eclipse.birt.report.viewer/birt/WEB-INF/classes/org/eclipse/birt/report/service/BirtViewerReportService.java
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.ICascadingParameterGroup;
import org.eclipse.birt.report.engine.api.IGetParameterDefinitionTask;
import org.eclipse.birt.report.engine.api.IParameterGroupDefn;
import org.eclipse.birt.report.engine.api.IParameterSelectionChoice;
import org.eclipse.birt.report.engine.api.IReportDocument;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IScalarParameterDefn;
import org.eclipse.birt.report.engine.api.ITOCTree;
import org.eclipse.birt.report.engine.api.ReportParameterConverter;
import org.eclipse.birt.report.engine.api.TOCNode;
import org.eclipse.birt.report.model.api.ScalarParameterHandle;
import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants;
import org.eclipse.birt.report.resource.BirtResources;
import org.eclipse.birt.report.resource.ResourceConstants;
import org.eclipse.birt.report.service.api.ExportedColumn;
import org.eclipse.birt.report.service.api.ExportedResultSet;
import org.eclipse.birt.report.service.api.IViewerReportDesignHandle;
import org.eclipse.birt.report.service.api.IViewerReportService;
import org.eclipse.birt.report.service.api.InputOptions;
import org.eclipse.birt.report.service.api.OutputOptions;
import org.eclipse.birt.report.service.api.ParameterDefinition;
import org.eclipse.birt.report.service.api.ParameterGroupDefinition;
import org.eclipse.birt.report.service.api.ParameterSelectionChoice;
import org.eclipse.birt.report.service.api.ReportServiceException;
import org.eclipse.birt.report.service.api.ToC;
import org.eclipse.birt.report.soapengine.api.Column;
import org.eclipse.birt.report.soapengine.api.ResultSet;
import com.ibm.icu.util.ULocale;
public class BirtViewerReportService implements IViewerReportService