You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/09/16 01:11:12 UTC

svn commit: r1171317 - in /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal: services/EventImpl.java structure/ComponentPageElementImpl.java structure/RenderPhaseEvent.java structure/RenderPhaseEventHandler.java

Author: hlship
Date: Thu Sep 15 23:11:12 2011
New Revision: 1171317

URL: http://svn.apache.org/viewvc?rev=1171317&view=rev
Log:
Don't reuse RenderPhaseEvents during the same request, instead instantiate them new each time

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EventImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEvent.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEventHandler.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EventImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EventImpl.java?rev=1171317&r1=1171316&r2=1171317&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EventImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EventImpl.java Thu Sep 15 23:11:12 2011
@@ -100,10 +100,4 @@ public class EventImpl implements Event
     {
         return methodDescription;
     }
-
-    public void reset()
-    {
-        aborted = false;
-        methodDescription = null;
-    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java?rev=1171317&r1=1171316&r2=1171317&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java Thu Sep 15 23:11:12 2011
@@ -182,7 +182,7 @@ public class ComponentPageElementImpl ex
 
             push(queue, event.getResult(), beginRenderPhase, cleanupRenderPhase);
 
-            event.reset();
+            event.enqueueSavedRenderCommands();
         }
     }
 
@@ -211,7 +211,7 @@ public class ComponentPageElementImpl ex
             push(queue, afterRenderPhase);
             push(queue, event.getResult(), beforeRenderTemplatePhase, null);
 
-            event.reset();
+            event.enqueueSavedRenderCommands();
         }
     }
 
@@ -263,7 +263,7 @@ public class ComponentPageElementImpl ex
             if (event.getResult())
                 pushElements(queue, template);
 
-            event.reset();
+            event.enqueueSavedRenderCommands();
         }
     }
 
@@ -310,7 +310,7 @@ public class ComponentPageElementImpl ex
             if (event.getResult() && bodyBlock != null)
                 queue.push(bodyBlock);
 
-            event.reset();
+            event.enqueueSavedRenderCommands();
         }
     }
 
@@ -335,7 +335,7 @@ public class ComponentPageElementImpl ex
 
             push(queue, event.getResult(), null, beforeRenderBodyPhase);
 
-            event.reset();
+            event.enqueueSavedRenderCommands();
         }
     }
 
@@ -359,7 +359,7 @@ public class ComponentPageElementImpl ex
 
             push(queue, event.getResult(), null, beforeRenderTemplatePhase);
 
-            event.reset();
+            event.enqueueSavedRenderCommands();
         }
     }
 
@@ -386,7 +386,7 @@ public class ComponentPageElementImpl ex
 
             push(queue, event.getResult(), cleanupRenderPhase, beginRenderPhase);
 
-            event.reset();
+            event.enqueueSavedRenderCommands();
         }
     }
 
@@ -410,7 +410,7 @@ public class ComponentPageElementImpl ex
 
             push(queue, event.getResult(), null, setupRenderPhase);
 
-            event.reset();
+            event.enqueueSavedRenderCommands();
         }
     }
 
@@ -499,8 +499,6 @@ public class ComponentPageElementImpl ex
 
     private final Page page;
 
-    private final PerThreadValue<RenderPhaseEvent> renderPhaseEventValue;
-
     private final PerThreadValue<Boolean> renderingValue;
 
     // should be okay since it's a shadow service object
@@ -562,7 +560,6 @@ public class ComponentPageElementImpl ex
 
         eventLogger = elementResources.getEventLogger(coreResources.getLogger());
 
-        renderPhaseEventValue = elementResources.createPerThreadValue();
         renderingValue = elementResources.createPerThreadValue();
 
         page.addLifecycleListener(new PageLifecycleAdapter()
@@ -1263,20 +1260,7 @@ public class ComponentPageElementImpl ex
 
     protected RenderPhaseEvent createRenderEvent(RenderQueue queue)
     {
-        RenderPhaseEvent result = renderPhaseEventValue.get();
-
-        if (result != null)
-            return result;
-
-        // Create a per-thread value to use until the end of the render.
-        // This assumes that the queue will not change during the current request,
-        // which should be valid.
-
-        result = new RenderPhaseEvent(new RenderPhaseEventHandler(queue), eventLogger, elementResources);
-
-        renderPhaseEventValue.set(result);
-
-        return result;
+        return new RenderPhaseEvent(new RenderPhaseEventHandler(queue), eventLogger, elementResources);
     }
 
     boolean isRenderTracingEnabled()

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEvent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEvent.java?rev=1171317&r1=1171316&r2=1171317&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEvent.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEvent.java Thu Sep 15 23:11:12 2011
@@ -30,11 +30,13 @@ public class RenderPhaseEvent extends Ev
 
     }
 
-    public void reset()
+    /**
+     * Delegates to {@link org.apache.tapestry5.internal.structure.RenderPhaseEventHandler#enqueueSavedRenderCommands()}, to queue up any
+     * render commands returned from invoked event handler methods.
+     */
+    public void enqueueSavedRenderCommands()
     {
-        super.reset();
-
-        handler.reset();
+        handler.enqueueSavedRenderCommands();
     }
 
     public boolean getResult()

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEventHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEventHandler.java?rev=1171317&r1=1171316&r2=1171317&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEventHandler.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/RenderPhaseEventHandler.java Thu Sep 15 23:11:12 2011
@@ -1,4 +1,4 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,9 +14,6 @@
 
 package org.apache.tapestry5.internal.structure;
 
-import java.util.Arrays;
-import java.util.List;
-
 import org.apache.tapestry5.ComponentEventCallback;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.Renderable;
@@ -24,10 +21,13 @@ import org.apache.tapestry5.ioc.internal
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * Used by {@link org.apache.tapestry5.internal.structure.ComponentPageElementImpl} to track the results of invoking the
  * component methods for a render phase event.
- * 
+ *
  * @since 5.0.19
  */
 class RenderPhaseEventHandler implements ComponentEventCallback
@@ -48,7 +48,7 @@ class RenderPhaseEventHandler implements
         return result;
     }
 
-    void reset()
+    void enqueueSavedRenderCommands()
     {
         if (commands != null)
         {
@@ -56,11 +56,18 @@ class RenderPhaseEventHandler implements
                 renderQueue.push(command);
         }
 
-        result = true;
-
-        commands = null;
     }
 
+    /**
+     * Handles a result (a return value from an event handler method). The result
+     * must be Boolean, {@link RenderCommand} or {@link Renderable}.  For the latter two types, the result
+     * is converted to a {@link RenderCommand} and added to an internal list; the commands in the list
+     * are pushed onto the {@link RenderQueue} at the end of the render phase, when {@link #enqueueSavedRenderCommands()}} is invoked.
+     *
+     * @param result the result value returned from the event handler method
+     * @return true if the event is aborted (a Boolean), false if event processing should continue (other types)
+     * @throws RuntimeException for any other type
+     */
     public boolean handleResult(Object result)
     {
         if (result instanceof Boolean)