Bug 314645 XML Datasource is not Thread-Safe when passing data as InputStream
Build Identifier: Eclipse Build id: 20090920-1017 / BIRT Runtime 2.5.1 + 2.5.2 When passing XML-data to the IRunTask in a multi-threaded application, some of the resulting .rptdocument files will be corrupted. The error only occures when passing an InputStream using the setAppContext method: ctxMap.put("org.eclipse.birt.report.data.oda.xml.inputStream", new FileInputStream("data.xml")); ctxMap.put("org.eclipse.birt.report.data.oda.xml.closeInputStream", new Boolean(true)); task.setAppContext(ctxMap); This warning will be written to the log: "WARNUNG: Exceptions occur during xml parsing" (see attachments for stackstrace) Reproducible: Sometimes Steps to Reproduce: 1. Run the sample application in the attachments (use the -Xmx1024m VM-Argument to avoid our of memory errors 2. Wait till the log shows the this warning: WARNUNG: Exceptions occur during xml parsing 3. Kill the sample application process 4. Analyze the generated rptdocument files (sort by ascending file size to find corrupted files)
data/org.eclipse.birt.data/src/org/eclipse/birt/data/engine/odaconsumer/DriverManager.java
/**
	 * Returns the <code>IDriver</code> based on driverName.
	 * @param dataSourceElementId	the name of the driver.
	 * @return	an <code>IDriver</code> instance.
	 */
	public IDriver getDriverHelper( String dataSourceElementId )
		throws DataException
	{
		final String methodName = "getDriverHelper"; 
		getLogger().entering( sm_className, methodName, dataSourceElementId );
		Driver driver = getDriver( dataSourceElementId );
		IDriver ret = driver.getDriverHelper();
		
		getLogger().exiting( sm_className, methodName, ret );
		return ret;
	}
	/**
	 * Returns the id of the type of ODA data source for use as an argument to 
	 * <code>IDriver.getConnection</code>.
	 * @param dataSourceElementId	the id of the data source element defined
	 * 								in a data source extension.
	 * @return	the extension data source type id for <code>IDriver.getConnection</code>, 
	 * 			or null if no explicit data source type was specified.
	 */
	public String getExtensionDataSourceId( String dataSourceElementId ) 
		throws DataException
	{
		final String methodName = "getExtensionDataSourceId"; 
		getLogger().entering( sm_className, methodName, dataSourceElementId );
		Driver driver = getDriver( dataSourceElementId );