You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2011/04/19 13:14:05 UTC
svn commit: r1095026 - in /tomcat/trunk:
java/org/apache/jasper/EmbeddedServletOptions.java
java/org/apache/jasper/JspC.java
java/org/apache/jasper/compiler/TldLocationsCache.java
webapps/docs/changelog.xml
Author: markt
Date: Tue Apr 19 11:14:04 2011
New Revision: 1095026
URL: http://svn.apache.org/viewvc?rev=1095026&view=rev
Log:
Use a single TLD location cache for a web application rather than one per JSP compilation to speed up JSP compilation.
Modified:
tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java
tomcat/trunk/java/org/apache/jasper/JspC.java
tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java?rev=1095026&r1=1095025&r2=1095026&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java (original)
+++ tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java Tue Apr 19 11:14:04 2011
@@ -748,7 +748,7 @@ public final class EmbeddedServletOption
// Setup the global Tag Libraries location cache for this
// web-application.
- tldLocationsCache = new TldLocationsCache(context);
+ tldLocationsCache = TldLocationsCache.getInstance(context);
// Setup the jsp config info for this web app.
jspConfig = new JspConfig(context);
Modified: tomcat/trunk/java/org/apache/jasper/JspC.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspC.java?rev=1095026&r1=1095025&r2=1095026&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/JspC.java (original)
+++ tomcat/trunk/java/org/apache/jasper/JspC.java Tue Apr 19 11:14:04 2011
@@ -1436,7 +1436,7 @@ public class JspC implements Options {
context =new JspCServletContext
(new PrintWriter(System.out),
new URL("file:" + uriRoot.replace('\\','/') + '/'));
- tldLocationsCache = new TldLocationsCache(context);
+ tldLocationsCache = TldLocationsCache.getInstance(context);
} catch (MalformedURLException me) {
System.out.println("**" + me);
}
Modified: tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java?rev=1095026&r1=1095025&r2=1095026&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java Tue Apr 19 11:14:04 2011
@@ -14,7 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.jasper.compiler;
import java.io.File;
@@ -42,6 +41,7 @@ import org.apache.juli.logging.LogFactor
import org.apache.tomcat.JarScanner;
import org.apache.tomcat.JarScannerCallback;
+
/**
* A container for all tag libraries that are defined "globally"
* for the web application.
@@ -77,7 +77,9 @@ import org.apache.tomcat.JarScannerCallb
public class TldLocationsCache {
- private final Log log = LogFactory.getLog(TldLocationsCache.class);
+ private static final Log log = LogFactory.getLog(TldLocationsCache.class);
+
+ private static final String KEY = TldLocationsCache.class.getName();
/**
* The types of URI one may specify for a tag library
@@ -103,7 +105,7 @@ public class TldLocationsCache {
*/
private Hashtable<String, TldLocation> mappings;
- private boolean initialized;
+ private volatile boolean initialized;
private ServletContext ctxt;
/** Constructor.
@@ -139,6 +141,24 @@ public class TldLocationsCache {
}
}
+
+ /**
+ * Obtains the TLD location cache for the given {@link ServletContext} and
+ * creates one if one does not currently exist.
+ */
+ public static synchronized TldLocationsCache getInstance(
+ ServletContext ctxt) {
+ if (ctxt == null) {
+ throw new IllegalArgumentException("ServletContext was null");
+ }
+ TldLocationsCache cache = (TldLocationsCache) ctxt.getAttribute(KEY);
+ if (cache == null) {
+ cache = new TldLocationsCache(ctxt);
+ ctxt.setAttribute(KEY, cache);
+ }
+ return cache;
+ }
+
/**
* Gets the 'location' of the TLD associated with the given taglib 'uri'.
*
@@ -189,7 +209,7 @@ public class TldLocationsCache {
* wonderful arrangements present when Tomcat gets embedded.
*
*/
- private void init() throws JasperException {
+ private synchronized void init() throws JasperException {
if (initialized) return;
try {
tldScanWebXml();
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1095026&r1=1095025&r2=1095026&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Apr 19 11:14:04 2011
@@ -121,6 +121,10 @@
can easily identify JARs that can be added to the list of JARs to skip.
(markt)
</add>
+ <update>
+ Use a single TLD location cache for a web application rather than one
+ per JSP compilation to speed up JSP compilation. (markt)
+ </update>
</changelog>
</subsection>
<subsection name="Web applications">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org