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
break;
			case IConditionalExpression.OP_LIKE :
				result = like( resultObject, resultOp1 );
				break;
			case IConditionalExpression.OP_TOP_N :
				result = isTopN( resultObject, resultOp1 );
				break;
			case IConditionalExpression.OP_BOTTOM_N :
				result = isBottomN( resultObject, resultOp1 );
				break;
			case IConditionalExpression.OP_TOP_PERCENT :
				result = isTopPercent( resultObject, resultOp1 );
				break;
			case IConditionalExpression.OP_BOTTOM_PERCENT :
				result = isBottomPercent( resultObject, resultOp1 );
				break;
			case IConditionalExpression.OP_ANY :
				throw new DataException(
						ResourceConstants.UNSUPPORTTED_COND_OPERATOR, "ANY" );
			case IConditionalExpression.OP_MATCH :
				result = match( resultObject, resultOp1 );
				break;
			default :
				throw new DataException(
						ResourceConstants.UNSUPPORTTED_COND_OPERATOR, new Integer(operator) );
		}
		
		logger.exiting( ScriptEvalUtil.class.getName( ),
				"evalConditionalExpr",
				new Boolean( result ) );