Author: kkolinko
Date: Tue Jun 12 16:58:38 2012
New Revision: 1349439

URL: http://svn.apache.org/viewvc?rev=1349439&view=rev
Log:
Review of Context.getApplicationLifecycleListeners() calls:
Do less work if there are no listeners or 'notify' flag is false.
I do not expect much effect from this change, because implementation of 
Context.getApplicationLifecycleListeners() in StandardContext is lightweight: 
it returns a field value. Note that by default it returns an empty array, not 
null.

Modified:
    tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
    tomcat/trunk/java/org/apache/catalina/session/StandardSession.java

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1349439&r1=1349438&r2=1349439&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Tue Jun 12 
16:58:38 2012
@@ -4658,7 +4658,7 @@ public class StandardContext extends Con
         context.setNewServletContextListenerAllowed(false);
 
         Object instances[] = getApplicationLifecycleListeners();
-        if (instances == null)
+        if (instances == null || instances.length == 0)
             return (ok);
         ServletContextEvent event =
           new ServletContextEvent(getServletContext());
@@ -4699,7 +4699,7 @@ public class StandardContext extends Con
 
         boolean ok = true;
         Object listeners[] = getApplicationLifecycleListeners();
-        if (listeners != null) {
+        if (listeners != null && listeners.length > 0) {
             ServletContextEvent event =
                 new ServletContextEvent(getServletContext());
             for (int i = 0; i < listeners.length; i++) {

Modified: tomcat/trunk/java/org/apache/catalina/session/StandardSession.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/StandardSession.java?rev=1349439&r1=1349438&r2=1349439&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/StandardSession.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/session/StandardSession.java Tue Jun 
12 16:58:38 2012
@@ -402,7 +402,7 @@ public class StandardSession implements 
         // Notify interested application event listeners
         Context context = (Context) manager.getContainer();
         Object listeners[] = context.getApplicationLifecycleListeners();
-        if (listeners != null) {
+        if (listeners != null && listeners.length > 0) {
             HttpSessionEvent event =
                 new HttpSessionEvent(getSession());
             for (int i = 0; i < listeners.length; i++) {
@@ -770,32 +770,34 @@ public class StandardSession implements 
                 }
             }
             try {
-                Object listeners[] = 
context.getApplicationLifecycleListeners();
-                if (notify && (listeners != null)) {
-                    HttpSessionEvent event =
-                        new HttpSessionEvent(getSession());
-                    for (int i = 0; i < listeners.length; i++) {
-                        int j = (listeners.length - 1) - i;
-                        if (!(listeners[j] instanceof HttpSessionListener))
-                            continue;
-                        HttpSessionListener listener =
-                            (HttpSessionListener) listeners[j];
-                        try {
-                            
context.fireContainerEvent("beforeSessionDestroyed",
-                                    listener);
-                            listener.sessionDestroyed(event);
-                            context.fireContainerEvent("afterSessionDestroyed",
-                                    listener);
-                        } catch (Throwable t) {
-                            ExceptionUtils.handleThrowable(t);
+                if (notify) {
+                    Object listeners[] = 
context.getApplicationLifecycleListeners();
+                    if (listeners != null && listeners.length > 0) {
+                        HttpSessionEvent event =
+                            new HttpSessionEvent(getSession());
+                        for (int i = 0; i < listeners.length; i++) {
+                            int j = (listeners.length - 1) - i;
+                            if (!(listeners[j] instanceof HttpSessionListener))
+                                continue;
+                            HttpSessionListener listener =
+                                (HttpSessionListener) listeners[j];
                             try {
-                                context.fireContainerEvent(
-                                        "afterSessionDestroyed", listener);
-                            } catch (Exception e) {
-                                // Ignore
+                                
context.fireContainerEvent("beforeSessionDestroyed",
+                                        listener);
+                                listener.sessionDestroyed(event);
+                                
context.fireContainerEvent("afterSessionDestroyed",
+                                        listener);
+                            } catch (Throwable t) {
+                                ExceptionUtils.handleThrowable(t);
+                                try {
+                                    context.fireContainerEvent(
+                                            "afterSessionDestroyed", listener);
+                                } catch (Exception e) {
+                                    // Ignore
+                                }
+                                manager.getContainer().getLogger().error
+                                    
(sm.getString("standardSession.sessionEvent"), t);
                             }
-                            manager.getContainer().getLogger().error
-                                (sm.getString("standardSession.sessionEvent"), 
t);
                         }
                     }
                 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to