Author: remy.maucherat(a)jboss.com
Date: 2009-03-18 20:43:13 -0400 (Wed, 18 Mar 2009)
New Revision: 963
Modified:
trunk/java/org/apache/catalina/Wrapper.java
trunk/java/org/apache/catalina/core/ApplicationContext.java
trunk/java/org/apache/catalina/core/StandardWrapper.java
trunk/java/org/apache/catalina/deploy/FilterMap.java
trunk/java/org/apache/catalina/startup/ContextConfig.java
trunk/webapps/docs/changelog.xml
Log:
- Finish up some simple FIXMEs.
Modified: trunk/java/org/apache/catalina/Wrapper.java
===================================================================
--- trunk/java/org/apache/catalina/Wrapper.java 2009-03-18 16:19:55 UTC (rev 962)
+++ trunk/java/org/apache/catalina/Wrapper.java 2009-03-19 00:43:13 UTC (rev 963)
@@ -21,6 +21,7 @@
import javax.servlet.Servlet;
import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
import javax.servlet.UnavailableException;
@@ -244,6 +245,12 @@
/**
+ * Get the facade ServletRegistration.
+ */
+ public ServletRegistration getFacade();
+
+
+ /**
* Return the associated servlet instance.
*/
public Servlet getServlet();
Modified: trunk/java/org/apache/catalina/core/ApplicationContext.java
===================================================================
--- trunk/java/org/apache/catalina/core/ApplicationContext.java 2009-03-18 16:19:55 UTC
(rev 962)
+++ trunk/java/org/apache/catalina/core/ApplicationContext.java 2009-03-19 00:43:13 UTC
(rev 963)
@@ -34,7 +34,6 @@
import javax.naming.Binding;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
-import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
@@ -51,7 +50,6 @@
import org.apache.catalina.Wrapper;
import org.apache.catalina.deploy.ApplicationParameter;
import org.apache.catalina.deploy.FilterDef;
-import org.apache.catalina.deploy.FilterMap;
import org.apache.catalina.deploy.SessionCookie;
import org.apache.catalina.util.Enumerator;
import org.apache.catalina.util.RequestUtil;
@@ -810,20 +808,6 @@
}
- // FIXME: removed
- public void addServletMapping(String servletName, String[] urlPatterns) {
- if (context.initialized) {
- //TODO Spec breaking enhancement to ignore this restriction
- throw new IllegalStateException(sm.getString(
- "applicationContext.addServletMapping",
getContextPath()));
- }
- for (String urlPattern : urlPatterns) {
- boolean jspWildCard = ("*.jsp".equals(urlPattern));
- context.addServletMapping(servletName, urlPattern, jspWildCard);
- }
- }
-
-
public FilterRegistration addFilter(String filterName, String className)
throws IllegalArgumentException, IllegalStateException {
if (context.isInitialized()) {
@@ -840,8 +824,11 @@
public ServletRegistration addServlet(String servletName, String className)
throws IllegalArgumentException, IllegalStateException {
- // TODO Auto-generated method stub
- return null;
+ Wrapper wrapper = context.createWrapper();
+ wrapper.setName(servletName);
+ wrapper.setServletClass(className);
+ context.addChild(wrapper);
+ return wrapper.getFacade();
}
@@ -856,8 +843,12 @@
public ServletRegistration findServletRegistration(String servletName) {
- // TODO Auto-generated method stub
- return null;
+ Wrapper wrapper = (Wrapper) context.findChild(servletName);
+ if (wrapper != null) {
+ return wrapper.getFacade();
+ } else {
+ return null;
+ }
}
Modified: trunk/java/org/apache/catalina/core/StandardWrapper.java
===================================================================
--- trunk/java/org/apache/catalina/core/StandardWrapper.java 2009-03-18 16:19:55 UTC (rev
962)
+++ trunk/java/org/apache/catalina/core/StandardWrapper.java 2009-03-19 00:43:13 UTC (rev
963)
@@ -38,6 +38,7 @@
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.SingleThreadModel;
@@ -626,6 +627,14 @@
}
+
+ /**
+ * Get the facade ServletRegistration.
+ */
+ public ServletRegistration getFacade() {
+ return facade;
+ }
+
/**
* Gets the names of the methods supported by the underlying servlet.
Modified: trunk/java/org/apache/catalina/deploy/FilterMap.java
===================================================================
--- trunk/java/org/apache/catalina/deploy/FilterMap.java 2009-03-18 16:19:55 UTC (rev
962)
+++ trunk/java/org/apache/catalina/deploy/FilterMap.java 2009-03-19 00:43:13 UTC (rev
963)
@@ -49,10 +49,10 @@
public static final int ERROR = 1;
public static final int FORWARD = 2;
- public static final int FORWARD_ERROR =3;
+ public static final int FORWARD_ERROR = 3;
public static final int INCLUDE = 4;
public static final int INCLUDE_ERROR = 5;
- public static final int INCLUDE_ERROR_FORWARD =6;
+ public static final int INCLUDE_ERROR_FORWARD = 6;
public static final int INCLUDE_FORWARD = 7;
public static final int REQUEST = 8;
public static final int REQUEST_ERROR = 9;
@@ -62,10 +62,27 @@
public static final int REQUEST_FORWARD = 13;
public static final int REQUEST_INCLUDE = 14;
public static final int REQUEST_FORWARD_INCLUDE= 15;
+ public static final int ASYNC = 16;
+ public static final int ASYNC_ERROR = 17;
+ public static final int ASYNC_FORWARD = 18;
+ public static final int ASYNC_FORWARD_ERROR = 19;
+ public static final int ASYNC_INCLUDE = 20;
+ public static final int ASYNC_INCLUDE_ERROR = 21;
+ public static final int ASYNC_INCLUDE_ERROR_FORWARD = 22;
+ public static final int ASYNC_INCLUDE_FORWARD = 23;
+ public static final int ASYNC_REQUEST = 24;
+ public static final int ASYNC_REQUEST_ERROR = 25;
+ public static final int ASYNC_REQUEST_ERROR_FORWARD = 26;
+ public static final int ASYNC_REQUEST_ERROR_FORWARD_INCLUDE = 27;
+ public static final int ASYNC_REQUEST_ERROR_INCLUDE = 28;
+ public static final int ASYNC_REQUEST_FORWARD = 29;
+ public static final int ASYNC_REQUEST_INCLUDE = 30;
+ public static final int ASYNC_REQUEST_FORWARD_INCLUDE= 31;
// represents nothing having been set. This will be seen
// as equal to a REQUEST
private static final int NOT_SET = -1;
+ private static final int ALL = ASYNC_REQUEST_ERROR_FORWARD_INCLUDE;
private int dispatcherMapping=NOT_SET;
@@ -176,6 +193,13 @@
case REQUEST_ERROR : dispatcherMapping = REQUEST_ERROR_FORWARD; break;
case REQUEST_ERROR_INCLUDE : dispatcherMapping =
REQUEST_ERROR_FORWARD_INCLUDE; break;
case REQUEST_INCLUDE : dispatcherMapping = REQUEST_FORWARD_INCLUDE;
break;
+ case ASYNC_ERROR : dispatcherMapping = ASYNC_FORWARD_ERROR; break;
+ case ASYNC_INCLUDE : dispatcherMapping = ASYNC_INCLUDE_FORWARD; break;
+ case ASYNC_INCLUDE_ERROR : dispatcherMapping =
ASYNC_INCLUDE_ERROR_FORWARD; break;
+ case ASYNC_REQUEST : dispatcherMapping = ASYNC_REQUEST_FORWARD; break;
+ case ASYNC_REQUEST_ERROR : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD; break;
+ case ASYNC_REQUEST_ERROR_INCLUDE : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD_INCLUDE; break;
+ case ASYNC_REQUEST_INCLUDE : dispatcherMapping =
ASYNC_REQUEST_FORWARD_INCLUDE; break;
}
} else if (dispatcher.equals(DispatcherType.INCLUDE.name())) {
// apply INCLUDE to the global dispatcherMapping.
@@ -188,6 +212,13 @@
case REQUEST_ERROR : dispatcherMapping = REQUEST_ERROR_INCLUDE; break;
case REQUEST_ERROR_FORWARD : dispatcherMapping =
REQUEST_ERROR_FORWARD_INCLUDE; break;
case REQUEST_FORWARD : dispatcherMapping = REQUEST_FORWARD_INCLUDE;
break;
+ case ASYNC_ERROR : dispatcherMapping = ASYNC_INCLUDE_ERROR; break;
+ case ASYNC_FORWARD : dispatcherMapping = ASYNC_INCLUDE_FORWARD; break;
+ case ASYNC_FORWARD_ERROR : dispatcherMapping =
ASYNC_INCLUDE_ERROR_FORWARD; break;
+ case ASYNC_REQUEST : dispatcherMapping = ASYNC_REQUEST_INCLUDE; break;
+ case ASYNC_REQUEST_ERROR : dispatcherMapping =
ASYNC_REQUEST_ERROR_INCLUDE; break;
+ case ASYNC_REQUEST_ERROR_FORWARD : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD_INCLUDE; break;
+ case ASYNC_REQUEST_FORWARD : dispatcherMapping =
ASYNC_REQUEST_FORWARD_INCLUDE; break;
}
} else if (dispatcher.equals(DispatcherType.REQUEST.name())) {
// apply REQUEST to the global dispatcherMapping.
@@ -200,6 +231,13 @@
case INCLUDE_ERROR : dispatcherMapping = REQUEST_ERROR_INCLUDE; break;
case INCLUDE_FORWARD : dispatcherMapping = REQUEST_FORWARD_INCLUDE;
break;
case INCLUDE_ERROR_FORWARD : dispatcherMapping =
REQUEST_ERROR_FORWARD_INCLUDE; break;
+ case ASYNC_ERROR : dispatcherMapping = ASYNC_REQUEST_ERROR; break;
+ case ASYNC_FORWARD : dispatcherMapping = ASYNC_REQUEST_FORWARD; break;
+ case ASYNC_FORWARD_ERROR : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD; break;
+ case ASYNC_INCLUDE : dispatcherMapping = ASYNC_REQUEST_INCLUDE; break;
+ case ASYNC_INCLUDE_ERROR : dispatcherMapping =
ASYNC_REQUEST_ERROR_INCLUDE; break;
+ case ASYNC_INCLUDE_FORWARD : dispatcherMapping =
ASYNC_REQUEST_FORWARD_INCLUDE; break;
+ case ASYNC_INCLUDE_ERROR_FORWARD : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD_INCLUDE; break;
}
} else if (dispatcher.equals(DispatcherType.ERROR.name())) {
// apply ERROR to the global dispatcherMapping.
@@ -212,7 +250,34 @@
case REQUEST_INCLUDE : dispatcherMapping = REQUEST_ERROR_INCLUDE; break;
case REQUEST_FORWARD : dispatcherMapping = REQUEST_ERROR_FORWARD; break;
case REQUEST_FORWARD_INCLUDE : dispatcherMapping =
REQUEST_ERROR_FORWARD_INCLUDE; break;
+ case ASYNC_FORWARD : dispatcherMapping = ASYNC_FORWARD_ERROR; break;
+ case ASYNC_INCLUDE : dispatcherMapping = ASYNC_INCLUDE_ERROR; break;
+ case ASYNC_INCLUDE_FORWARD : dispatcherMapping =
ASYNC_INCLUDE_ERROR_FORWARD; break;
+ case ASYNC_REQUEST : dispatcherMapping = ASYNC_REQUEST_ERROR; break;
+ case ASYNC_REQUEST_INCLUDE : dispatcherMapping =
ASYNC_REQUEST_ERROR_INCLUDE; break;
+ case ASYNC_REQUEST_FORWARD : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD; break;
+ case ASYNC_REQUEST_FORWARD_INCLUDE : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD_INCLUDE; break;
}
+ } else if (dispatcher.equals(DispatcherType.ASYNC.name())) {
+ // apply ASYNC to the global dispatcherMapping.
+ switch (dispatcherMapping) {
+ case NOT_SET : dispatcherMapping = ASYNC; break;
+ case ERROR : dispatcherMapping = ASYNC_ERROR; break;
+ case FORWARD : dispatcherMapping = ASYNC_FORWARD; break;
+ case FORWARD_ERROR : dispatcherMapping = ASYNC_FORWARD_ERROR; break;
+ case INCLUDE : dispatcherMapping = ASYNC_INCLUDE; break;
+ case INCLUDE_ERROR : dispatcherMapping = ASYNC_INCLUDE_ERROR; break;
+ case INCLUDE_ERROR_FORWARD : dispatcherMapping =
ASYNC_INCLUDE_ERROR_FORWARD; break;
+ case INCLUDE_FORWARD : dispatcherMapping = ASYNC_INCLUDE_FORWARD; break;
+ case REQUEST : dispatcherMapping = ASYNC_REQUEST; break;
+ case REQUEST_ERROR : dispatcherMapping = ASYNC_REQUEST_ERROR; break;
+ case REQUEST_ERROR_FORWARD : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD; break;
+ case REQUEST_ERROR_FORWARD_INCLUDE : dispatcherMapping =
ASYNC_REQUEST_ERROR_FORWARD_INCLUDE; break;
+ case REQUEST_ERROR_INCLUDE : dispatcherMapping =
ASYNC_REQUEST_ERROR_INCLUDE; break;
+ case REQUEST_FORWARD : dispatcherMapping = ASYNC_REQUEST_FORWARD; break;
+ case REQUEST_INCLUDE : dispatcherMapping = ASYNC_REQUEST_INCLUDE; break;
+ case REQUEST_FORWARD_INCLUDE : dispatcherMapping =
ASYNC_REQUEST_FORWARD_INCLUDE; break;
+ }
}
}
Modified: trunk/java/org/apache/catalina/startup/ContextConfig.java
===================================================================
--- trunk/java/org/apache/catalina/startup/ContextConfig.java 2009-03-18 16:19:55 UTC (rev
962)
+++ trunk/java/org/apache/catalina/startup/ContextConfig.java 2009-03-19 00:43:13 UTC (rev
963)
@@ -29,6 +29,7 @@
import java.util.Map;
import java.util.Properties;
+import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.http.annotation.FilterMapping;
import javax.servlet.http.annotation.InitParam;
@@ -307,27 +308,72 @@
if (clazz.isAnnotationPresent(InitParam.class)) {
InitParam annotation = clazz.getAnnotation(InitParam.class);
// Add init param
- // FIXME
+ context.addParameter(annotation.name(), annotation.value());
}
+ String filterName = null;
if (clazz.isAnnotationPresent(ServletFilter.class)) {
ServletFilter annotation = clazz.getAnnotation(ServletFilter.class);
// Add servlet filter
- // FIXME
+ filterName = annotation.filterName();
+ FilterDef filterDef = new FilterDef();
+ filterDef.setFilterName(annotation.filterName());
+ filterDef.setFilterClass(clazz.getName());
+ InitParam[] params = annotation.initParams();
+ for (int i = 0; i < params.length; i++) {
+ filterDef.addInitParameter(params[i].name(), params[i].value());
+ }
+ context.addFilterDef(filterDef);
}
if (clazz.isAnnotationPresent(FilterMapping.class)) {
FilterMapping annotation = clazz.getAnnotation(FilterMapping.class);
// Add filter mapping
- // FIXME
+ if (filterName != null) {
+ FilterMap filterMap = new FilterMap();
+ filterMap.setFilterName(filterName);
+ String[] urlPatterns = annotation.urlPattern();
+ if (urlPatterns != null) {
+ for (int i = 0; i < urlPatterns.length; i++) {
+ filterMap.addURLPattern(urlPatterns[i]);
+ }
+ }
+ String[] servletNames = annotation.servletNames();
+ if (servletNames != null) {
+ for (int i = 0; i < servletNames.length; i++) {
+ filterMap.addServletName(servletNames[i]);
+ }
+ }
+ DispatcherType[] dispatcherTypes = annotation.dispatcherTypes();
+ if (dispatcherTypes != null) {
+ for (int i = 0; i < dispatcherTypes.length; i++) {
+ filterMap.setDispatcher(dispatcherTypes[i].toString());
+ }
+ }
+ context.addFilterMap(filterMap);
+ }
}
if (clazz.isAnnotationPresent(Servlet.class)) {
Servlet annotation = clazz.getAnnotation(Servlet.class);
// Add servlet
- // FIXME
+ Wrapper wrapper = context.createWrapper();
+ wrapper.setName(annotation.name());
+ wrapper.setServletClass(clazz.getName());
+ wrapper.setLoadOnStartup(annotation.loadOnStartup());
+ InitParam[] params = annotation.initParams();
+ for (int i = 0; i < params.length; i++) {
+ wrapper.addInitParameter(params[i].name(), params[i].value());
+ }
+ context.addChild(wrapper);
+ String[] urlMappings = annotation.urlMappings();
+ if (urlMappings != null) {
+ for (int i = 0; i < urlMappings.length; i++) {
+ context.addServletMapping(urlMappings[i], annotation.name());
+ }
+ }
}
if (clazz.isAnnotationPresent(ServletContextListener.class)) {
ServletContextListener annotation =
clazz.getAnnotation(ServletContextListener.class);
// Add listener
- // FIXME
+ context.addApplicationListener(clazz.getName());
}
}
Modified: trunk/webapps/docs/changelog.xml
===================================================================
--- trunk/webapps/docs/changelog.xml 2009-03-18 16:19:55 UTC (rev 962)
+++ trunk/webapps/docs/changelog.xml 2009-03-19 00:43:13 UTC (rev 963)
@@ -41,6 +41,10 @@
<fix>
<bug>46866</bug>: Use nanoTime rather that a weaker init for the
Random fallback. (remm)
</fix>
+ <update>
+ Add support for events to all connectors (IO events are only available on
+ the APR HTTP connector, of course). (remm)
+ </update>
</changelog>
</subsection>
<subsection name="Coyote">