import org.apache.catalina.Service;
import org.apache.catalina.Wrapper;
import org.apache.catalina.connector.Connector;
-import org.apache.catalina.deploy.ApplicationParameter;
import org.apache.catalina.deploy.FilterDef;
import org.apache.catalina.util.Enumerator;
import org.apache.catalina.util.RequestUtil;
/**
* The merged context initialization parameters for this Context.
*/
- private Map<String,String> parameters = null;
+ private Map<String,String> parameters =
+ new ConcurrentHashMap<String,String>();
/**
* @param name Name of the initialization parameter to retrieve
*/
public String getInitParameter(final String name) {
-
- mergeParameters();
return parameters.get(name);
-
}
* empty enumeration if the context has no initialization parameters.
*/
public Enumeration<String> getInitParameterNames() {
-
- mergeParameters();
return (new Enumerator<String>(parameters.keySet()));
-
}
@Override
public boolean setInitParameter(String name, String value) {
-
- mergeParameters();
-
if (parameters.containsKey(name)) {
return false;
}
this.newServletContextListenerAllowed = allowed;
}
- // -------------------------------------------------------- Private Methods
-
-
- /**
- * Merge the context initialization parameters specified in the application
- * deployment descriptor with the application parameters described in the
- * server configuration, respecting the <code>override</code> property of
- * the application parameters appropriately.
- */
- private void mergeParameters() {
-
- if (parameters != null)
- return;
- Map<String,String> results = new ConcurrentHashMap<String,String>();
- String names[] = context.findParameters();
- for (int i = 0; i < names.length; i++)
- results.put(names[i], context.findParameter(names[i]));
- ApplicationParameter params[] =
- context.findApplicationParameters();
- for (int i = 0; i < params.length; i++) {
- if (params[i].getOverride()) {
- if (results.get(params[i].getName()) == null)
- results.put(params[i].getName(), params[i].getValue());
- } else {
- results.put(params[i].getName(), params[i].getValue());
- }
- }
- parameters = results;
-
- }
-
-
/**
* List resource paths (recursively), and store all of them in the given
* Set.
postWelcomeFiles();
}
+ // Set up the context init params
+ mergeParameters();
+
// Call ServletContainerInitializers
for (Map.Entry<ServletContainerInitializer, Set<Class<?>>> entry :
initializers.entrySet()) {
}
}
+
+
+ /**
+ * Merge the context initialization parameters specified in the application
+ * deployment descriptor with the application parameters described in the
+ * server configuration, respecting the <code>override</code> property of
+ * the application parameters appropriately.
+ */
+ private void mergeParameters() {
+ ServletContext sc = getServletContext();
+
+ String names[] = findParameters();
+ for (int i = 0; i < names.length; i++) {
+ sc.setInitParameter(names[i], findParameter(names[i]));
+ }
+
+ ApplicationParameter params[] = findApplicationParameters();
+ for (int i = 0; i < params.length; i++) {
+ if (params[i].getOverride()) {
+ if (sc.getInitParameter(params[i].getName()) == null) {
+ sc.setInitParameter(params[i].getName(),
+ params[i].getValue());
+ }
+ } else {
+ sc.setInitParameter(params[i].getName(), params[i].getValue());
+ }
+ }
+ }
+
+
/**
* Stop this component and implement the requirements
* of {@link LifecycleBase#stopInternal()}.