Author: remy.maucherat(a)jboss.com
Date: 2009-04-29 21:46:25 -0400 (Wed, 29 Apr 2009)
New Revision: 1037
Modified:
trunk/ROADMAP.txt
trunk/java/org/apache/catalina/startup/BaseContextScanner.java
trunk/java/org/apache/catalina/startup/ClassLoadingContextScanner.java
trunk/java/org/apache/catalina/startup/ContextConfig.java
trunk/java/org/apache/tomcat/WarComponents.java
Log:
- Call onStartup.
Modified: trunk/ROADMAP.txt
===================================================================
--- trunk/ROADMAP.txt 2009-04-29 17:23:16 UTC (rev 1036)
+++ trunk/ROADMAP.txt 2009-04-30 01:46:25 UTC (rev 1037)
@@ -1,24 +1,25 @@
Roadmap for JBoss Web 3.0
-Main development:
-- Update digester XML parsing rules for web.xml updates
-- web.xml fragments merging rules
-- web.xml fragments ordering
-- Resources overlay
-- Session tracking configuration
+Standalone:
+- Web fragments ordering
+- Resources overlay implementation
+- Jasper plugin for TLD metadata
- Access control annotations
-- Jasper plugin for TLD metadata
+- Update digester XML parsing rules for web.xml updates (session tracking-mode,
cookie-config, servlet enabled,
+ servlets and filters async-supported)
+- Enforce web.xml fragments merging rules
- Lazy webapp startup valve
+- Abstract JMX in custom modeler better
- JSP 2.2 changes
- EL 1.1 changes
-- Setup standalone TCK environment for testing compliance with the new features
-- Javassist annotation scanning impl for JBoss Web standalone
-- Abstract JMX in custom modeler better
+
+JBoss AS:
+- JBoss Metadata parsing of .tld files (out of tree)
- Coordinate with AS 6 to implement new web.xml parsing (out of tree)
-- JBoss Metadata parsing of .tld files (out of tree)
- Coordinate with AS 6 for annotation updates (out of tree)
Other:
+- Setup standalone TCK environment for testing compliance with the new features
- Diagnostic and monitoring features (provided by the jopr/JON agent, as JBoss Web
standalone seems too
lightweight for embedded jopr/JON to make sense)
- .net support like the php support (looks ok, but PHP is hard to use, how would this be
different ?)
Modified: trunk/java/org/apache/catalina/startup/BaseContextScanner.java
===================================================================
--- trunk/java/org/apache/catalina/startup/BaseContextScanner.java 2009-04-29 17:23:16 UTC
(rev 1036)
+++ trunk/java/org/apache/catalina/startup/BaseContextScanner.java 2009-04-30 01:46:25 UTC
(rev 1037)
@@ -112,15 +112,15 @@
protected ArrayList<String> overlays = new ArrayList<String>();
protected ArrayList<String> webFragments = new ArrayList<String>();
protected Map<String, Set<String>> TLDs = new HashMap<String,
Set<String>>();
- protected Map<String, JarServletContainerInitializerService>
jarServletContainerInitializerServices =
- new HashMap<String, JarServletContainerInitializerService>();
+ protected Map<String, ServletContainerInitializerInfo>
servletContainerInitializerInfos =
+ new HashMap<String, ServletContainerInitializerInfo>();
/**
* Used to speed up scanning for the services interest classes.
*/
protected Class<?>[] handlesTypesArray = null;
- protected Map<Class<?>, JarServletContainerInitializerServiceImpl>
handlesTypes =
- new HashMap<Class<?>, JarServletContainerInitializerServiceImpl>();
+ protected Map<Class<?>, ServletContainerInitializerInfoImpl> handlesTypes
=
+ new HashMap<Class<?>, ServletContainerInitializerInfoImpl>();
public Iterator<Class<?>> getAnnotatedClasses() {
@@ -143,8 +143,8 @@
}
- public Map<String, JarServletContainerInitializerService>
getJarServletContainerInitializerServices() {
- return jarServletContainerInitializerServices;
+ public Map<String, ServletContainerInitializerInfo>
getServletContainerInitializerInfo() {
+ return servletContainerInitializerInfos;
}
@@ -298,9 +298,9 @@
}
}
// Add in jarService map, and add in the local map used to speed up lookups
- JarServletContainerInitializerServiceImpl
jarServletContainerInitializerService =
- new
JarServletContainerInitializerServiceImpl(servletContainerInitializerClass,
handlesTypesArray);
- jarServletContainerInitializerServices.put(file.getName(),
jarServletContainerInitializerService);
+ ServletContainerInitializerInfoImpl jarServletContainerInitializerService =
+ new ServletContainerInitializerInfoImpl(servletContainerInitializerClass,
handlesTypesArray);
+ servletContainerInitializerInfos.put(file.getName(),
jarServletContainerInitializerService);
if (typesArray != null) {
ArrayList<Class<?>> handlesTypesList = new
ArrayList<Class<?>>();
if (handlesTypesArray != null) {
@@ -374,11 +374,11 @@
public abstract Class<?> scanClass(Context context, String className, File
file, JarEntry entry);
- protected class JarServletContainerInitializerServiceImpl implements
JarServletContainerInitializerService {
+ protected class ServletContainerInitializerInfoImpl implements
ServletContainerInitializerInfo {
protected Class<?> servletContainerInitializer = null;
protected Class<?>[] interestClasses = null;
- protected HashSet<Class<?>> startupNotifySetSet = new
HashSet<Class<?>>();
- protected JarServletContainerInitializerServiceImpl(Class<?>
servletContainerInitializer, Class<?>[] interestClasses) {
+ protected HashSet<Class<?>> startupNotifySet = new
HashSet<Class<?>>();
+ protected ServletContainerInitializerInfoImpl(Class<?>
servletContainerInitializer, Class<?>[] interestClasses) {
this.servletContainerInitializer = servletContainerInitializer;
this.interestClasses = interestClasses;
}
@@ -389,10 +389,10 @@
return interestClasses;
}
protected void addStartupNotifySetSet(Class<?> clazz) {
- startupNotifySetSet.add(clazz);
+ startupNotifySet.add(clazz);
}
public Set<Class<?>> getStartupNotifySet() {
- return startupNotifySetSet;
+ return startupNotifySet;
}
}
Modified: trunk/java/org/apache/catalina/startup/ClassLoadingContextScanner.java
===================================================================
--- trunk/java/org/apache/catalina/startup/ClassLoadingContextScanner.java 2009-04-29
17:23:16 UTC (rev 1036)
+++ trunk/java/org/apache/catalina/startup/ClassLoadingContextScanner.java 2009-04-30
01:46:25 UTC (rev 1037)
@@ -42,7 +42,7 @@
if (handlesTypesArray != null) {
for (int i = 0; i < handlesTypesArray.length; i++) {
if (handlesTypesArray[i].isAssignableFrom(clazz)) {
- JarServletContainerInitializerServiceImpl
jarServletContainerInitializerService =
+ ServletContainerInitializerInfoImpl
jarServletContainerInitializerService =
handlesTypes.get(handlesTypesArray[i]);
jarServletContainerInitializerService.addStartupNotifySetSet(clazz);
}
Modified: trunk/java/org/apache/catalina/startup/ContextConfig.java
===================================================================
--- trunk/java/org/apache/catalina/startup/ContextConfig.java 2009-04-29 17:23:16 UTC (rev
1036)
+++ trunk/java/org/apache/catalina/startup/ContextConfig.java 2009-04-30 01:46:25 UTC (rev
1037)
@@ -65,8 +65,8 @@
import java.util.zip.ZipEntry;
import javax.servlet.DispatcherType;
+import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
-import javax.servlet.annotation.HandlesTypes;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
@@ -100,6 +100,7 @@
import org.apache.catalina.deploy.WebAbsoluteOrdering;
import org.apache.catalina.deploy.WebOrdering;
import org.apache.catalina.util.StringManager;
+import org.apache.tomcat.WarComponents.ServletContainerInitializerInfo;
import org.apache.tomcat.util.digester.Digester;
import org.apache.tomcat.util.digester.RuleSet;
import org.xml.sax.ErrorHandler;
@@ -1446,7 +1447,13 @@
// Process the default and application web.xml files
defaultWebConfig();
- scanner.scan(context);
+ try {
+ scanner.scan(context);
+ } catch (Throwable t) {
+ // FIXME: error message
+ log.error(sm.getString("contextConfig.scan"), t);
+ ok = false;
+ }
// FIXME: look where to place it according to the merging rules
applicationWebConfig();
// FIXME: Add overlays
@@ -1459,7 +1466,24 @@
validateSecurityRoles();
}
- // FIXME: Invoke Servlet container initializer: instantiate and call onStartup
+ // Invoke Servlet container initializer: instantiate and call onStartup
+ if (ok) {
+ Iterator<ServletContainerInitializerInfo> initializers =
+ scanner.getServletContainerInitializerInfo().values().iterator();
+ while (initializers.hasNext()) {
+ ServletContainerInitializerInfo service = initializers.next();
+ try {
+ ServletContainerInitializer servletContainerInitializer =
+ (ServletContainerInitializer)
service.getServletContainerInitializer().newInstance();
+ servletContainerInitializer.onStartup(service.getStartupNotifySet(),
context.getServletContext());
+ } catch (Throwable t) {
+ // FIXME: error message
+
log.error(sm.getString("contextConfig.servletContainerInitializer",
+ service.getServletContainerInitializer()), t);
+ ok = false;
+ }
+ }
+ }
// Configure an authenticator if we need one
if (ok)
Modified: trunk/java/org/apache/tomcat/WarComponents.java
===================================================================
--- trunk/java/org/apache/tomcat/WarComponents.java 2009-04-29 17:23:16 UTC (rev 1036)
+++ trunk/java/org/apache/tomcat/WarComponents.java 2009-04-30 01:46:25 UTC (rev 1037)
@@ -29,7 +29,7 @@
public interface WarComponents {
- public interface JarServletContainerInitializerService {
+ public interface ServletContainerInitializerInfo {
public Set<Class<?>> getStartupNotifySet();
public Class<?>[] getInterestClasses();
public Class<?> getServletContainerInitializer();
@@ -58,6 +58,6 @@
/**
* Find Jar services.
*/
- public Map<String, JarServletContainerInitializerService>
getJarServletContainerInitializerServices();
+ public Map<String, ServletContainerInitializerInfo>
getServletContainerInitializerInfo();
}