kinman      2003/01/30 19:34:45

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
               jasper2/src/share/org/apache/jasper/runtime
                        TagHandlerPool.java
  Log:
  - Fixed 16572, caused by recent change in tag pooling.  Make sure that
    tag pooling works for custom tags used in tag files also.
  
  Revision  Changes    Path
  1.158     +47 -26    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.157
  retrieving revision 1.158
  diff -u -r1.157 -r1.158
  --- Generator.java    30 Jan 2003 20:30:51 -0000      1.157
  +++ Generator.java    31 Jan 2003 03:34:44 -0000      1.158
  @@ -318,12 +318,41 @@
       }
   
       /**
  +     * Generates the _jspInit() method for instantiating the tag handler pools.
  +     * For tag file, _jspInit has to be invoked manually, and the ServletConfig
  +     * object explicitly passed.
  +     */
  +    private void generateInit() {
  +
  +        if (ctxt.isTagFile()) {
  +            out.printil("private void _jspInit(ServletConfig config) {");
  +     }
  +     else {
  +            out.printil("public void _jspInit() {");
  +     }
  +
  +        out.pushIndent();
  +        for (int i=0; i<tagHandlerPoolNames.size(); i++) {
  +            out.printin((String) tagHandlerPoolNames.elementAt(i));
  +            out.print(" = 
org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(");
  +            if (ctxt.isTagFile()) {
  +                out.print("config");
  +            }
  +            else {
  +                out.print("getServletConfig()");
  +            }
  +            out.println(");");
  +        }
  +        out.popIndent();
  +        out.printil("}");
  +        out.println();
  +    }
  +
  +    /**
        * Generates the _jspDestroy() method which is responsible for calling the
        * release() method on every tag handler in any of the tag handler pools.
        */
       private void generateDestroy() {
  -     if (tagHandlerPoolNames.size() <= 0)
  -         return;
   
        out.printil("public void _jspDestroy() {");
        out.pushIndent();
  @@ -415,12 +444,6 @@
            }
               out.println();
        }
  - 
  -     // Constructor
  -     if (ctxt.getOptions().isPoolingEnabled()
  -             && !tagHandlerPoolNames.isEmpty()) {
  -         generateConstructor(className);
  -     }
       }
   
       /**
  @@ -440,6 +463,7 @@
   
        if (ctxt.getOptions().isPoolingEnabled()
                && !tagHandlerPoolNames.isEmpty()) {
  +         generateInit();
            generateDestroy();
        }
       }
  @@ -484,6 +508,9 @@
        // Class variable declarations
           genPreambleClassVariableDeclarations( servletClassName );
    
  +     // Constructor
  +//   generateConstructor(className);
  + 
        // Methods here
           genPreambleMethods();
    
  @@ -663,19 +690,6 @@
        out.printil("public " + className + "() {");
        out.printil("}");
        out.println();
  -
  -        out.printil("public void _jspInit() {");
  -        out.pushIndent();
  -        for (int i=0; i<tagHandlerPoolNames.size(); i++) {
  -            out.printin((String) tagHandlerPoolNames.elementAt(i));
  -            out.print(" = 
org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(");
  -            out.print("this");
  -            out.println(");");
  -        }
  -        out.popIndent();
  -        out.printil("}");
  -        out.println();
  -
       }
   
       /**
  @@ -2971,7 +2985,7 @@
                                               gen.fragmentHelperClass,
                                               gen.ctxt.getClassLoader(),
                                               tagInfo));
  -         gen.generateTagHandlerPostamble(  tagInfo );
  +         gen.generateTagHandlerPostamble(tagInfo);
        } else {
            gen.generatePreamble(page);
            gen.generateXmlDeclaration(page);
  @@ -3078,8 +3092,11 @@
               "pageContext.getServletContext();" );
        out.printil("javax.servlet.ServletConfig config = " +
               "pageContext.getServletConfig();");
  -        
        out.printil("javax.servlet.jsp.JspWriter out = jspContext.getOut();");
  +     if (ctxt.getOptions().isPoolingEnabled()
  +                && !tagHandlerPoolNames.isEmpty()) {
  +         out.printil("_jspInit(config);");
  +     }
        generatePageScopedVariables(tagInfo);
           
                // Number of tag object that need to be popped
  @@ -3111,6 +3128,10 @@
           out.printil( "} finally {" );
           out.pushIndent();
        out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).syncEndTagFile();");
  +     if (ctxt.getOptions().isPoolingEnabled()
  +                && !tagHandlerPoolNames.isEmpty()) {
  +         out.printil("_jspDestroy();");
  +     }
           out.popIndent();
           out.printil( "}" );
   
  
  
  
  1.7       +14 -15    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/TagHandlerPool.java
  
  Index: TagHandlerPool.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/TagHandlerPool.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TagHandlerPool.java       22 Jan 2003 20:43:06 -0000      1.6
  +++ TagHandlerPool.java       31 Jan 2003 03:34:45 -0000      1.7
  @@ -63,7 +63,7 @@
   
   import javax.servlet.jsp.JspException;
   import javax.servlet.jsp.tagext.Tag;
  -import javax.servlet.Servlet;
  +import javax.servlet.ServletConfig;
   import org.apache.jasper.Constants;
   
   /**
  @@ -81,10 +81,10 @@
       // index of next available tag handler
       private int current;
   
  -    public static TagHandlerPool getTagHandlerPool( Servlet jspServlet) {
  +    public static TagHandlerPool getTagHandlerPool( ServletConfig config) {
           TagHandlerPool result=null;
   
  -        String tpClassName=getOption( jspServlet, OPTION_TAGPOOL, null);
  +        String tpClassName=getOption( config, OPTION_TAGPOOL, null);
           if( tpClassName != null ) {
               try {
                   Class c=Class.forName( tpClassName );
  @@ -95,14 +95,14 @@
               }
           }
           if( result==null ) result=new TagHandlerPool();
  -        result.init(jspServlet);
  +        result.init(config);
   
           return result;
       }
   
  -    protected void init( Servlet servlet ) {
  +    protected void init( ServletConfig config ) {
           int maxSize=-1;
  -        String maxSizeS=getOption(servlet, OPTION_MAXSIZE, null);
  +        String maxSizeS=getOption(config, OPTION_MAXSIZE, null);
           if( maxSizeS != null ) {
               try {
                   maxSize=Integer.parseInt(maxSizeS);
  @@ -192,15 +192,14 @@
        }
       }
   
  -    protected static String getOption( Servlet servlet, String name, String 
defaultV) {
  -        if( servlet==null ) return defaultV;
  -        if( servlet.getServletConfig() == null ) return defaultV;
  +    protected static String getOption( ServletConfig config, String name, String 
defaultV) {
  +        if( config == null ) return defaultV;
   
  -        String value=servlet.getServletConfig().getInitParameter(name);
  +        String value=config.getInitParameter(name);
           if( value != null ) return value;
  -        if( servlet.getServletConfig().getServletContext() ==null )
  +        if( config.getServletContext() ==null )
               return defaultV;
  -        value=servlet.getServletConfig().getServletContext().getInitParameter(name);
  +        value=config.getServletContext().getInitParameter(name);
           if( value!=null ) return value;
           return defaultV;
       }
  
  
  

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

Reply via email to