00001
00027 package org.objectweb.jonas.web.catalina50;
00028
00029 import org.apache.commons.digester.Digester;
00030 import org.apache.commons.digester.Rule;
00031 import org.apache.commons.digester.RuleSetBase;
00032
00033 import org.apache.catalina.Container;
00034 import org.apache.catalina.startup.ContextRuleSet;
00035 import org.apache.catalina.startup.EngineRuleSet;
00036 import org.apache.catalina.startup.HostRuleSet;
00037 import org.apache.catalina.startup.NamingRuleSet;
00038 import org.apache.catalina.startup.SetAllPropertiesRule;
00039
00040 import org.xml.sax.Attributes;
00041
00048 public class JCatalinaRuleSet extends RuleSetBase {
00049
00053 private ClassLoader parentClassLoader = null;
00054
00059 public JCatalinaRuleSet(ClassLoader parentClassLoader) {
00060 super();
00061 this.parentClassLoader = parentClassLoader;
00062 }
00063
00064
00065
00070 public void addRuleInstances(Digester digester) {
00071
00072
00073 digester.addObjectCreate("Server",
00074 "org.apache.catalina.core.StandardServer",
00075 "className");
00076 digester.addSetProperties("Server");
00077 digester.addSetNext("Server",
00078 "setServer",
00079 "org.apache.catalina.Server");
00080
00081 digester.addObjectCreate("Server/GlobalNamingResources",
00082 "org.apache.catalina.deploy.NamingResources");
00083 digester.addSetProperties("Server/GlobalNamingResources");
00084 digester.addSetNext("Server/GlobalNamingResources",
00085 "setGlobalNamingResources",
00086 "org.apache.catalina.deploy.NamingResources");
00087
00088
00089 digester.addObjectCreate("Server/Listener",
00090 null,
00091 "className");
00092 digester.addSetProperties("Server/Listener");
00093 digester.addSetNext("Server/Listener",
00094 "addLifecycleListener",
00095 "org.apache.catalina.LifecycleListener");
00096
00097 digester.addObjectCreate("Server/Service",
00098 "org.apache.catalina.core.StandardService",
00099 "className");
00100 digester.addSetProperties("Server/Service");
00101 digester.addSetNext("Server/Service",
00102 "addService",
00103 "org.apache.catalina.Service");
00104
00105 digester.addObjectCreate("Server/Service/Listener",
00106 null,
00107 "className");
00108 digester.addSetProperties("Server/Service/Listener");
00109 digester.addSetNext("Server/Service/Listener",
00110 "addLifecycleListener",
00111 "org.apache.catalina.LifecycleListener");
00112
00113 digester.addObjectCreate("Server/Service/Connector",
00114 "org.apache.coyote.tomcat5.CoyoteConnector",
00115 "className");
00116 digester.addRule("Server/Service/Connector",
00117 new SetAllPropertiesRule());
00118 digester.addSetNext("Server/Service/Connector",
00119 "addConnector",
00120 "org.apache.catalina.Connector");
00121
00122 digester.addObjectCreate("Server/Service/Connector/Factory",
00123 "org.apache.coyote.tomcat5.CoyoteServerSocketFactory",
00124 "className");
00125 digester.addSetProperties("Server/Service/Connector/Factory");
00126 digester.addSetNext("Server/Service/Connector/Factory",
00127 "setFactory",
00128 "org.apache.catalina.net.ServerSocketFactory");
00129
00130 digester.addObjectCreate("Server/Service/Connector/Listener",
00131 null,
00132 "className");
00133 digester.addSetProperties("Server/Service/Connector/Listener");
00134 digester.addSetNext("Server/Service/Connector/Listener",
00135 "addLifecycleListener",
00136 "org.apache.catalina.LifecycleListener");
00137
00138
00139
00140 digester.addRuleSet(new NamingRuleSet("Server/GlobalNamingResources/"));
00141 digester.addRuleSet(new EngineRuleSet("Server/Service/"));
00142 digester.addRuleSet(new HostRuleSet("Server/Service/Engine/"));
00143 digester.addRuleSet(new ContextRuleSet("Server/Service/Engine/Default"));
00144
00145 digester.addRuleSet(new ContextRuleSet("Server/Service/Engine/Host/Default"));
00146
00147 digester.addRuleSet(new ContextRuleSet("Server/Service/Engine/Host/"));
00148
00149 digester.addRule("Server/Service/Engine",
00150 new SetParentClassLoaderRule(parentClassLoader));
00151 }
00152 }
00153
00158 final class SetParentClassLoaderRule extends Rule {
00159
00163 private ClassLoader parentClassLoader = null;
00164
00165
00170 public SetParentClassLoaderRule(ClassLoader parentClassLoader) {
00171 super();
00172 this.parentClassLoader = parentClassLoader;
00173 }
00174
00185 public void begin(String namespace, String name, Attributes attributes) throws Exception {
00186 Container top = (Container) digester.peek();
00187 top.setParentClassLoader(parentClassLoader);
00188 }
00189 }
00190