Hi,
I've just wrote a unit test to verify this bug has fixed (http://issues.apache.org/bugzilla/show_bug.cgi?id=33463). But looking at the code in StandardContext:
4276 // Stop our application listeners
4277 listenerStop();
4278
4279 // Clear all application-originated servlet context attribut es
4280 if (context != null)
4281 context.clearAttributes();
I doubt it will works since in listenerStop, we set all the listeners to null:
3711 setApplicationEventListeners(null); 3712 setApplicationLifecycleListeners(null); 3713 3714 return (ok);
So when we call clearAttributes in ApplicationContext:
691 // Notify interested application event listeners
692 Object listeners[] = context.getApplicationEventListeners();
693 if ((listeners == null) || (listeners.length == 0))
694 return;
695 ServletContextAttributeEvent event =
696 new ServletContextAttributeEvent(context.getServletContext(),
697 name, value);
The listeners[] are always null. Should the clearAttributes be called before? It was like that before but I don't understand why we moved the call after listenerStop().
Yes, it is fixed. The bug is that the attributes were cleared before destroy was called.
No attribute listner should to be called on stop, and the original bug was actually invalid.
Also, there is a couple of Catalina's private attributes available to the listener that should'nt be in StandardContext:
4072 // We put the resources into the servlet context 4073 if (ok) 4074 getServletContext().setAttribute 4075 (Globals.RESOURCES_ATTR, getResources());
Should we add:
context.setAttributeReadOnly(Globals.RESOURCES_ATTR);
so this way the listener doesn't get notified with those read only attribute?
I don't see the attribute replaced events as an issue, personally.
Rémy
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]