costin 01/05/27 22:07:37 Modified: jasper34/runtime/org/apache/jasper34/runtime JspRuntimeLibrary.java Log: Quick optimization for jsp:get/setProperty. Method lookup result is cached, as it is the most expensive part of method invocation. This can be quite easily put back into 3.3 - but I don't think it's a good idea: we'll have more tunnings and it'll save time to keep 33 stable and just replace the whole thing when it has had enough testing. Revision Changes Path 1.2 +37 -6 jakarta-tomcat-jasper/jasper34/runtime/org/apache/jasper34/runtime/JspRuntimeLibrary.java Index: JspRuntimeLibrary.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper34/runtime/org/apache/jasper34/runtime/JspRuntimeLibrary.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- JspRuntimeLibrary.java 2001/05/27 23:09:20 1.1 +++ JspRuntimeLibrary.java 2001/05/28 05:07:37 1.2 @@ -60,6 +60,7 @@ import java.io.IOException; import java.util.Enumeration; +import java.util.Hashtable; import java.lang.reflect.Method; @@ -216,6 +217,7 @@ //------------------------------------------------------------------- // functions to convert builtin Java data types to string. //------------------------------------------------------------------- + // Used by GetProperty // __begin toStringMethod public static String toString(Object o) { return (o == null) ? "" : o.toString(); @@ -540,11 +542,26 @@ throw new JasperException(ex); } } + + public static Hashtable readMethodCache=new Hashtable(); + public static Hashtable writeMethodCache=new Hashtable(); - public static java.lang.reflect.Method getWriteMethod(Class beanClass, String prop) - throws JasperException { + + public static java.lang.reflect.Method getWriteMethod(Class beanClass, + String prop) + throws JasperException + { java.lang.reflect.Method method = null; Class type = null; + + Hashtable methods=(Hashtable)writeMethodCache.get( beanClass ); + if( methods==null ) { + methods=new Hashtable(); + writeMethodCache.put( beanClass, methods ); + } + method=(java.lang.reflect.Method)methods.get( prop ); + if( method != null ) return method; + try { java.beans.BeanInfo info = java.beans.Introspector.getBeanInfo(beanClass); @@ -578,14 +595,27 @@ new Object[] {prop, beanClass.getName()})); } } + + methods.put( prop, method ); return method; } - public static java.lang.reflect.Method getReadMethod(Class beanClass, String prop) - throws JasperException { - java.lang.reflect.Method method = null; + public static java.lang.reflect.Method getReadMethod(Class beanClass, + String prop) + throws JasperException + { + java.lang.reflect.Method method = null; Class type = null; - try { + + Hashtable methods=(Hashtable)readMethodCache.get( beanClass ); + if( methods==null ) { + methods=new Hashtable(); + readMethodCache.put( beanClass, methods ); + } + method=(java.lang.reflect.Method)methods.get( prop ); + if( method != null ) return method; + + try { java.beans.BeanInfo info = java.beans.Introspector.getBeanInfo(beanClass); if ( info != null ) { @@ -619,6 +649,7 @@ } } + methods.put( prop, method ); return method; }