Author: craigmcc
Date: Fri Sep 29 11:20:32 2006
New Revision: 451376
URL: http://svn.apache.org/viewvc?view=rev&rev=451376
Log:
Reduce the set of request scoped beans that are forcibly removed in
requestDestroyed(). In theory this should not be necessary, because the
container is supposed to call requestDestroyed() only *after* all
request processing has been completed. Alas, this is apparantly not
true in all cases. Therefore, we should only delete instances for which
we are going to create a destroy() callback for (AbstractRequestBean and
ViewController).
Based on a patch by Mario Ivankovits.
SHALE-296
Modified:
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java
Modified:
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java?view=diff&rev=451376&r1=451375&r2=451376
==============================================================================
---
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java
(original)
+++
shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java
Fri Sep 29 11:20:32 2006
@@ -26,6 +26,7 @@
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
+import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
@@ -498,13 +499,17 @@
tiger.requestDestroyed(event);
}
- // Remove any AbstractRequestBean attributes,
+ // Remove any AbstractRequestBean or ViewController attributes,
// which will trigger an attributeRemoved event
List list = new ArrayList();
- Enumeration names = event.getServletRequest().getAttributeNames();
+ ServletRequest request = event.getServletRequest();
+ Enumeration names = request.getAttributeNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
- list.add(name);
+ Object value = request.getAttribute(name);
+ if ((value instanceof AbstractRequestBean) || (value instanceof
ViewController)) {
+ list.add(name);
+ }
}
Iterator keys = list.iterator();
while (keys.hasNext()) {