Author: markt Date: Fri Nov 12 18:29:12 2010 New Revision: 1034500 URL: http://svn.apache.org/viewvc?rev=1034500&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50192 Improve performance for EL when running under a security manager. Based on a patch by Robert Goff.
Modified: tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java?rev=1034500&r1=1034499&r2=1034500&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java (original) +++ tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java Fri Nov 12 18:29:12 2010 @@ -26,8 +26,6 @@ import javax.el.FunctionMapper; import javax.el.ValueExpression; import javax.el.VariableMapper; -import org.apache.jasper.Constants; - /** * Implementation of ELContext * @@ -66,22 +64,12 @@ public final class ELContextImpl extends private final ELResolver resolver; - private FunctionMapper functionMapper; + private FunctionMapper functionMapper = NullFunctionMapper; private VariableMapper variableMapper; public ELContextImpl() { this(ELResolverImpl.getDefaultResolver()); - if (Constants.IS_SECURITY_ENABLED) { - functionMapper = new FunctionMapper() { - @Override - public Method resolveFunction(String prefix, String localName) { - return null; - } - }; - } else { - functionMapper = NullFunctionMapper; - } } public ELContextImpl(ELResolver resolver) { Modified: tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java?rev=1034500&r1=1034499&r2=1034500&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java (original) +++ tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java Fri Nov 12 18:29:12 2010 @@ -35,20 +35,27 @@ import javax.servlet.jsp.el.VariableReso import org.apache.jasper.Constants; public final class ELResolverImpl extends ELResolver { - private final static ELResolver DefaultResolver = new CompositeELResolver(); + private final static ELResolver DefaultResolver; static { - ((CompositeELResolver) DefaultResolver).add(new MapELResolver()); - ((CompositeELResolver) DefaultResolver).add(new ResourceBundleELResolver()); - ((CompositeELResolver) DefaultResolver).add(new ListELResolver()); - ((CompositeELResolver) DefaultResolver).add(new ArrayELResolver()); - ((CompositeELResolver) DefaultResolver).add(new BeanELResolver()); + if (Constants.IS_SECURITY_ENABLED) { + DefaultResolver = null; + } else { + DefaultResolver = new CompositeELResolver(); + ((CompositeELResolver) DefaultResolver).add(new MapELResolver()); + ((CompositeELResolver) DefaultResolver).add(new ResourceBundleELResolver()); + ((CompositeELResolver) DefaultResolver).add(new ListELResolver()); + ((CompositeELResolver) DefaultResolver).add(new ArrayELResolver()); + ((CompositeELResolver) DefaultResolver).add(new BeanELResolver()); + } } private final VariableResolver variableResolver; + private final ELResolver elResolver; public ELResolverImpl(VariableResolver variableResolver) { this.variableResolver = variableResolver; + this.elResolver = getDefaultResolver(); } @Override @@ -71,7 +78,7 @@ public final class ELResolverImpl extend } if (!context.isPropertyResolved()) { - return getDefaultResolver().getValue(context, base, property); + return elResolver.getValue(context, base, property); } return null; } @@ -97,7 +104,7 @@ public final class ELResolverImpl extend } if (!context.isPropertyResolved()) { - return getDefaultResolver().getType(context, base, property); + return elResolver.getType(context, base, property); } return null; } @@ -118,7 +125,7 @@ public final class ELResolverImpl extend } if (!context.isPropertyResolved()) { - getDefaultResolver().setValue(context, base, property, value); + elResolver.setValue(context, base, property, value); } } @@ -134,12 +141,12 @@ public final class ELResolverImpl extend return true; } - return getDefaultResolver().isReadOnly(context, base, property); + return elResolver.isReadOnly(context, base, property); } @Override public Iterator<java.beans.FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) { - return getDefaultResolver().getFeatureDescriptors(context, base); + return elResolver.getFeatureDescriptors(context, base); } @Override @@ -147,7 +154,7 @@ public final class ELResolverImpl extend if (base == null) { return String.class; } - return getDefaultResolver().getCommonPropertyType(context, base); + return elResolver.getCommonPropertyType(context, base); } public static ELResolver getDefaultResolver() { Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1034500&r1=1034499&r2=1034500&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Fri Nov 12 18:29:12 2010 @@ -175,6 +175,10 @@ <add> Add logging and JMX support to JSP unloading. (rjung) </add> + <fix> + <bug>50192</bug>: Improve performance for EL when running under a + security manager. Based on a patch by Robert Goff. (markt) + </fix> </changelog> </subsection> <subsection name="Cluster"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org