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;
       }
       
  
  
  

Reply via email to