Author: jfrederic.clere(a)jboss.com
Date: 2009-06-08 04:33:17 -0400 (Mon, 08 Jun 2009)
New Revision: 1091
Modified:
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/core/StandardContext.java
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/ContextConfig.java
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/LocalStrings.properties
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/TldConfig.java
Log:
Don't use xml parser from web-app to process tld files
And port r590.
Modified:
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/core/StandardContext.java
===================================================================
---
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/core/StandardContext.java 2009-06-06
22:34:44 UTC (rev 1090)
+++
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/core/StandardContext.java 2009-06-08
08:33:17 UTC (rev 1091)
@@ -4246,10 +4246,6 @@
((Lifecycle) pipeline).start();
}
- if(getProcessTlds()) {
- processTlds();
- }
-
// Notify our interested LifecycleListeners
lifecycle.fireLifecycleEvent(START_EVENT, null);
@@ -4413,39 +4409,6 @@
//cacheContext();
}
- /**
- * Processes TLDs.
- *
- * @throws LifecycleException If an error occurs
- */
- protected void processTlds() throws LifecycleException {
- TldConfig tldConfig = new TldConfig();
- tldConfig.setContext(this);
-
- // (1) check if the attribute has been defined
- // on the context element.
- tldConfig.setTldValidation(tldValidation);
- tldConfig.setTldNamespaceAware(tldNamespaceAware);
-
- // (2) if the attribute wasn't defined on the context
- // try the host.
- if (!tldValidation) {
- tldConfig.setTldValidation
- (((StandardHost) getParent()).getXmlValidation());
- }
-
- if (!tldNamespaceAware) {
- tldConfig.setTldNamespaceAware
- (((StandardHost) getParent()).getXmlNamespaceAware());
- }
-
- try {
- tldConfig.execute();
- } catch (Exception ex) {
- log.error("Error reading tld listeners "
- + ex.toString(), ex);
- }
- }
private void cacheContext() {
try {
@@ -5308,6 +5271,10 @@
return;
}
}
+ if (processTlds) {
+ this.addLifecycleListener(new TldConfig());
+ }
+
super.init();
// Notify our interested LifecycleListeners
Modified:
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/ContextConfig.java
===================================================================
---
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/ContextConfig.java 2009-06-06
22:34:44 UTC (rev 1090)
+++
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/ContextConfig.java 2009-06-08
08:33:17 UTC (rev 1091)
@@ -339,10 +339,6 @@
long t1=System.currentTimeMillis();
- if (webDigester == null){
- webDigester = createWebDigester();
- }
-
URL url=null;
// Process the application web.xml file
synchronized (webDigester) {
@@ -624,10 +620,6 @@
+ " " + defaultWebXml + " " + file , e);
}
- if (webDigester == null){
- webDigester = createWebDigester();
- }
-
if (stream != null) {
processDefaultWebConfig(webDigester, stream, source);
webRuleSet.recycle();
@@ -786,9 +778,6 @@
if (source == null)
return;
- if (contextDigester == null){
- contextDigester = createContextDigester();
- }
synchronized (contextDigester) {
try {
source.setByteStream(stream);
@@ -1002,6 +991,16 @@
protected void init() {
// Called from StandardContext.init()
+ if (webDigester == null){
+ webDigester = createWebDigester();
+ webDigester.getParser();
+ }
+
+ if (contextDigester == null){
+ contextDigester = createContextDigester();
+ contextDigester.getParser();
+ }
+
if (log.isDebugEnabled())
log.debug(sm.getString("contextConfig.init"));
context.setConfigured(false);
Modified:
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/LocalStrings.properties
===================================================================
---
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/LocalStrings.properties 2009-06-06
22:34:44 UTC (rev 1090)
+++
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/LocalStrings.properties 2009-06-08
08:33:17 UTC (rev 1091)
@@ -72,6 +72,8 @@
hostConfig.undeploy=Undeploying context [{0}]
hostConfig.undeploy.error=Error undeploying web application at context path {0}
hostConfig.undeploying=Undeploying deployed web applications
+tldConfig.cce=Lifecycle event data object {0} is not a Context
+tldConfig.execute=Error processing TLD files for context path {0}
userConfig.database=Exception loading user database
userConfig.deploy=Deploying web application for user {0}
userConfig.deploying=Deploying user web applications
Modified:
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/TldConfig.java
===================================================================
---
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/TldConfig.java 2009-06-06
22:34:44 UTC (rev 1090)
+++
branches/JBOSSWEB_2_0_0_GA_CP/src/share/classes/org/apache/catalina/startup/TldConfig.java 2009-06-08
08:33:17 UTC (rev 1091)
@@ -47,20 +47,24 @@
import org.apache.catalina.Context;
import org.apache.catalina.Globals;
+import org.apache.catalina.Lifecycle;
+import org.apache.catalina.LifecycleEvent;
+import org.apache.catalina.LifecycleListener;
import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.core.StandardHost;
import org.apache.catalina.util.StringManager;
import org.apache.tomcat.util.digester.Digester;
import org.xml.sax.InputSource;
/**
- * Startup event listener for a <b>Context</b> that configures the
properties
- * of that Context, and the associated defined servlets.
+ * Startup event listener for a <b>Context</b> that configures application
+ * listeners configured in any TLD files.
*
* @author Craig R. McClanahan
* @author Jean-Francois Arcand
* @author Costin Manolache
*/
-public final class TldConfig {
+public final class TldConfig implements LifecycleListener {
// Names of JARs that are known not to contain any TLDs
private static HashSet<String> noTldJars;
@@ -392,20 +396,6 @@
}
/**
- * Create (if necessary) and return a Digester configured to process a tag
- * library descriptor, looking for additional listener classes to be
- * registered.
- */
- private static Digester createTldDigester() {
-
- return DigesterFactory.newDigester(tldValidation,
- tldNamespaceAware,
- new TldRuleSet());
-
- }
-
-
- /**
* Scan the JAR file at the specified resource path for TLDs in the
* <code>META-INF</code> subdirectory, and scan each TLD for application
* event listeners that need to be registered.
@@ -497,10 +487,6 @@
private void tldScanStream(InputSource resourceStream)
throws Exception {
- if (tldDigester == null){
- tldDigester = createTldDigester();
- }
-
synchronized (tldDigester) {
try {
tldDigester.push(this);
@@ -712,4 +698,51 @@
return jarPathMap;
}
+
+ public void lifecycleEvent(LifecycleEvent event) {
+ // Identify the context we are associated with
+ try {
+ context = (Context) event.getLifecycle();
+ } catch (ClassCastException e) {
+ log.error(sm.getString("tldConfig.cce", event.getLifecycle()), e);
+ return;
+ }
+
+ if (event.getType().equals(Lifecycle.INIT_EVENT)) {
+ init();
+ } else if (event.getType().equals(Lifecycle.START_EVENT)) {
+ try {
+ execute();
+ } catch (Exception e) {
+ log.error(sm.getString(
+ "tldConfig.execute", context.getPath()), e);
+ }
+ } // Ignore the other event types - nothing to do
+ }
+
+ private void init() {
+ if (tldDigester == null){
+ // (1) check if the attribute has been defined
+ // on the context element.
+ setTldValidation(context.getTldValidation());
+ setTldNamespaceAware(context.getTldNamespaceAware());
+
+ // (2) if the attribute wasn't defined on the context
+ // try the host.
+ if (!tldValidation) {
+ setTldValidation(
+ ((StandardHost) context.getParent()).getXmlValidation());
+ }
+
+ if (!tldNamespaceAware) {
+ setTldNamespaceAware(
+ ((StandardHost) context.getParent()).getXmlNamespaceAware());
+ }
+
+ tldDigester = DigesterFactory.newDigester(tldValidation,
+ tldNamespaceAware,
+ new TldRuleSet());
+ tldDigester.getParser();
+ }
+ }
}
Show replies by date