Author: fmeschbe
Date: Thu Aug 12 18:15:41 2010
New Revision: 984893

URL: http://svn.apache.org/viewvc?rev=984893&view=rev
Log:
SLING-1649 Implement the release() method on the tag handlers to clear the 
fields to null once the tag handlers are released but kept in a pool.

Modified:
    
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AbstractDispatcherTagHandler.java
    
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java

Modified: 
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AbstractDispatcherTagHandler.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AbstractDispatcherTagHandler.java?rev=984893&r1=984892&r2=984893&view=diff
==============================================================================
--- 
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AbstractDispatcherTagHandler.java
 (original)
+++ 
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AbstractDispatcherTagHandler.java
 Thu Aug 12 18:15:41 2010
@@ -148,14 +148,7 @@ public abstract class AbstractDispatcher
 
     public void setPageContext(PageContext pageContext) {
         super.setPageContext(pageContext);
-
-        // init local fields, since tag might be reused
-        resource = null;
-        resourceType = null;
-        replaceSelectors = null;
-        addSelectors = null;
-        replaceSuffix = null;
-        path = null;
+               clear();
     }
 
     public void setResource(Resource rsrc) {
@@ -201,4 +194,19 @@ public abstract class AbstractDispatcher
                 getResourceType());
         }
     }
+
+    @Override
+    public void release() {
+        clear();
+        super.release();
+    }
+
+    private void clear() {
+        resource = null;
+        resourceType = null;
+        replaceSelectors = null;
+        addSelectors = null;
+        replaceSuffix = null;
+        path = null;
+    }
 }

Modified: 
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java?rev=984893&r1=984892&r2=984893&view=diff
==============================================================================
--- 
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java
 (original)
+++ 
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java
 Thu Aug 12 18:15:41 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.scripting.jsp.taglib;
 
+import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.TagSupport;
 
 import org.apache.sling.api.resource.Resource;
@@ -146,6 +147,12 @@ public class DefineObjectsTag extends Ta
 
     // --------------------------< setter methonds 
>----------------------------
 
+    @Override
+    public void setPageContext(PageContext pageContext) {
+        super.setPageContext(pageContext);
+        clear();
+    }
+
     public void setRequestName(String requestName) {
         this.requestName = requestName;
     }
@@ -177,4 +184,35 @@ public class DefineObjectsTag extends Ta
     public void setBindingsName(String name) {
         this.bindingsName = name;
     }
+
+    @Override
+    public void release() {
+        clear();
+        super.release();
+    }
+
+    private void clear() {
+
+        // remove all attributes set on the page context to cleanup
+        if (pageContext != null) {
+            pageContext.removeAttribute(requestName);
+            pageContext.removeAttribute(responseName);
+            pageContext.removeAttribute(resourceName);
+            pageContext.removeAttribute(resourceResolverName);
+            pageContext.removeAttribute(slingName);
+            pageContext.removeAttribute(logName);
+            pageContext.removeAttribute(nodeName);
+            pageContext.removeAttribute(bindingsName);
+        }
+
+        // reset fields
+        requestName = DEFAULT_REQUEST_NAME;
+        responseName = DEFAULT_RESPONSE_NAME;
+        resourceName = DEFAULT_RESOURCE_NAME;
+        nodeName = DEFAULT_NODE_NAME;
+        slingName = DEFAULT_SLING_NAME;
+        logName = DEFAULT_LOG_NAME;
+        bindingsName = DEFAULT_BINDINGS_NAME;
+        resourceResolverName = DEFAULT_RESOURCE_RESOLVER_NAME;
+    }
 }


Reply via email to