Modified: tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java?view=diff&rev=542189&r1=542188&r2=542189 ============================================================================== --- tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java Mon May 28 03:35:32 2007 @@ -589,12 +589,7 @@ try { getJspLoader(); - String name; - if (isTagFile()) { - name = tagInfo.getTagClassName(); - } else { - name = getServletPackageName() + "." + getServletClassName(); - } + String name = getFQCN(); servletClass = jspLoader.loadClass(name); } catch (ClassNotFoundException cex) { throw new JasperException(Localizer.getMessage("jsp.error.unable.load"), @@ -605,6 +600,16 @@ } removed = 0; return servletClass; + } + + public String getFQCN() { + String name; + if (isTagFile()) { + name = tagInfo.getTagClassName(); + } else { + name = getServletPackageName() + "." + getServletClassName(); + } + return name; } // ==================== protected methods ====================
Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Generator.java?view=diff&rev=542189&r1=542188&r2=542189 ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/Generator.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/Generator.java Mon May 28 03:35:32 2007 @@ -73,8 +73,8 @@ private static final String VAR_EXPRESSIONFACTORY = System.getProperty("org.apache.jasper.compiler.Generator.VAR_EXPRESSIONFACTORY", "_el_expressionfactory"); - private static final String VAR_ANNOTATIONPROCESSOR = - System.getProperty("org.apache.jasper.compiler.Generator.VAR_ANNOTATIONPROCESSOR", "_jsp_annotationprocessor"); + private static final String VAR_INSTANCEMANAGER = + System.getProperty("org.apache.jasper.compiler.Generator.VAR_INSTANCEMANAGER", "_jsp_instancemanager"); private ServletWriter out; @@ -410,14 +410,14 @@ } out.println(".getServletContext()).getExpressionFactory();"); - out.printin(VAR_ANNOTATIONPROCESSOR); - out.print(" = (org.apache.AnnotationProcessor) "); + out.printin(VAR_INSTANCEMANAGER); + out.print(" = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager("); if (ctxt.isTagFile()) { out.print("config"); } else { out.print("getServletConfig()"); } - out.println(".getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());"); + out.println(");"); out.popIndent(); out.printil("}"); @@ -521,8 +521,8 @@ out.printin("private javax.el.ExpressionFactory "); out.print(VAR_EXPRESSIONFACTORY); out.println(";"); - out.printin("private org.apache.AnnotationProcessor "); - out.print(VAR_ANNOTATIONPROCESSOR); + out.printin("private org.apache.InstanceManager "); + out.print(VAR_INSTANCEMANAGER); out.println(";"); out.println(); } @@ -2142,11 +2142,11 @@ String tagHandlerClassName = JspUtil .getCanonicalName(tagHandlerClass); - out.printin(tagHandlerClassName); - out.print(" "); - out.print(tagHandlerVar); - out.print(" = "); if (isPoolingEnabled && !(n.implementsJspIdConsumer())) { + out.printin(tagHandlerClassName); + out.print(" "); + out.print(tagHandlerVar); + out.print(" = "); out.print("("); out.print(tagHandlerClassName); out.print(") "); @@ -2155,14 +2155,7 @@ out.print(tagHandlerClassName); out.println(".class);"); } else { - out.print("new "); - out.print(tagHandlerClassName); - out.println("();"); - out.printin("org.apache.jasper.runtime.AnnotationHelper.postConstruct("); - out.print(VAR_ANNOTATIONPROCESSOR); - out.print(", "); - out.print(tagHandlerVar); - out.println(");"); + writeNewInstance(tagHandlerVar, tagHandlerClassName); } // includes setting the context @@ -2220,8 +2213,7 @@ out.println("[0]++;"); } out.printin(tagHandlerVar); - out - .println(".setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);"); + out.println(".setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);"); out.printin(tagHandlerVar); out.println(".doInitBody();"); @@ -2247,6 +2239,40 @@ n.setEndJavaLine(out.getJavaLine()); } + private void writeNewInstance(String tagHandlerVar, String tagHandlerClassName) { + if (Constants.USE_INSTANCE_MANAGER_FOR_TAGS) { + out.printin(tagHandlerClassName); + out.print(" "); + out.print(tagHandlerVar); + out.print(" = ("); + out.print(tagHandlerClassName); + out.print(")"); + out.print(VAR_INSTANCEMANAGER); + out.print(".newInstance(\""); + out.print(tagHandlerClassName); + out.println("\", this.getClass().getClassLoader());"); + } else { + out.printin(tagHandlerClassName); + out.print(" "); + out.print(tagHandlerVar); + out.print(" = ("); + out.print("new "); + out.print(tagHandlerClassName); + out.println("());"); + out.printin(VAR_INSTANCEMANAGER); + out.print(".newInstance("); + out.print(tagHandlerVar); + out.println(");"); + } + } + + private void writeDestroyInstance(String tagHandlerVar) { + out.printin(VAR_INSTANCEMANAGER); + out.print(".destroyInstance("); + out.print(tagHandlerVar); + out.println(");"); + } + private void generateCustomEnd(Node.CustomTag n, String tagHandlerVar, String tagEvalVar, String tagPushBodyCountVar) { @@ -2308,11 +2334,7 @@ } else { out.printin(tagHandlerVar); out.println(".release();"); - out.printin("org.apache.jasper.runtime.AnnotationHelper.preDestroy("); - out.print(VAR_ANNOTATIONPROCESSOR); - out.print(", "); - out.print(tagHandlerVar); - out.println(");"); + writeDestroyInstance(tagHandlerVar); } } if (isTagFile || isFragment) { @@ -2355,11 +2377,7 @@ } else { out.printin(tagHandlerVar); out.println(".release();"); - out.printin("org.apache.jasper.runtime.AnnotationHelper.preDestroy("); - out.print(VAR_ANNOTATIONPROCESSOR); - out.print(", "); - out.print(tagHandlerVar); - out.println(");"); + writeDestroyInstance(tagHandlerVar); } if (n.implementsTryCatchFinally()) { @@ -2391,21 +2409,8 @@ String tagHandlerClassName = JspUtil .getCanonicalName(tagHandlerClass); - out.printin(tagHandlerClassName); - out.print(" "); - out.print(tagHandlerVar); - out.print(" = "); - out.print("new "); - out.print(tagHandlerClassName); - out.println("();"); + writeNewInstance(tagHandlerVar, tagHandlerClassName); - // Resource injection - out.printin("org.apache.jasper.runtime.AnnotationHelper.postConstruct("); - out.print(VAR_ANNOTATIONPROCESSOR); - out.print(", "); - out.print(tagHandlerVar); - out.println(");"); - generateSetters(n, tagHandlerVar, handlerInfo, true); // JspIdConsumer (after context has been set) @@ -2458,11 +2463,7 @@ syncScriptingVars(n, VariableInfo.AT_END); // Resource injection - out.printin("org.apache.jasper.runtime.AnnotationHelper.preDestroy("); - out.print(VAR_ANNOTATIONPROCESSOR); - out.print(", "); - out.print(tagHandlerVar); - out.println(");"); + writeDestroyInstance(tagHandlerVar); n.setEndJavaLine(out.getJavaLine()); } Added: tomcat/trunk/java/org/apache/jasper/runtime/InstanceManagerFactory.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/runtime/InstanceManagerFactory.java?view=auto&rev=542189 ============================================================================== --- tomcat/trunk/java/org/apache/jasper/runtime/InstanceManagerFactory.java (added) +++ tomcat/trunk/java/org/apache/jasper/runtime/InstanceManagerFactory.java Mon May 28 03:35:32 2007 @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +package org.apache.jasper.runtime; + +import javax.servlet.ServletConfig; + +import org.apache.InstanceManager; + +/** + * @version $Rev:$ $Date:$ + */ +public class InstanceManagerFactory { + + private InstanceManagerFactory() { + } + + public static InstanceManager getInstanceManager(ServletConfig config) { + InstanceManager instanceManager = + (InstanceManager) config.getServletContext().getAttribute(InstanceManager.class.getName()); + if (instanceManager == null) { + throw new IllegalStateException("No org.apache.InstanceManager set in ServletContext"); + } + return instanceManager; + } + +} Propchange: tomcat/trunk/java/org/apache/jasper/runtime/InstanceManagerFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java?view=diff&rev=542189&r1=542188&r2=542189 ============================================================================== --- tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java (original) +++ tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java Mon May 28 03:35:32 2007 @@ -21,7 +21,7 @@ import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; -import org.apache.AnnotationProcessor; +import org.apache.InstanceManager; import org.apache.jasper.Constants; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -42,7 +42,7 @@ // index of next available tag handler private int current; - protected AnnotationProcessor annotationProcessor = null; + protected InstanceManager instanceManager = null; public static TagHandlerPool getTagHandlerPool( ServletConfig config) { TagHandlerPool result=null; @@ -78,8 +78,7 @@ } this.handlers = new Tag[maxSize]; this.current = -1; - this.annotationProcessor = - (AnnotationProcessor) config.getServletContext().getAttribute(AnnotationProcessor.class.getName()); + instanceManager = InstanceManagerFactory.getInstanceManager(config); } /** @@ -112,7 +111,7 @@ * @throws JspException if a tag handler cannot be instantiated */ public Tag get(Class handlerClass) throws JspException { - Tag handler = null; + Tag handler; synchronized( this ) { if (current >= 0) { handler = handlers[current--]; @@ -123,9 +122,13 @@ // Out of sync block - there is no need for other threads to // wait for us to construct a tag for this thread. try { - Tag instance = (Tag) handlerClass.newInstance(); - AnnotationHelper.postConstruct(annotationProcessor, instance); - return instance; + if (Constants.USE_INSTANCE_MANAGER_FOR_TAGS) { + return (Tag) instanceManager.newInstance(handlerClass.getName(), handlerClass.getClassLoader()); + } else { + Tag instance = (Tag) handlerClass.newInstance(); + instanceManager.newInstance(instance); + return instance; + } } catch (Exception e) { throw new JspException(e.getMessage(), e); } @@ -147,13 +150,11 @@ } // There is no need for other threads to wait for us to release handler.release(); - if (annotationProcessor != null) { - try { - AnnotationHelper.preDestroy(annotationProcessor, handler); - } catch (Exception e) { - log.warn("Error processing preDestroy on tag instance of " - + handler.getClass().getName(), e); - } + try { + instanceManager.destroyInstance(handler); + } catch (Exception e) { + log.warn("Error processing preDestroy on tag instance of " + + handler.getClass().getName(), e); } } @@ -164,13 +165,11 @@ public synchronized void release() { for (int i = current; i >= 0; i--) { handlers[i].release(); - if (annotationProcessor != null) { - try { - AnnotationHelper.preDestroy(annotationProcessor, handlers[i]); - } catch (Exception e) { - log.warn("Error processing preDestroy on tag instance of " - + handlers[i].getClass().getName(), e); - } + try { + instanceManager.destroyInstance(handlers[i]); + } catch (Exception e) { + log.warn("Error processing preDestroy on tag instance of " + + handlers[i].getClass().getName(), e); } } } Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java?view=diff&rev=542189&r1=542188&r2=542189 ============================================================================== --- tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Mon May 28 03:35:32 2007 @@ -31,7 +31,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.tagext.TagInfo; -import org.apache.AnnotationProcessor; +import org.apache.InstanceManager; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; import org.apache.jasper.Options; @@ -39,6 +39,7 @@ import org.apache.jasper.compiler.JavacErrorDetail; import org.apache.jasper.compiler.JspRuntimeContext; import org.apache.jasper.compiler.Localizer; +import org.apache.jasper.runtime.InstanceManagerFactory; import org.apache.jasper.runtime.JspSourceDependent; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -68,7 +69,6 @@ private Servlet theServlet; private String jspUri; - private Class servletClass; private Class tagHandlerClass; private JspCompilationContext ctxt; private long available = 0L; @@ -139,15 +139,10 @@ destroy(); Servlet servlet = null; - + try { - servletClass = ctxt.load(); - servlet = (Servlet) servletClass.newInstance(); - AnnotationProcessor annotationProcessor = (AnnotationProcessor) config.getServletContext().getAttribute(AnnotationProcessor.class.getName()); - if (annotationProcessor != null) { - annotationProcessor.processAnnotations(servlet); - annotationProcessor.postConstruct(servlet); - } + InstanceManager instanceManager = InstanceManagerFactory.getInstanceManager(config); + servlet = (Servlet) instanceManager.newInstance(ctxt.getFQCN(), ctxt.getJspLoader()); } catch (IllegalAccessException e) { throw new JasperException(e); } catch (InstantiationException e) { @@ -442,15 +437,13 @@ public void destroy() { if (theServlet != null) { theServlet.destroy(); - AnnotationProcessor annotationProcessor = (AnnotationProcessor) config.getServletContext().getAttribute(AnnotationProcessor.class.getName()); - if (annotationProcessor != null) { - try { - annotationProcessor.preDestroy(theServlet); - } catch (Exception e) { - // Log any exception, since it can't be passed along - log.error(Localizer.getMessage("jsp.error.file.not.found", - e.getMessage()), e); - } + InstanceManager instanceManager = InstanceManagerFactory.getInstanceManager(config); + try { + instanceManager.destroyInstance(theServlet); + } catch (Exception e) { + // Log any exception, since it can't be passed along + log.error(Localizer.getMessage("jsp.error.file.not.found", + e.getMessage()), e); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]