You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2011/01/17 11:04:51 UTC
svn commit: r1059839 -
/geronimo/external/trunk/tomcat-parent-7.0.6/catalina/src/main/java/org/apache/catalina/core/ApplicationContext.java
Author: xuhaihong
Date: Mon Jan 17 10:04:51 2011
New Revision: 1059839
URL: http://svn.apache.org/viewvc?rev=1059839&view=rev
Log:
Include Geronimo changes for AsyncListener
Modified:
geronimo/external/trunk/tomcat-parent-7.0.6/catalina/src/main/java/org/apache/catalina/core/ApplicationContext.java
Modified: geronimo/external/trunk/tomcat-parent-7.0.6/catalina/src/main/java/org/apache/catalina/core/ApplicationContext.java
URL: http://svn.apache.org/viewvc/geronimo/external/trunk/tomcat-parent-7.0.6/catalina/src/main/java/org/apache/catalina/core/ApplicationContext.java?rev=1059839&r1=1059838&r2=1059839&view=diff
==============================================================================
--- geronimo/external/trunk/tomcat-parent-7.0.6/catalina/src/main/java/org/apache/catalina/core/ApplicationContext.java (original)
+++ geronimo/external/trunk/tomcat-parent-7.0.6/catalina/src/main/java/org/apache/catalina/core/ApplicationContext.java Mon Jan 17 10:04:51 2011
@@ -5,9 +5,9 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -38,6 +38,7 @@ import java.util.concurrent.ConcurrentHa
import javax.naming.Binding;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
+import javax.servlet.AsyncListener;
import javax.servlet.Filter;
import javax.servlet.FilterRegistration;
import javax.servlet.RequestDispatcher;
@@ -99,7 +100,7 @@ public class ApplicationContext
static {
STRICT_SERVLET_COMPLIANCE = Globals.STRICT_SERVLET_COMPLIANCE;
-
+
String requireSlash = System.getProperty(
"org.apache.catalina.core.ApplicationContext.GET_RESOURCE_REQUIRE_SLASH");
if (requireSlash == null) {
@@ -122,7 +123,7 @@ public class ApplicationContext
public ApplicationContext(StandardContext context) {
super();
this.context = context;
-
+
// Populate session tracking modes
populateSessionTrackingModes();
}
@@ -194,7 +195,7 @@ public class ApplicationContext
*/
private SessionCookieConfig sessionCookieConfig =
new ApplicationSessionCookieConfig();
-
+
/**
* Session tracking modes
*/
@@ -303,7 +304,7 @@ public class ApplicationContext
}
}
-
+
/**
* Return the main path associated with this context.
*/
@@ -311,7 +312,7 @@ public class ApplicationContext
public String getContextPath() {
return context.getPath();
}
-
+
/**
* Return the value of the specified initialization parameter, or
@@ -396,7 +397,7 @@ public class ApplicationContext
Wrapper wrapper = (Wrapper) context.findChild(name);
if (wrapper == null)
return (null);
-
+
return new ApplicationDispatcher(wrapper, null, null, null, null, name);
}
@@ -445,7 +446,7 @@ public class ApplicationContext
if (normalizedPath == null)
return (null);
- pos = normalizedPath.length();
+ pos = normalizedPath.length();
// Use the thread local URI and mapping data
DispatchData dd = dispatchData.get();
@@ -496,10 +497,10 @@ public class ApplicationContext
String pathInfo = mappingData.pathInfo.toString();
mappingData.recycle();
-
+
// Construct a RequestDispatcher to process this request
return new ApplicationDispatcher
- (wrapper, uriCC.toString(), wrapperPath, pathInfo,
+ (wrapper, uriCC.toString(), wrapperPath, pathInfo,
queryString, null);
}
@@ -526,7 +527,7 @@ public class ApplicationContext
if (!path.startsWith("/") && GET_RESOURCE_REQUIRE_SLASH)
throw new MalformedURLException(sm.getString("applicationContext.requestDispatcher.iae", path));
-
+
String normPath = RequestUtil.normalize(path);
if (normPath == null)
return (null);
@@ -726,7 +727,7 @@ public class ApplicationContext
@Override
@Deprecated
public void log(Exception exception, String message) {
-
+
context.getLogger().error(message, exception);
}
@@ -740,7 +741,7 @@ public class ApplicationContext
*/
@Override
public void log(String message, Throwable throwable) {
-
+
context.getLogger().error(message, throwable);
}
@@ -898,11 +899,11 @@ public class ApplicationContext
@Override
public FilterRegistration.Dynamic addFilter(String filterName,
String filterClass) throws IllegalStateException {
-
+
return addFilter(filterName, filterClass, null);
}
-
+
/**
* Add filter to context.
* @param filterName Name of filter to add
@@ -920,11 +921,11 @@ public class ApplicationContext
@Override
public FilterRegistration.Dynamic addFilter(String filterName,
Filter filter) throws IllegalStateException {
-
+
return addFilter(filterName, null, filter);
}
-
+
/**
* Add filter to context.
* @param filterName Name of filter to add
@@ -942,13 +943,13 @@ public class ApplicationContext
@Override
public FilterRegistration.Dynamic addFilter(String filterName,
Class<? extends Filter> filterClass) throws IllegalStateException {
-
+
return addFilter(filterName, filterClass.getName(), null);
}
private FilterRegistration.Dynamic addFilter(String filterName,
String filterClass, Filter filter) throws IllegalStateException {
-
+
if (!context.getState().equals(LifecycleState.STARTING_PREP)) {
//TODO Spec breaking enhancement to ignore this restriction
throw new IllegalStateException(
@@ -964,7 +965,7 @@ public class ApplicationContext
// {@link javax.servlet.annotation.WebListener}.
FilterDef filterDef = context.findFilterDef(filterName);
-
+
// Assume a 'complete' FilterRegistration is one that has a class and
// a name
if (filterDef == null) {
@@ -984,10 +985,10 @@ public class ApplicationContext
filterDef.setFilterClass(filter.getClass().getName());
filterDef.setFilter(filter);
}
-
+
return new ApplicationFilterRegistration(filterDef, context);
- }
-
+ }
+
@Override
public <T extends Filter> T createFilter(Class<T> c)
throws ServletException {
@@ -1018,7 +1019,7 @@ public class ApplicationContext
return new ApplicationFilterRegistration(filterDef, context);
}
-
+
/**
* Add servlet to context.
* @param servletName Name of servlet to add
@@ -1036,7 +1037,7 @@ public class ApplicationContext
@Override
public ServletRegistration.Dynamic addServlet(String servletName,
String servletClass) throws IllegalStateException {
-
+
return addServlet(servletName, servletClass, null);
}
@@ -1062,7 +1063,7 @@ public class ApplicationContext
return addServlet(servletName, null, servlet);
}
-
+
/**
* Add servlet to context.
* @param servletName Name of servlet to add
@@ -1087,14 +1088,14 @@ public class ApplicationContext
private ServletRegistration.Dynamic addServlet(String servletName,
String servletClass, Servlet servlet) throws IllegalStateException {
-
+
if (!context.getState().equals(LifecycleState.STARTING_PREP)) {
//TODO Spec breaking enhancement to ignore this restriction
throw new IllegalStateException(
sm.getString("applicationContext.addServlet.ise",
getContextPath()));
}
-
+
// TODO SERVLET3
// throw UnsupportedOperationException - if this context was passed to the
// {@link ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)}
@@ -1103,7 +1104,7 @@ public class ApplicationContext
// {@link javax.servlet.annotation.WebListener}.
Wrapper wrapper = (Wrapper) context.findChild(servletName);
-
+
// Assume a 'complete' FilterRegistration is one that has a class and
// a name
if (wrapper == null) {
@@ -1156,10 +1157,10 @@ public class ApplicationContext
if (wrapper == null) {
return null;
}
-
+
return new ApplicationServletRegistration(wrapper, context);
}
-
+
/**
* By default {@link SessionTrackingMode#URL} is always supported, {@link
@@ -1176,15 +1177,15 @@ public class ApplicationContext
private void populateSessionTrackingModes() {
// URL re-writing is always enabled by default
- defaultSessionTrackingModes = EnumSet.of(SessionTrackingMode.URL);
+ defaultSessionTrackingModes = EnumSet.of(SessionTrackingMode.URL);
supportedSessionTrackingModes = EnumSet.of(SessionTrackingMode.URL);
-
+
if (context.getCookies()) {
defaultSessionTrackingModes.add(SessionTrackingMode.COOKIE);
supportedSessionTrackingModes.add(SessionTrackingMode.COOKIE);
}
- // SSL not enabled by default as it can only used on its own
+ // SSL not enabled by default as it can only used on its own
// Context > Host > Engine > Service
Service s = ((Engine) context.getParent().getParent()).getService();
Connector[] connectors = s.findConnectors();
@@ -1194,7 +1195,7 @@ public class ApplicationContext
supportedSessionTrackingModes.add(SessionTrackingMode.SSL);
break;
}
- }
+ }
}
/**
@@ -1231,7 +1232,7 @@ public class ApplicationContext
sm.getString("applicationContext.setSessionTracking.ise",
getContextPath()));
}
-
+
// Check that only supported tracking modes have been requested
for (SessionTrackingMode sessionTrackingMode : sessionTrackingModes) {
if (!supportedSessionTrackingModes.contains(sessionTrackingMode)) {
@@ -1249,7 +1250,7 @@ public class ApplicationContext
getContextPath()));
}
}
-
+
this.sessionTrackingModes = sessionTrackingModes;
}
@@ -1259,12 +1260,12 @@ public class ApplicationContext
if (parameters.containsKey(name)) {
return false;
}
-
+
parameters.put(name, value);
return true;
}
-
-
+
+
@Override
public void addListener(Class<? extends EventListener> listenerClass) {
EventListener listener;
@@ -1281,7 +1282,7 @@ public class ApplicationContext
@Override
public void addListener(String className) {
-
+
try {
Object obj = context.getInstanceManager().newInstance(className);
@@ -1314,7 +1315,7 @@ public class ApplicationContext
"applicationContext.addListener.iae.cnfe", className),
e);
}
-
+
}
@@ -1332,7 +1333,7 @@ public class ApplicationContext
// method of a {@link ServletContextListener} that was not declared
// in web.xml, a web-fragment or annotated with
// {@link javax.servlet.annotation.WebListener}.
-
+
boolean match = false;
if (t instanceof ServletContextAttributeListener ||
t instanceof ServletRequestListener ||
@@ -1341,16 +1342,20 @@ public class ApplicationContext
context.addApplicationEventListener(t);
match = true;
}
-
+
if (t instanceof HttpSessionListener
|| (t instanceof ServletContextListener &&
newServletContextListenerAllowed)) {
context.addApplicationLifecycleListener(t);
match = true;
}
-
+
+ if (t instanceof AsyncListener) {
+ match = true;
+ }
+
if (match) return;
-
+
if (t instanceof ServletContextListener) {
throw new IllegalArgumentException(sm.getString(
"applicationContext.addListener.iae.sclNotAllowed",
@@ -1396,20 +1401,20 @@ public class ApplicationContext
@Override
public void declareRoles(String... roleNames) {
-
+
if (!context.getState().equals(LifecycleState.STARTING_PREP)) {
//TODO Spec breaking enhancement to ignore this restriction
throw new IllegalStateException(
sm.getString("applicationContext.addRole.ise",
getContextPath()));
}
-
+
if (roleNames == null) {
throw new IllegalArgumentException(
sm.getString("applicationContext.roles.iae",
getContextPath()));
}
-
+
for (String role : roleNames) {
if (role == null || "".equals(role)) {
throw new IllegalArgumentException(
@@ -1438,7 +1443,7 @@ public class ApplicationContext
new RuntimePermission("getClassLoader"));
}
}
-
+
return result;
}
@@ -1459,7 +1464,7 @@ public class ApplicationContext
public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
Map<String, ApplicationFilterRegistration> result =
new HashMap<String, ApplicationFilterRegistration>();
-
+
FilterDef[] filterDefs = context.findFilterDefs();
for (FilterDef filterDef : filterDefs) {
result.put(filterDef.getFilterName(),
@@ -1480,7 +1485,7 @@ public class ApplicationContext
public Map<String, ? extends ServletRegistration> getServletRegistrations() {
Map<String, ApplicationServletRegistration> result =
new HashMap<String, ApplicationServletRegistration>();
-
+
Container[] wrappers = context.findChildren();
for (Container wrapper : wrappers) {
result.put(((Wrapper) wrapper).getName(),
@@ -1491,12 +1496,12 @@ public class ApplicationContext
return result;
}
-
+
// -------------------------------------------------------- Package Methods
protected StandardContext getContext() {
return this.context;
}
-
+
protected Map<String,String> getReadonlyAttributes() {
return this.readOnlyAttributes;
}
@@ -1519,10 +1524,10 @@ public class ApplicationContext
String key = keys.next();
removeAttribute(key);
}
-
+
}
-
-
+
+
/**
* Return the facade associated with this ApplicationContext.
*/
@@ -1547,7 +1552,7 @@ public class ApplicationContext
protected void setNewServletContextListenerAllowed(boolean allowed) {
this.newServletContextListenerAllowed = allowed;
}
-
+
/**
* List resource paths (recursively), and store all of them in the given
* Set.
@@ -1578,13 +1583,13 @@ public class ApplicationContext
*/
private static String getJNDIUri(String hostName, String path) {
String result;
-
+
if (path.startsWith("/")) {
result = "/" + hostName + path;
} else {
result = "/" + hostName + "/" + path;
}
-
+
return result;
}