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)