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/Driver.java
m_driverConfig = null;
	     
        m_driverConfig = 
	        doGetDriverManifest( m_dataSourceDriverId, true ,
	                			 true  );
	}
	/*
	 * Finds and returns a driver manifest of either the DTP extension point,
	 * or the BIRT one.
	 * This methods takes care of catching all exceptions, and
	 * in turn throws a DataException only. 
	 * The throwsIfNotFound flag, when set to true, throws
	 * a DataException if given driver manifest is not found; 
	 * if the flag is set to false, returns null instead. 
	 */
	private ExtensionManifest doGetDriverManifest( String dataSourceDriverId, 
	        										boolean useDtpExtPoint,
	        										boolean throwsIfNotFound ) 
		throws DataException
	{
	    final String methodName = "doGetDriverManifest"; 
	 
	    ManifestExplorer explorer = ManifestExplorer.getInstance();
	    try
	    {
			if( useDtpExtPoint )
			    return explorer.getExtensionManifest( dataSourceDriverId );
			
			if( throwsIfNotFound )