Author: rmannibucau
Date: Fri Oct 21 14:58:15 2011
New Revision: 1187382
URL: http://svn.apache.org/viewvc?rev=1187382&view=rev
Log:
using a more complete digester to parse context.xml
Modified:
openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Modified:
openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1187382&r1=1187381&r2=1187382&view=diff
==============================================================================
---
openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
(original)
+++
openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Fri Oct 21 14:58:15 2011
@@ -38,6 +38,8 @@ import org.apache.catalina.startup.Const
import org.apache.catalina.startup.ContextConfig;
import org.apache.catalina.startup.ContextRuleSet;
import org.apache.catalina.startup.HostConfig;
+import org.apache.catalina.startup.RealmRuleSet;
+import org.apache.catalina.startup.SetNextNamingRule;
import org.apache.naming.ContextAccessController;
import org.apache.naming.ContextBindings;
import org.apache.openejb.AppContext;
@@ -211,11 +213,28 @@ public class TomcatWebAppBuilder impleme
globalListenerSupport.stop();
}
- private static Digester createDigester() {
+ private static synchronized Digester createDigester() {
+ if (CONTEXT_DIGESTER != null) {
+ return CONTEXT_DIGESTER;
+ }
+
Digester digester = new Digester();
digester.setValidating(false);
- digester.addRuleSet(new ContextRuleSet());
- return (digester);
+ digester.addObjectCreate("Context",
"org.apache.catalina.core.StandardContext", "className");
+ digester.addSetProperties("Context");
+ digester.addObjectCreate("Context/Loader",
"org.apache.catalina.loader.WebappLoader", "className");
+ digester.addSetProperties("Context/Loader");
+ digester.addSetNext("Context/Loader", "setLoader",
"org.apache.catalina.Loader");
+ digester.addObjectCreate("Context/Manager",
"org.apache.catalina.session.StandardManager", "className");
+ digester.addSetProperties("Context/Manager");
+ digester.addSetNext("Context/Manager", "setManager",
"org.apache.catalina.Manager");
+ digester.addObjectCreate("Context/Manager/Store", null, "className");
+ digester.addSetProperties("Context/Manager/Store");
+ digester.addSetNext("Context/Manager/Store", "setStore",
"org.apache.catalina.Store");
+ digester.addRuleSet(new RealmRuleSet("Context/"));
+ digester.addCallMethod("Context/WatchedResource",
"addWatchedResource", 0);
+
+ return digester;
}
//
@@ -234,6 +253,7 @@ public class TomcatWebAppBuilder impleme
File cXml = new File(war, Constants.ApplicationContextXml);
if (cXml.exists()) {
contextXml = new FileInputStream(cXml);
+ System.out.println("using context file " +
cXml.getAbsolutePath());
}
} else { // war
JarFile warAsJar = new JarFile(war);
@@ -245,11 +265,15 @@ public class TomcatWebAppBuilder impleme
StandardContext standardContext;
if (contextXml != null) {
- try {
- standardContext = (StandardContext)
CONTEXT_DIGESTER.parse(contextXml);
- } catch (Exception e) {
- logger.error("can't parse context xml for webapp " +
webApp.path);
- standardContext = new StandardContext();
+ synchronized (CONTEXT_DIGESTER) {
+ try {
+ standardContext = (StandardContext)
CONTEXT_DIGESTER.parse(contextXml);
+ } catch (Exception e) {
+ logger.error("can't parse context xml for webapp " +
webApp.path, e);
+ standardContext = new StandardContext();
+ } finally {
+ CONTEXT_DIGESTER.reset();
+ }
}
} else {
standardContext = new StandardContext();