remm        02/03/30 01:36:30

  Modified:    jasper2/src/share/org/apache/jasper JspEngineContext.java
               jasper2/src/share/org/apache/jasper/compiler Compiler.java
                        JspCompiler.java
               jasper2/src/share/org/apache/jasper/servlet JspServlet.java
  Log:
  - Add some (experimental) runtime optimizations.
  - Avoid uneeded file access, as well as try to reuse some objects between
    requests.
  - Remove the debug logs which were in the critical path.
  
  Revision  Changes    Path
  1.2       +9 -3      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspEngineContext.java
  
  Index: JspEngineContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspEngineContext.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JspEngineContext.java     28 Mar 2002 18:46:15 -0000      1.1
  +++ JspEngineContext.java     30 Mar 2002 09:36:29 -0000      1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspEngineContext.java,v
 1.1 2002/03/28 18:46:15 kinman Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/03/28 18:46:15 $
  + * $Header: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspEngineContext.java,v
 1.2 2002/03/30 09:36:29 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/03/30 09:36:29 $
    *
    * ====================================================================
    * 
  @@ -98,6 +98,7 @@
       ServletWriter writer;
       ServletContext context;
       URLClassLoader loader;
  +    Compiler jspCompiler;
       String classpath; // for compiling JSPs.
       boolean isErrPage;
       String jspFile;
  @@ -305,6 +306,10 @@
        * SunJavaCompiler is used.
        */
       public Compiler createCompiler() throws JasperException {
  +
  +        if (jspCompiler != null)
  +            return jspCompiler;
  +
        String compilerPath = options.getJspCompilerPath();
        Class jspCompilerPlugin = options.getJspCompilerPlugin();
           JavaCompiler javac;
  @@ -325,10 +330,11 @@
           if (compilerPath != null)
               javac.setCompilerPath(compilerPath);
   
  -        Compiler jspCompiler = new JspCompiler(this);
  +        jspCompiler = new JspCompiler(this);
        jspCompiler.setJavaCompiler(javac);
            
           return jspCompiler;
  +
       }
       
       /** 
  
  
  
  1.2       +3 -6      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Compiler.java     28 Mar 2002 18:46:15 -0000      1.1
  +++ Compiler.java     30 Mar 2002 09:36:30 -0000      1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
 1.1 2002/03/28 18:46:15 kinman Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/03/28 18:46:15 $
  + * $Header: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
 1.2 2002/03/30 09:36:30 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/03/30 09:36:30 $
    *
    * ====================================================================
    * 
  @@ -110,9 +110,6 @@
   
           String className = mangler.getClassName();
           ctxt.setServletClassName(className);
  -        Constants.message("jsp.message.class_name_is",
  -                          new Object[] { className },
  -                          Logger.DEBUG);
   
        if (!isOutDated())
               return false;
  
  
  
  1.2       +10 -0     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspCompiler.java
  
  Index: JspCompiler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspCompiler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JspCompiler.java  28 Mar 2002 18:46:15 -0000      1.1
  +++ JspCompiler.java  30 Mar 2002 09:36:30 -0000      1.2
  @@ -88,6 +88,8 @@
       //    ClassFileData cfd;
       boolean outDated;
   
  +    long lastChecked = -1;
  +
       Logger.Helper loghelper = new Logger.Helper("JASPER_LOG", "JspCompiler");
       
       public JspCompiler(JspCompilationContext ctxt) throws JasperException {
  @@ -173,6 +175,13 @@
        * from whence it came
        */
       public boolean isOutDated() {
  +
  +        long time = System.currentTimeMillis();
  +        if (time < lastChecked)
  +            return false;
  +
  +        lastChecked = time + 2000;
  +
           long jspRealLastModified = 0;
   
           try {
  @@ -193,6 +202,7 @@
           }
   
           return outDated;
  +
       }
   }
   
  
  
  
  1.2       +55 -32    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServlet.java
  
  Index: JspServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JspServlet.java   28 Mar 2002 18:46:20 -0000      1.1
  +++ JspServlet.java   30 Mar 2002 09:36:30 -0000      1.2
  @@ -112,6 +112,7 @@
    *
    * @author Anil K. Vijendran
    * @author Harish Prabandham
  + * @author Remy Maucherat
    */
   public class JspServlet extends HttpServlet {
   
  @@ -124,13 +125,36 @@
        // ServletWrapper will set this 
        Class servletClass;
        URLClassLoader loader = null;
  +        JspCompilationContext ctxt = null;
  +        String outDir = null;
        
        JspServletWrapper(String jspUri, boolean isErrorPage) {
            this.jspUri = jspUri;
            this.isErrorPage = isErrorPage;
            this.theServlet = null;
  +            createOutdir();
        }
        
  +        private void createOutdir() {
  +            File outDir = null;
  +            try {
  +                URL outURL = options.getScratchDir().toURL();
  +                String outURI = outURL.toString();
  +                if( outURI.endsWith("/") )
  +                    outURI = outURI + jspUri.substring(1,jspUri.lastIndexOf("/")+1);
  +                else
  +                    outURI = outURI + 
jspUri.substring(0,jspUri.lastIndexOf("/")+1);;
  +                outURL = new URL(outURI);
  +                outDir = new File(outURL.getFile());
  +                if( !outDir.exists() ) {
  +                    outDir.mkdirs();
  +                }
  +                this.outDir = outDir.toString() + File.separator;
  +            } catch(Exception e) {
  +                throw new IllegalStateException("No output directory: " + 
e.getMessage());
  +            }
  +        }
  +
        private void load() throws JasperException, ServletException {
            try {
                // This is to maintain the original protocol.
  @@ -167,14 +191,7 @@
               } else 
                   accordingto = "according to the Servlet Engine";
               
  -            Constants.message("jsp.message.cp_is", 
  -                              new Object[] { 
  -                                  accordingto,
  -                                  cp == null ? "" : cp
  -                              }, 
  -                              Logger.INFORMATION);
  -
  -            if (loadJSP(jspUri, cp, isErrorPage, req, res) 
  +            if (loadJSP(this, jspUri, cp, isErrorPage, req, res) 
                       || theServlet == null) {
                   load();
               }
  @@ -371,6 +388,12 @@
                                Throwable exception, boolean precompile) 
        throws ServletException, IOException
       {
  +
  +     // First check if the requested JSP page exists, to avoid creating
  +     // unnecessary directories and files.
  +     if (context.getResourceAsStream(jspUri) == null)
  +         throw new FileNotFoundException(jspUri);
  +
        boolean isErrorPage = exception != null;
        
        JspServletWrapper wrapper = (JspServletWrapper) jsps.get(jspUri);
  @@ -514,36 +537,36 @@
        boolean isErrorPage, HttpServletRequest req, HttpServletResponse res) 
        throws JasperException, FileNotFoundException 
       {
  -     // First check if the requested JSP page exists, to avoid creating
  -     // unnecessary directories and files.
  -     if (context.getResourceAsStream(jspUri) == null)
  -         throw new FileNotFoundException(jspUri);
   
        JspServletWrapper jsw=(JspServletWrapper) jsps.get(jspUri);
        if( jsw==null ) {
            throw new JasperException("Can't happen - JspServletWrapper=null");
        }
  -        File outDir = null;
  -        try {
  -            URL outURL = options.getScratchDir().toURL();
  -            String outURI = outURL.toString();
  -            if( outURI.endsWith("/") )
  -                outURI = outURI + jspUri.substring(1,jspUri.lastIndexOf("/")+1);
  -            else
  -                outURI = outURI + jspUri.substring(0,jspUri.lastIndexOf("/")+1);;
  -            outURL = new URL(outURI);
  -            outDir = new File(outURL.getFile());
  -            if( !outDir.exists() ) {
  -                outDir.mkdirs();
  -            }
  -        } catch(Exception e) {
  -            throw new JasperException("No output directory: " + e.getMessage());
  -        }
  +        return loadJSP(jsw, jspUri, classpath, isErrorPage, req, res);
  +        
  +    }
  +
  +
  +    /*  Check if we need to reload a JSP page.
  +     *
  +     *  Side-effect: re-compile the JSP page.
  +     *
  +     *  @param classpath explicitly set the JSP compilation path.
  +     *  @return true if JSP files is newer
  +     */
  +    boolean loadJSP(JspServletWrapper jsw, String jspUri, String classpath, 
  +     boolean isErrorPage, HttpServletRequest req, HttpServletResponse res) 
  +     throws JasperException, FileNotFoundException 
  +    {
  +
        boolean firstTime = jsw.servletClass == null;
  -        JspCompilationContext ctxt = new JspEngineContext(parentClassLoader, 
classpath,
  -                                                     context, jspUri, 
outDir.toString() + File.separator,
  -                                                     isErrorPage, options,
  -                                                     req, res);
  +        if (jsw.ctxt == null) {
  +            jsw.ctxt = new JspEngineContext
  +                (parentClassLoader, classpath, context, jspUri, 
  +                 jsw.outDir, isErrorPage, options,
  +                 req, res);
  +        }
  +        JspCompilationContext ctxt = jsw.ctxt;
        boolean outDated = false; 
   
           Compiler compiler = ctxt.createCompiler();
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to