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/ScriptEvalUtil.java
{
				try
				{
					obArray[0] = DataTypeUtil.toBoolean( obj );
					expr4Exception = op1.exprText;
					obArray[1] = DataTypeUtil.toBoolean( obArray[1] );
				}
				catch ( BirtException e )
				{ 
					throw new DataException( ResourceConstants.CONVERT_TO_DATATYPE_ERROR,
							new Object[]{
									expr4Exception, Boolean.class
							} );
				}
			}
			
			return obArray;
		}
		
		/**
		 * @param ise
		 * @return
		 */
		private static IScriptExpression constructValidScriptExpression ( IScriptExpression ise)
		{
		    return ise!=null && ise.getText().trim().length() > 0 ? ise : new ScriptExpression("null");
		}		
	}
}