Bug 123840 Incorrect use of static fields in NEvaluator and FilterPassController
Data Engine classes org.eclipse.birt.data.engine.script.NEvaluator and FilterPassController (used for top-n and bottom-n filter process) use static class fields to store proessing data. This is not multi-thread safe. If there are concurrent requests running in the same JVM (even if they use different instances of DataEngine), data corruption will occur since multiple requests may get/set the static fields at the same time. These classes should keep all per-request data in instance fields. Each report query need to have its own instance.
data/org.eclipse.birt.data/src/org/eclipse/birt/data/engine/script/NEvaluator.java
if( N == -1)
		{
			try{
				if( calculatePercent )
				{
					double temp = Double.valueOf( n.toString() ).doubleValue()/100;
					if( temp > 1 || temp < 0)
						throw new DataException(ResourceConstants.INVALID_TOP_BOTTOM_PERCENT_ARGUMENT);
					
					N = (int)Math.round( temp*getRowCount() );
				}else				
					N = Double.valueOf( n.toString() ).intValue();
			}catch (NumberFormatException e)
			{
				
			}
			
			
			if( N < 0 )
				throw new DataException(ResourceConstants.INVALID_TOP_BOTTOM_N_ARGUMENT);
			
			
		}
		if ( getPassLevel( ) == FIRST_PASS )
		{
			return doFirstPass( value );
		}
		else if ( getPassLevel( ) == SECOND_PASS )
		{
			return doSecondPass( );