You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/06/14 12:00:57 UTC
svn commit: r1493015 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/catalina/core/ApplicationContext.java
java/org/apache/catalina/core/StandardContext.java
Author: markt
Date: Fri Jun 14 10:00:57 2013
New Revision: 1493015
URL: http://svn.apache.org/r1493015
Log:
As per review from voiletagg, restrictions from in Servlet 3.0, section 4.0 apply to listeners added through the pluggability API as well as via TLDs.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1493011,1493013-1493014
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=1493015&r1=1493014&r2=1493015&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java Fri Jun 14 10:00:57 2013
@@ -1329,6 +1329,8 @@ public class ApplicationContext
if (t instanceof HttpSessionListener
|| (t instanceof ServletContextListener &&
newServletContextListenerAllowed)) {
+ // Add listener directly to the list of instances rather than to
+ // the list of class names.
context.addApplicationLifecycleListener(t);
match = true;
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1493015&r1=1493014&r2=1493015&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java Fri Jun 14 10:00:57 2013
@@ -242,8 +242,9 @@ public class StandardContext extends Con
/**
- * The set of application listeners configured for this application, in the
- * order they were encountered in the web.xml file.
+ * The set of application listener class names configured for this
+ * application, in the order they were encountered in the resulting merged
+ * web.xml file.
*/
private ApplicationListener applicationListeners[] =
new ApplicationListener[0];
@@ -252,14 +253,18 @@ public class StandardContext extends Con
/**
- * The set of instantiated application event listener objects</code>.
+ * The set of instantiated application event listener objects. Note that
+ * SCIs and other code may use the pluggability APIs to add listener
+ * instances directly to this list before the application starts.
*/
private Object applicationEventListenersObjects[] =
new Object[0];
/**
- * The set of instantiated application lifecycle listener objects</code>.
+ * The set of instantiated application lifecycle listener objects. Note that
+ * SCIs and other code may use the pluggability APIs to add listener
+ * instances directly to this list before the application starts.
*/
private Object applicationLifecycleListenersObjects[] =
new Object[0];
@@ -4839,7 +4844,7 @@ public class StandardContext extends Con
ApplicationListener listeners[] = applicationListeners;
Object results[] = new Object[listeners.length];
boolean ok = true;
- Set<Object> tldListeners = new HashSet<Object>();
+ Set<Object> noPluggabilityListeners = new HashSet<Object>();
for (int i = 0; i < results.length; i++) {
if (getLogger().isDebugEnabled())
getLogger().debug(" Configuring event listener class '" +
@@ -4849,7 +4854,7 @@ public class StandardContext extends Con
results[i] = instanceManager.newInstance(
listener.getClassName());
if (listener.isPluggabilityBlocked()) {
- tldListeners.add(results[i]);
+ noPluggabilityListeners.add(results[i]);
}
} catch (Throwable t) {
t = ExceptionUtils.unwrapInvocationTargetException(t);
@@ -4881,13 +4886,20 @@ public class StandardContext extends Con
}
}
- //Listeners may have been added by ServletContextInitializers. Put them after the ones we know about.
+ // Listener instances may have been added directly to this Context by
+ // ServletContextInitializers and other code via the pluggability APIs.
+ // Put them these listeners after the ones defined in web.xml and/or
+ // annotations then overwrite the list of instances with the new, full
+ // list.
for (Object eventListener: getApplicationEventListeners()) {
eventListeners.add(eventListener);
}
setApplicationEventListeners(eventListeners.toArray());
for (Object lifecycleListener: getApplicationLifecycleListeners()) {
lifecycleListeners.add(lifecycleListener);
+ if (lifecycleListener instanceof ServletContextListener) {
+ noPluggabilityListeners.add(lifecycleListener);
+ }
}
setApplicationLifecycleListeners(lifecycleListeners.toArray());
@@ -4908,7 +4920,7 @@ public class StandardContext extends Con
ServletContextEvent event =
new ServletContextEvent(getServletContext());
ServletContextEvent tldEvent = null;
- if (tldListeners.size() > 0) {
+ if (noPluggabilityListeners.size() > 0) {
tldEvent = new ServletContextEvent(new NoPluggabilityServletContext(
getServletContext()));
}
@@ -4921,7 +4933,7 @@ public class StandardContext extends Con
(ServletContextListener) instances[i];
try {
fireContainerEvent("beforeContextInitialized", listener);
- if (tldListeners.contains(listener)) {
+ if (noPluggabilityListeners.contains(listener)) {
listener.contextInitialized(tldEvent);
} else {
listener.contextInitialized(event);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1493015 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/catalina/core/ApplicationContext.java java/org/apache/catalina/core/StandardContext.java
Posted by Konstantin Kolinko <kn...@gmail.com>.
2013/6/14 <ma...@apache.org>:
> Author: markt
> Date: Fri Jun 14 10:00:57 2013
> New Revision: 1493015
>
> URL: http://svn.apache.org/r1493015
> Log:
> As per review from voiletagg, restrictions from in Servlet 3.0, section 4.0 apply to listeners added through the pluggability API as well as via TLDs.
>
> Modified:
> tomcat/tc7.0.x/trunk/ (props changed)
> tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java
> tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
>
The LocalStrings message added in http://svn.apache.org/r1492331
now becomes too specific as it does not reflect this change.
I mean:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties?view=diff&r1=1492330&r2=1492331&pathrev=1492331
tldListenerServletContext.notAllowed=Section 4.4 of the Servlet 3.0
specification does not permit this method to be called from a
ServletContextListener that is defined in a TLD
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org