costin 2002/08/20 20:24:37
Modified: catalina/src/share/org/apache/catalina/startup
ContextConfig.java
Log:
Patch from Jean-Francois Arcand to turn off validation.
Also:
- start using commons-logging
- report the processing time for expensive operations ( right now a
hard-coded limit of 200 ms ).
Revision Changes Path
1.10 +161 -109 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/ContextConfig.java
Index: ContextConfig.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/ContextConfig.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ContextConfig.java 20 Aug 2002 03:26:36 -0000 1.9
+++ ContextConfig.java 21 Aug 2002 03:24:37 -0000 1.10
@@ -145,10 +145,11 @@
public final class ContextConfig
implements LifecycleListener {
+ private static org.apache.commons.logging.Log log=
+ org.apache.commons.logging.LogFactory.getLog( ContextConfig.class );
// ----------------------------------------------------- Instance Variables
-
/**
* The set of Authenticators that we know how to configure. The key is
* the name of the implemented authentication method, and the value is
@@ -181,21 +182,31 @@
private static final StringManager sm =
StringManager.getManager(Constants.Package);
-
/**
* The <code>Digester</code> we will use to process tag library
* descriptor files.
*/
- private static Digester tldDigester = createTldDigester();
+ private static Digester tldDigester = null;
/**
* The <code>Digester</code> we will use to process web application
* deployment descriptor files.
*/
- private static Digester webDigester = createWebDigester();
+ private static Digester webDigester = null;
+ /**
+ * Attribute value used to turn on/off XML validation
+ */
+ private static boolean xmlValidation = false;
+
+ /**
+ * Attribute value used to turn on/off XML namespace awarenes.
+ */
+ private static boolean xmlNamespaceAware = false;
+
+
// ------------------------------------------------------------- Properties
@@ -234,16 +245,17 @@
// Identify the context we are associated with
try {
context = (Context) event.getLifecycle();
- if (context instanceof StandardContext) {
- int contextDebug = ((StandardContext) context).getDebug();
- if (contextDebug > this.debug)
- this.debug = contextDebug;
- }
+// if (context instanceof StandardContext) {
+// int contextDebug = ((StandardContext) context).getDebug();
+// if (contextDebug > this.debug)
+// this.debug = contextDebug;
+// }
} catch (ClassCastException e) {
- log(sm.getString("contextConfig.cce", event.getLifecycle()), e);
+ log.error(sm.getString("contextConfig.cce", event.getLifecycle()), e);
return;
}
+ // Called from ContainerBase.addChild() -> StandardContext.start()
// Process the event that has occurred
if (event.getType().equals(Lifecycle.START_EVENT))
start();
@@ -268,35 +280,43 @@
stream = servletContext.getResourceAsStream
(Constants.ApplicationWebXml);
if (stream == null) {
- log(sm.getString("contextConfig.applicationMissing"));
+ log.error(sm.getString("contextConfig.applicationMissing") + " " + context);
return;
}
+
+ long t1=System.currentTimeMillis();
+ if (webDigester == null){
+ webDigester = createWebDigester();
+ }
+
+ URL url=null;
// Process the application web.xml file
synchronized (webDigester) {
try {
- URL url =
+ url =
servletContext.getResource(Constants.ApplicationWebXml);
-
- InputSource is = new InputSource(url.toExternalForm());
- is.setByteStream(stream);
- webDigester.setDebug(getDebug());
- if (context instanceof StandardContext) {
- ((StandardContext) context).setReplaceWelcomeFiles(true);
+ if( url!=null ) {
+ InputSource is = new InputSource(url.toExternalForm());
+ is.setByteStream(stream);
+ webDigester.setDebug(getDebug());
+ if (context instanceof StandardContext) {
+ ((StandardContext) context).setReplaceWelcomeFiles(true);
+ }
+ webDigester.clear();
+ webDigester.push(context);
+ webDigester.parse(is);
+ } else {
+ log.info("No web.xml, using defaults " + context );
}
-
-
- webDigester.clear();
- webDigester.push(context);
- webDigester.parse(is);
} catch (SAXParseException e) {
- log(sm.getString("contextConfig.applicationParse"), e);
- log(sm.getString("contextConfig.applicationPosition",
+ log.error(sm.getString("contextConfig.applicationParse"), e);
+ log.error(sm.getString("contextConfig.applicationPosition",
"" + e.getLineNumber(),
"" + e.getColumnNumber()));
ok = false;
} catch (Exception e) {
- log(sm.getString("contextConfig.applicationParse"), e);
+ log.error(sm.getString("contextConfig.applicationParse"), e);
ok = false;
} finally {
try {
@@ -304,10 +324,14 @@
stream.close();
}
} catch (IOException e) {
- log(sm.getString("contextConfig.applicationClose"), e);
+ log.error(sm.getString("contextConfig.applicationClose"), e);
}
}
}
+ long t2=System.currentTimeMillis();
+ if( (t2-t1 ) > 200 )
+ log.info("Processed " + url + " " + ( t2-t1));
+
}
@@ -349,7 +373,7 @@
// Has a Realm been configured for us to authenticate against?
if (context.getRealm() == null) {
- log(sm.getString("contextConfig.missingRealm"));
+ log.error(sm.getString("contextConfig.missingRealm"));
ok = false;
return;
}
@@ -360,7 +384,7 @@
authenticators = ResourceBundle.getBundle
("org.apache.catalina.startup.Authenticators");
} catch (MissingResourceException e) {
- log(sm.getString("contextConfig.authenticatorResources"), e);
+ log.error(sm.getString("contextConfig.authenticatorResources"), e);
ok = false;
return;
}
@@ -375,7 +399,7 @@
authenticatorName = null;
}
if (authenticatorName == null) {
- log(sm.getString("contextConfig.authenticatorMissing",
+ log.error(sm.getString("contextConfig.authenticatorMissing",
loginConfig.getAuthMethod()));
ok = false;
return;
@@ -390,12 +414,12 @@
Pipeline pipeline = ((ContainerBase) context).getPipeline();
if (pipeline != null) {
((ContainerBase) context).addValve(authenticator);
- log(sm.getString("contextConfig.authenticatorConfigured",
+ log.info(sm.getString("contextConfig.authenticatorConfigured",
loginConfig.getAuthMethod()));
}
}
} catch (Throwable t) {
- log(sm.getString("contextConfig.authenticatorInstantiate",
+ log.error(sm.getString("contextConfig.authenticatorInstantiate",
authenticatorName), t);
ok = false;
}
@@ -417,6 +441,8 @@
boolean secure = false;
Container container = context.getParent();
if (container instanceof Host) {
+ xmlValidation = ((Host)container).getXmlValidation();
+ xmlNamespaceAware = ((Host)container).getXmlNamespaceAware();
container = container.getParent();
}
if (container instanceof Engine) {
@@ -464,12 +490,12 @@
Pipeline pipeline = ((ContainerBase) context).getPipeline();
if (pipeline != null) {
((ContainerBase) context).addValve(certificates);
- log(sm.getString
+ log.error(sm.getString
("contextConfig.certificatesConfig.added"));
}
}
} catch (Throwable t) {
- log(sm.getString("contextConfig.certificatesConfig.error"), t);
+ log.error(sm.getString("contextConfig.certificatesConfig.error"), t);
ok = false;
}
@@ -485,18 +511,19 @@
URL url = null;
Digester tldDigester = new Digester();
- tldDigester.setNamespaceAware(true);
- tldDigester.setValidating(true);
+ tldDigester.setNamespaceAware(xmlNamespaceAware);
+ tldDigester.setValidating(xmlValidation);
if (tldDigester.getFactory().getClass().getName().indexOf("xerces")!=-1) {
tldDigester = patchXerces(tldDigester);
}
-
// Set the schemaLocation
url = ContextConfig.class.getResource(Constants.TldSchemaResourcePath_20);
SchemaResolver tldEntityResolver = new SchemaResolver(url.toString(),
tldDigester);
- tldDigester.setSchema(url.toString());
+ if( xmlValidation ) {
+ tldDigester.setSchema(url.toString());
+ }
url = ContextConfig.class.getResource(Constants.TldDtdResourcePath_11);
tldEntityResolver.register(Constants.TldDtdPublicId_11,
@@ -539,11 +566,11 @@
* web application deployment descriptor (web.xml).
*/
private static Digester createWebDigester() {
-
+ long t1=System.currentTimeMillis();
URL url = null;
Digester webDigester = new Digester();
- webDigester.setNamespaceAware(true);
- webDigester.setValidating(true);
+ webDigester.setNamespaceAware(xmlNamespaceAware);
+ webDigester.setValidating(xmlValidation);
if (webDigester.getFactory().getClass().getName().indexOf("xerces")!=-1) {
webDigester = patchXerces(webDigester);
@@ -552,8 +579,10 @@
url = ContextConfig.class.getResource(Constants.WebSchemaResourcePath_24);
SchemaResolver webEntityResolver = new SchemaResolver(url.toString(),
webDigester);
- webDigester.setSchema(url.toString());
-
+ if( xmlValidation ) {
+ webDigester.setSchema(url.toString());
+ }
+
url = ContextConfig.class.getResource(Constants.WebDtdResourcePath_22);
webEntityResolver.register(Constants.WebDtdPublicId_22,
url.toString());
@@ -566,6 +595,8 @@
webDigester.setEntityResolver(webEntityResolver);
webDigester.addRuleSet(new WebRuleSet());
+ long t2=System.currentTimeMillis();
+ //log.info("Create web digester " + ( t2-t1));
return (webDigester);
}
@@ -574,6 +605,7 @@
* Process the default configuration file, if it exists.
*/
private void defaultConfig() {
+ long t1=System.currentTimeMillis();
// Open the default web.xml file, if it exists
File file = new File(Constants.DefaultWebXml);
@@ -586,13 +618,17 @@
stream.close();
stream = null;
} catch (FileNotFoundException e) {
- log(sm.getString("contextConfig.defaultMissing"));
+ log.error(sm.getString("contextConfig.defaultMissing") + " " + file);
return;
} catch (IOException e) {
- log(sm.getString("contextConfig.defaultMissing"), e);
+ log.error(sm.getString("contextConfig.defaultMissing") + " " + file , e);
return;
}
+ if (webDigester == null){
+ webDigester = createWebDigester();
+ }
+
// Process the default web.xml file
synchronized (webDigester) {
try {
@@ -608,13 +644,13 @@
webDigester.push(context);
webDigester.parse(is);
} catch (SAXParseException e) {
- log(sm.getString("contextConfig.defaultParse"), e);
- log(sm.getString("contextConfig.defaultPosition",
+ log.error(sm.getString("contextConfig.defaultParse"), e);
+ log.error(sm.getString("contextConfig.defaultPosition",
"" + e.getLineNumber(),
"" + e.getColumnNumber()));
ok = false;
} catch (Exception e) {
- log(sm.getString("contextConfig.defaultParse"), e);
+ log.error(sm.getString("contextConfig.defaultParse"), e);
ok = false;
} finally {
try {
@@ -622,11 +658,13 @@
stream.close();
}
} catch (IOException e) {
- log(sm.getString("contextConfig.defaultClose"), e);
+ log.error(sm.getString("contextConfig.defaultClose"), e);
}
}
}
-
+ long t2=System.currentTimeMillis();
+ if( (t2-t1) > 200 )
+ log.info("Processed default web.xml " + file + " " + ( t2-t1));
}
@@ -643,9 +681,7 @@
if (logger != null)
logger.log("ContextConfig[" + context.getName() + "]: " + message);
else
- System.out.println("ContextConfig[" + context.getName() + "]: "
- + message);
-
+ log.info( message );
}
@@ -664,10 +700,7 @@
logger.log("ContextConfig[" + context.getName() + "] "
+ message, throwable);
else {
- System.out.println("ContextConfig[" + context.getName() + "]: "
- + message);
- System.out.println("" + throwable);
- throwable.printStackTrace(System.out);
+ log.error( message, throwable );
}
}
@@ -704,14 +737,14 @@
}
-
/**
- * Process a "start" event for this Context.
+ * Process a "start" event for this Context - in background
*/
private synchronized void start() {
+ // Called from StandardContext.start()
if (debug > 0)
- log(sm.getString("contextConfig.start"));
+ log.info(sm.getString("contextConfig.start"));
context.setConfigured(false);
ok = true;
@@ -720,6 +753,9 @@
if( !context.getOverride() ) {
if( container instanceof Host ) {
((Host)container).importDefaultContext(context);
+ xmlValidation = ((Host)container).getXmlValidation();
+ xmlNamespaceAware = ((Host)container).getXmlNamespaceAware();
+
container = container.getParent();
}
if( container instanceof Engine ) {
@@ -739,7 +775,7 @@
try {
tldScan();
} catch (Exception e) {
- log(e.getMessage(), e);
+ log.error(e.getMessage(), e);
ok = false;
}
}
@@ -753,25 +789,25 @@
authenticatorConfig();
// Dump the contents of this pipeline if requested
- if ((debug >= 1) && (context instanceof ContainerBase)) {
- log("Pipline Configuration:");
+ if ((log.isDebugEnabled()) && (context instanceof ContainerBase)) {
+ log.debug("Pipline Configuration:");
Pipeline pipeline = ((ContainerBase) context).getPipeline();
Valve valves[] = null;
if (pipeline != null)
valves = pipeline.getValves();
if (valves != null) {
for (int i = 0; i < valves.length; i++) {
- log(" " + valves[i].getInfo());
+ log.debug(" " + valves[i].getInfo());
}
}
- log("======================");
+ log.debug("======================");
}
// Make our application available if no problems were encountered
if (ok)
context.setConfigured(true);
else {
- log(sm.getString("contextConfig.unavailable"));
+ log.error(sm.getString("contextConfig.unavailable"));
context.setConfigured(false);
}
@@ -783,8 +819,8 @@
*/
private synchronized void stop() {
- if (debug > 0)
- log(sm.getString("contextConfig.stop"));
+ if (log.isDebugEnabled())
+ log.debug(sm.getString("contextConfig.stop"));
int i;
@@ -958,9 +994,18 @@
while (paths.hasNext()) {
String path = (String) paths.next();
if (path.endsWith(".jar")) {
+ long t1=System.currentTimeMillis();
tldScanJar(path);
+ long t2=System.currentTimeMillis();
+ if( (t2-t1 ) > 200 )
+ log.info("Processed tld jar " + path + " " + ( t2-t1));
} else {
+ long t1=System.currentTimeMillis();
tldScanTld(path);
+ long t2=System.currentTimeMillis();
+ if( (t2-t1 ) > 200 )
+ log.info("Processed tld " + path + " " + ( t2-t1));
+
}
}
@@ -978,8 +1023,8 @@
*/
private void tldScanJar(String resourcePath) throws Exception {
- if (debug >= 1) {
- log(" Scanning JAR at resource path '" + resourcePath + "'");
+ if (log.isDebugEnabled()) {
+ log.debug(" Scanning JAR at resource path '" + resourcePath + "'");
}
JarFile jarFile = null;
@@ -1007,8 +1052,8 @@
if (!name.endsWith(".tld")) {
continue;
}
- if (debug >= 2) {
- log(" Processing TLD at '" + name + "'");
+ if (log.isTraceEnabled()) {
+ log.trace(" Processing TLD at '" + name + "'");
}
inputStream = jarFile.getInputStream(entry);
tldScanStream(inputStream);
@@ -1064,6 +1109,10 @@
private void tldScanStream(InputStream resourceStream)
throws Exception {
+ if (tldDigester == null){
+ tldDigester = createTldDigester();
+ }
+
synchronized (tldDigester) {
tldDigester.clear();
tldDigester.push(context);
@@ -1083,8 +1132,8 @@
*/
private void tldScanTld(String resourcePath) throws Exception {
- if (debug >= 1) {
- log(" Scanning TLD at resource path '" + resourcePath + "'");
+ if (log.isDebugEnabled()) {
+ log.debug(" Scanning TLD at resource path '" + resourcePath + "'");
}
InputStream inputStream = null;
@@ -1129,15 +1178,15 @@
*/
private Set tldScanResourcePaths() throws IOException {
- if (debug >= 1) {
- log(" Accumulating TLD resource paths");
+ if (log.isDebugEnabled()) {
+ log.debug(" Accumulating TLD resource paths");
}
Set resourcePaths = new HashSet();
// Accumulate resource paths explicitly listed in the web application
// deployment descriptor
- if (debug >= 2) {
- log(" Scanning <taglib> elements in web.xml");
+ if (log.isTraceEnabled()) {
+ log.trace(" Scanning <taglib> elements in web.xml");
}
String taglibs[] = context.findTaglibs();
for (int i = 0; i < taglibs.length; i++) {
@@ -1147,40 +1196,44 @@
if (!resourcePath.startsWith("/")) {
resourcePath = "/WEB-INF/web.xml/../" + resourcePath;
}
- if (debug >= 3) {
- log(" Adding path '" + resourcePath +
+ if (log.isTraceEnabled()) {
+ log.trace(" Adding path '" + resourcePath +
"' for URI '" + taglibs[i] + "'");
}
resourcePaths.add(resourcePath);
}
// Scan TLDs in the /WEB-INF subdirectory of the web application
- if (debug >= 2) {
- log(" Scanning TLDs in /WEB-INF subdirectory");
+ if (log.isTraceEnabled()) {
+ log.trace(" Scanning TLDs in /WEB-INF subdirectory");
}
DirContext resources = context.getResources();
- try {
- NamingEnumeration items = resources.list("/WEB-INF");
- while (items.hasMoreElements()) {
- NameClassPair item = (NameClassPair) items.nextElement();
- String resourcePath = "/WEB-INF/" + item.getName();
- // FIXME - JSP 2.0 is not explicit about whether we should
- // scan subdirectories of /WEB-INF for TLDs also
- if (!resourcePath.endsWith(".tld")) {
- continue;
- }
- if (debug >= 3) {
- log(" Adding path '" + resourcePath + "'");
+ if( resources!=null ) {
+ try {
+ NamingEnumeration items = resources.list("/WEB-INF");
+ while (items.hasMoreElements()) {
+ NameClassPair item = (NameClassPair) items.nextElement();
+ String resourcePath = "/WEB-INF/" + item.getName();
+ // FIXME - JSP 2.0 is not explicit about whether we should
+ // scan subdirectories of /WEB-INF for TLDs also
+ if (!resourcePath.endsWith(".tld")) {
+ continue;
+ }
+ if (log.isTraceEnabled()) {
+ log.trace(" Adding path '" + resourcePath + "'");
+ }
+ resourcePaths.add(resourcePath);
}
- resourcePaths.add(resourcePath);
+ } catch (NamingException e) {
+ ; // Silent catch: it's valid that no /WEB-INF directory exists
}
- } catch (NamingException e) {
- ; // Silent catch: it's valid that no /WEB-INF directory exists
+ } else {
+ log.info("No resource " + context + " " + context.getClass());
}
// Scan JARs in the /WEB-INF/lib subdirectory of the web application
- if (debug >= 2) {
- log(" Scanning JARs in /WEB-INF/lib subdirectory");
+ if (log.isTraceEnabled()) {
+ log.trace(" Scanning JARs in /WEB-INF/lib subdirectory");
}
try {
NamingEnumeration items = resources.list("/WEB-INF/lib");
@@ -1190,8 +1243,8 @@
if (!resourcePath.endsWith(".jar")) {
continue;
}
- if (debug >= 3) {
- log(" Adding path '" + resourcePath + "'");
+ if (log.isTraceEnabled()) {
+ log.trace(" Adding path '" + resourcePath + "'");
}
resourcePaths.add(resourcePath);
}
@@ -1221,7 +1274,7 @@
for (int j = 0; j < roles.length; j++) {
if (!"*".equals(roles[j]) &&
!context.findSecurityRole(roles[j])) {
- log(sm.getString("contextConfig.role.auth", roles[j]));
+ log.info(sm.getString("contextConfig.role.auth", roles[j]));
context.addSecurityRole(roles[j]);
}
}
@@ -1233,20 +1286,19 @@
Wrapper wrapper = (Wrapper) wrappers[i];
String runAs = wrapper.getRunAs();
if ((runAs != null) && !context.findSecurityRole(runAs)) {
- log(sm.getString("contextConfig.role.runas", runAs));
+ log.info(sm.getString("contextConfig.role.runas", runAs));
context.addSecurityRole(runAs);
}
String names[] = wrapper.findSecurityReferences();
for (int j = 0; j < names.length; j++) {
String link = wrapper.findSecurityReference(names[j]);
if ((link != null) && !context.findSecurityRole(link)) {
- log(sm.getString("contextConfig.role.link", link));
+ log.info(sm.getString("contextConfig.role.link", link));
context.addSecurityRole(link);
}
}
}
}
-
}
--
To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>
|