remm 2003/08/09 12:04:29 Modified: catalina/src/share/org/apache/catalina Context.java catalina/src/share/org/apache/catalina/core ApplicationContext.java StandardContext.java StandardContextValve.java catalina/src/share/org/apache/catalina/session StandardSession.java Log: - Split the applicationListeners array in two, for performance reasons. Revision Changes Path 1.9 +29 -8 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Context.java Index: Context.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Context.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- Context.java 22 Jul 2003 21:01:26 -0000 1.8 +++ Context.java 9 Aug 2003 19:04:29 -0000 1.9 @@ -120,24 +120,45 @@ /** - * Return the set of initialized application listener objects, + * Return the set of initialized application event listener objects, * in the order they were specified in the web application deployment * descriptor, for this application. * * @exception IllegalStateException if this method is called before * this application has started, or after it has been stopped */ - public Object[] getApplicationListeners(); + public Object[] getApplicationEventListeners(); /** - * Store the set of initialized application listener objects, + * Store the set of initialized application event listener objects, * in the order they were specified in the web application deployment * descriptor, for this application. * * @param listeners The set of instantiated listener objects. */ - public void setApplicationListeners(Object listeners[]); + public void setApplicationEventListeners(Object listeners[]); + + + /** + * Return the set of initialized application lifecycle listener objects, + * in the order they were specified in the web application deployment + * descriptor, for this application. + * + * @exception IllegalStateException if this method is called before + * this application has started, or after it has been stopped + */ + public Object[] getApplicationLifecycleListeners(); + + + /** + * Store the set of initialized application lifecycle listener objects, + * in the order they were specified in the web application deployment + * descriptor, for this application. + * + * @param listeners The set of instantiated listener objects. + */ + public void setApplicationLifecycleListeners(Object listeners[]); /** 1.15 +6 -6 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationContext.java Index: ApplicationContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationContext.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- ApplicationContext.java 5 Aug 2003 13:22:03 -0000 1.14 +++ ApplicationContext.java 9 Aug 2003 19:04:29 -0000 1.15 @@ -751,7 +751,7 @@ } // Notify interested application event listeners - Object listeners[] = context.getApplicationListeners(); + Object listeners[] = context.getApplicationEventListeners(); if ((listeners == null) || (listeners.length == 0)) return; ServletContextAttributeEvent event = @@ -814,7 +814,7 @@ } // Notify interested application event listeners - Object listeners[] = context.getApplicationListeners(); + Object listeners[] = context.getApplicationEventListeners(); if ((listeners == null) || (listeners.length == 0)) return; ServletContextAttributeEvent event = null; 1.80 +74 -21 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java Index: StandardContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java,v retrieving revision 1.79 retrieving revision 1.80 diff -u -r1.79 -r1.80 --- StandardContext.java 2 Aug 2003 17:42:59 -0000 1.79 +++ StandardContext.java 9 Aug 2003 19:04:29 -0000 1.80 @@ -77,12 +77,7 @@ import java.util.Hashtable; import java.util.Stack; import java.net.URLDecoder; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; -import javax.servlet.ServletException; -import javax.servlet.ServletRequestListener; + import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.management.InstanceNotFoundException; @@ -92,6 +87,18 @@ import javax.management.Notification; import javax.management.NotificationBroadcasterSupport; import javax.management.ObjectName; + +import javax.servlet.FilterConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletContextAttributeListener; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import javax.servlet.ServletException; +import javax.servlet.ServletRequestAttributeListener; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpSessionAttributeListener; +import javax.servlet.http.HttpSessionListener; + import org.apache.naming.ContextBindings; import org.apache.naming.resources.BaseDirContext; import org.apache.naming.resources.FileDirContext; @@ -185,10 +192,17 @@ /** - * The set of instantiated application listener objects, in a one-to-one - * correspondence to the class names in <code>applicationListeners</code>. + * The set of instantiated application event listener objects</code>. + */ + private transient Object applicationEventListenersObjects[] = + new Object[0]; + + + /** + * The set of instantiated application lifecycle listener objects</code>. */ - private transient Object applicationListenersObjects[] = new Object[0]; + private transient Object applicationLifecycleListenersObjects[] = + new Object[0]; /** @@ -599,31 +613,52 @@ /** - * Return the set of initialized application listener objects, + * Return the set of initialized application event listener objects, * in the order they were specified in the web application deployment * descriptor, for this application. * * @exception IllegalStateException if this method is called before * this application has started, or after it has been stopped */ - public Object[] getApplicationListeners() { + public Object[] getApplicationEventListeners() { + return (applicationEventListenersObjects); + } - return (applicationListenersObjects); + /** + * Store the set of initialized application event listener objects, + * in the order they were specified in the web application deployment + * descriptor, for this application. + * + * @param listeners The set of instantiated listener objects. + */ + public void setApplicationEventListeners(Object listeners[]) { + applicationEventListenersObjects = listeners; } /** - * Store the set of initialized application listener objects, + * Return the set of initialized application lifecycle listener objects, * in the order they were specified in the web application deployment * descriptor, for this application. * - * @param listeners The set of instantiated listener objects. + * @exception IllegalStateException if this method is called before + * this application has started, or after it has been stopped */ - public void setApplicationListeners(Object listeners[]) { + public Object[] getApplicationLifecycleListeners() { + return (applicationEventListenersObjects); + } - applicationListenersObjects = listeners; + /** + * Store the set of initialized application lifecycle listener objects, + * in the order they were specified in the web application deployment + * descriptor, for this application. + * + * @param listeners The set of instantiated listener objects. + */ + public void setApplicationLifecycleListeners(Object listeners[]) { + applicationEventListenersObjects = listeners; } @@ -3482,13 +3517,30 @@ return (false); } + // Sort listeners in two arrays + ArrayList eventListeners = new ArrayList(); + ArrayList lifecycleListeners = new ArrayList(); + for (int i = 0; i < results.length; i++) { + if ((results[i] instanceof ServletContextAttributeListener) + || (results[i] instanceof ServletRequestAttributeListener) + || (results[i] instanceof ServletRequestListener)) { + eventListeners.add(results[i]); + } + if ((results[i] instanceof ServletContextListener) + || (results[i] instanceof HttpSessionListener)) { + lifecycleListeners.add(results[i]); + } + } + + setApplicationEventListeners(eventListeners.toArray()); + setApplicationLifecycleListeners(lifecycleListeners.toArray()); + // Send application start events if (log.isDebugEnabled()) log.debug("Sending application start events"); - setApplicationListeners(results); - Object instances[] = getApplicationListeners(); + Object instances[] = getApplicationLifecycleListeners(); if (instances == null) return (ok); ServletContextEvent event = @@ -3528,7 +3580,7 @@ log.debug("Sending application stop events"); boolean ok = true; - Object listeners[] = getApplicationListeners(); + Object listeners[] = getApplicationLifecycleListeners(); if (listeners == null) return (ok); ServletContextEvent event = @@ -3553,7 +3605,8 @@ ok = false; } } - setApplicationListeners(null); + setApplicationEventListeners(null); + setApplicationLifecycleListeners(null); return (ok); } 1.12 +5 -5 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContextValve.java Index: StandardContextValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContextValve.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- StandardContextValve.java 23 Jul 2003 01:13:49 -0000 1.11 +++ StandardContextValve.java 9 Aug 2003 19:04:29 -0000 1.12 @@ -224,7 +224,7 @@ throws IOException, ServletException { Object instances[] = - ((StandardContext) container).getApplicationListeners(); + ((Context) container).getApplicationEventListeners(); ServletRequestEvent event = null; 1.19 +8 -8 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java Index: StandardSession.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- StandardSession.java 8 Jul 2003 06:28:02 -0000 1.18 +++ StandardSession.java 9 Aug 2003 19:04:29 -0000 1.19 @@ -390,7 +390,7 @@ // Notify interested application event listeners Context context = (Context) manager.getContainer(); - Object listeners[] = context.getApplicationListeners(); + Object listeners[] = context.getApplicationLifecycleListeners(); if (listeners != null) { HttpSessionEvent event = new HttpSessionEvent(getSession()); @@ -655,7 +655,7 @@ // Notify interested application event listeners // FIXME - Assumes we call listeners in reverse order Context context = (Context) manager.getContainer(); - Object listeners[] = context.getApplicationListeners(); + Object listeners[] = context.getApplicationLifecycleListeners(); if (notify && (listeners != null)) { HttpSessionEvent event = new HttpSessionEvent(getSession()); @@ -1174,7 +1174,7 @@ // Notify interested application event listeners Context context = (Context) manager.getContainer(); - Object listeners[] = context.getApplicationListeners(); + Object listeners[] = context.getApplicationEventListeners(); if (listeners == null) return; for (int i = 0; i < listeners.length; i++) { @@ -1296,7 +1296,7 @@ // Notify interested application event listeners Context context = (Context) manager.getContainer(); - Object listeners[] = context.getApplicationListeners(); + Object listeners[] = context.getApplicationEventListeners(); if (listeners == null) return; for (int i = 0; i < listeners.length; i++) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]