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( value == null )
				value = "{NULL_VALUE_!@#$%^&}";
			if( valueList[i] == null )
			{
				valueList[i] = value;
				rowIdList[i] = firstPassRowNumberCounter;
				break;
			}else
			{
				Object result = this.doCompare( value, valueList[i] );
				try
				{
					
					if ( DataTypeUtil.toBoolean( result ).booleanValue( ) == true )
					{
						for( int j = N - 1; j > i; j--)
						{
							valueList[j] = valueList[j-1];
							rowIdList[j] = rowIdList[j-1];
						}
						valueList[i] = value;
						rowIdList[i] = firstPassRowNumberCounter;
						break;
					}
				}
				catch ( BirtException e )
				{
					throw DataException.wrap(e);
				}
			}