Bug 136141 Prepared statements not properly cleaned up.
After designing a JDBC query in a report design, I opened the DataSetEditor and choose "Preview Results". There are a number of warnings that came up in the Console indicating there are prepared statements not properly managed or cleaned up. Apr 11, 2006 8:23:04 AM org.eclipse.birt.data.engine.executor.DataSource close WARNING: 1 statements still active. Apr 11, 2006 8:23:05 AM org.eclipse.birt.data.engine.executor.DataSource closeStatement WARNING: statement not found Tracing down the problem a little further, the root cause of the problem is because the DataSourceQuery (in data.engine.executor) is trying to close a dangling reference of a PreparedStatement. The PreparedStatement has been previously dropped from the statementMap of the DataSource when the DataSource.close() was called. But DataSourceQuery is still holding on to a reference of it. The sequence is as follows: 1) DataSourceQuery prepares a statement. This in turn makes DataSource prepare a statement, and creates a PreparedStatement object, adds it to the statementMap. 2) During DataEngineImpl.defineDataSource(), the existing DataSource is closed, replaced by the supplied DataSourceDesign. The DataSource still have statements in its map. And a warning is logged indicating this is a resource leak. It then cleans the statementMap and closes all its open connections. 3) When DataSourceQuery tries to close the dangling statement, it cannot find it. It logs a message "Statement not found". Then, it still proceeds to close it.
data/org.eclipse.birt.data/src/org/eclipse/birt/data/engine/odi/IDataSource.java
* application, which is passed through to the underlying physical
	 * data source driver.
	 * <br>Its processing is implementation-dependent on the 
	 * underlying data source. <p>
	 * The application context map being set here gets applied and 
	 * passed through in subsequent calls to open() or newQuery().
	 * <br>An optional method.
	 * @param context	Pass-through application context map; 
	 * 					could be null to override any previously 
	 * 					set context.
	 * @throws DataException  if data source error occurs
	 * @since		2.0
	 */
	public void setAppContext( Map context ) throws DataException;
	
    /**
	 * Instantiates a new query instance that represents the 
     * specified a query text in the queryType.
     * <p>
     * A query text could be a native command text supported 
     * by the associated data source, 
     * such as a SQL select statement. <br>
     * Such direct query text specification could have
     * embedded parameters.  
     * @param queryType	The type of query supported by the
     * 					data source driver. 
     * @param queryText	The query text to be prepared
     * 					and executed by the data source driver.
     * @return			A new query instance.
     * @throws DataException	if specified query definition has error(s).