Index: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/EmbeddedServletOptions.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/EmbeddedServletOptions.java,v retrieving revision 1.23 diff -u -r1.23 EmbeddedServletOptions.java --- jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/EmbeddedServletOptions.java 5 Apr 2005 23:14:43 -0000 1.23 +++ jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/EmbeddedServletOptions.java 22 Aug 2005 09:42:11 -0000 @@ -347,6 +347,14 @@ return tagPluginManager; } + public boolean isCaching() { + return false; + } + + public Map getCache() { + return null; + } + /** * Create an EmbeddedServletOptions object using data available from * ServletConfig and ServletContext. Index: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java,v retrieving revision 1.99 diff -u -r1.99 JspC.java --- jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java 27 Jul 2005 15:12:03 -0000 1.99 +++ jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java 22 Aug 2005 09:42:11 -0000 @@ -33,6 +33,8 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.List; +import java.util.Map; +import java.util.HashMap; import java.util.Stack; import java.util.StringTokenizer; import java.util.Vector; @@ -100,6 +102,7 @@ private static final String SWITCH_OUTPUT_DIR = "-d"; private static final String SWITCH_IE_CLASS_ID = "-ieplugin"; private static final String SWITCH_PACKAGE_NAME = "-p"; + private static final String SWITCH_CACHE = "-cache"; private static final String SWITCH_CLASS_NAME = "-c"; private static final String SWITCH_FULL_STOP = "--"; private static final String SWITCH_COMPILE = "-compile"; @@ -155,6 +158,8 @@ private boolean compile = false; private boolean smapSuppressed = true; private boolean smapDumped = false; + private boolean caching = true; + private Map cache = new HashMap(); private String compiler = null; @@ -282,6 +287,13 @@ xpoweredBy = true; } else if (tok.equals(SWITCH_TRIM_SPACES)) { setTrimSpaces(true); + } else if (tok.equals(SWITCH_CACHE)) { + tok = nextArg(); + if ("false".equals(tok)) { + caching = false; + } else { + caching = true; + } } else if (tok.equals(SWITCH_CLASSPATH)) { setClassPath(nextArg()); } else if (tok.startsWith(SWITCH_DIE)) { @@ -399,6 +411,27 @@ return classDebugInfo; } + /** + * @see Options#isCaching() + */ + public boolean isCaching() { + return caching; + } + + /** + * @see Options#isCaching() + */ + public void setCaching(boolean caching) { + this.caching = caching; + } + + /** + * @see Options#getCache() + */ + public Map getCache() { + return cache; + } + /** * Background compilation check intervals in seconds */ Index: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/Options.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/Options.java,v retrieving revision 1.27 diff -u -r1.27 Options.java --- jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/Options.java 22 Oct 2004 17:13:27 -0000 1.27 +++ jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/Options.java 22 Aug 2005 09:42:11 -0000 @@ -17,6 +17,7 @@ package org.apache.jasper; import java.io.File; +import java.util.Map; import org.apache.jasper.compiler.JspConfig; import org.apache.jasper.compiler.TagPluginManager; @@ -170,4 +171,18 @@ */ public int getModificationTestInterval(); + /** + * Is caching enabled (used for precompilation). + */ + public boolean isCaching(); + + /** + * The web-application wide cache for the returned TreeNode + * by parseXMLDocument in TagLibraryInfoImpl.parseTLD, + * if isCaching returns true. + * + * @return the Map(String uri, TreeNode tld) instance. + */ + public Map getCache(); + } Index: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java,v retrieving revision 1.85 diff -u -r1.85 JspDocumentParser.java --- jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java 11 Aug 2005 12:00:32 -0000 1.85 +++ jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java 22 Aug 2005 09:42:11 -0000 @@ -1233,20 +1233,28 @@ String[] location = ctxt.getTldLocation(uri); if (location != null || !isPlainUri) { - /* - * If the uri value is a plain uri, a translation error must - * not be generated if the uri is not found in the taglib map. - * Instead, any actions in the namespace defined by the uri - * value must be treated as uninterpreted. - */ - result = - new TagLibraryInfoImpl( - ctxt, - parserController, - prefix, - uri, - location, - err); + if (ctxt.getOptions().isCaching()) { + result = (TagLibraryInfoImpl) ctxt.getOptions().getCache().get(uri); + } + if (result == null) { + /* + * If the uri value is a plain uri, a translation error must + * not be generated if the uri is not found in the taglib map. + * Instead, any actions in the namespace defined by the uri + * value must be treated as uninterpreted. + */ + result = + new TagLibraryInfoImpl( + ctxt, + parserController, + prefix, + uri, + location, + err); + if (ctxt.getOptions().isCaching()) { + ctxt.getOptions().getCache().put(uri, result); + } + } } } Index: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java,v retrieving revision 1.90 diff -u -r1.90 Parser.java --- jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java 9 Mar 2005 19:13:20 -0000 1.90 +++ jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java 22 Aug 2005 09:42:11 -0000 @@ -414,14 +414,23 @@ prefix, uri, uriPrev); } if (pageInfo.getTaglib(uri) == null) { - String[] location = ctxt.getTldLocation(uri); - pageInfo.addTaglib(uri, - new TagLibraryInfoImpl(ctxt, - parserController, - prefix, - uri, - location, - err)); + TagLibraryInfoImpl impl = null; + if (ctxt.getOptions().isCaching()) { + impl = (TagLibraryInfoImpl) ctxt.getOptions().getCache().get(uri); + } + if (impl == null) { + String[] location = ctxt.getTldLocation(uri); + impl = new TagLibraryInfoImpl(ctxt, + parserController, + prefix, + uri, + location, + err); + if (ctxt.getOptions().isCaching()) { + ctxt.getOptions().getCache().put(uri, impl); + } + } + pageInfo.addTaglib(uri, impl); } pageInfo.addPrefixMapping(prefix, uri); } else { Index: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v retrieving revision 1.59 diff -u -r1.59 TagLibraryInfoImpl.java --- jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java 23 Mar 2005 15:48:37 -0000 1.59 +++ jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java 22 Aug 2005 09:42:11 -0000 @@ -86,7 +86,7 @@ print("urn", urn, out); print("info", info, out); print("uri", uri, out); - print("tagLibraryValidator", tagLibraryValidator.toString(), out); + print("tagLibraryValidator", "" + tagLibraryValidator, out); for(int i = 0; i < tags.length; i++) out.println(tags[i].toString());