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 2006/09/02 19:57:47 UTC

svn commit: r439626 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/internal/services/ main/java/org/apache/tapestry/internal/structure/ main/resources/org/apache/tapestry/internal/services/ test/java/org/apache/tapestry...

Author: hlship
Date: Sat Sep  2 10:57:47 2006
New Revision: 439626

URL: http://svn.apache.org/viewvc?rev=439626&view=rev
Log:
Remove excessively verbose logging from RenderQueueImpl.
Add exception reporting to RenderQueueImpl, along with some tests.
Add toString() method to PageImpl and ReflectiveInstantiator.

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java
Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ReflectiveInstantiator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ReflectiveInstantiator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ReflectiveInstantiator.java?rev=439626&r1=439625&r2=439626&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ReflectiveInstantiator.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ReflectiveInstantiator.java Sat Sep  2 10:57:47 2006
@@ -49,6 +49,12 @@
 
     }
 
+    @Override
+    public String toString()
+    {
+        return String.format("ReflectiveInstantiator[%s]", _constructor);
+    }
+
     static Constructor findConstructor(Class instanceClass, int parameterCount)
     {
         for (Constructor c : instanceClass.getConstructors())

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java?rev=439626&r1=439625&r2=439626&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java Sat Sep  2 10:57:47 2006
@@ -44,16 +44,25 @@
 
     public void run(MarkupWriter writer)
     {
-        boolean debug = _log.isDebugEnabled();
+        RenderCommand command = null;
 
-        while (!_queue.isEmpty())
+        // Seemed to make sense to use one try finally around the whole process, rather than
+        // around each call to render() since the end result (in a failure scenario) is the same.
+
+        try
         {
-            RenderCommand command = _queue.remove(_queue.size() - 1);
+            while (!_queue.isEmpty())
+            {
+                command = _queue.remove(_queue.size() - 1);
 
-            if (debug)
-                _log.debug("RenderCommand: " + command);
+                command.render(writer, this);
+            }
+        }
+        catch (RuntimeException ex)
+        {
+            _log.error(ServicesMessages.renderQueueError(command, ex), ex);
 
-            command.render(writer, this);
+            throw ex;
         }
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java?rev=439626&r1=439625&r2=439626&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java Sat Sep  2 10:57:47 2006
@@ -24,6 +24,7 @@
 import org.apache.tapestry.internal.MessagesImpl;
 import org.apache.tapestry.internal.annotations.Utility;
 import org.apache.tapestry.internal.ioc.IOCUtilities;
+import org.apache.tapestry.runtime.RenderCommand;
 import org.apache.tapestry.services.MethodSignature;
 
 @Utility
@@ -126,5 +127,10 @@
     static String methodCompileError(MethodSignature signature, String methodBody, Throwable cause)
     {
         return MESSAGES.format("method-compile-error", signature, methodBody, cause);
+    }
+
+    static String renderQueueError(RenderCommand command, Throwable cause)
+    {
+        return MESSAGES.format("render-queue-error", command, cause);
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java?rev=439626&r1=439625&r2=439626&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java Sat Sep  2 10:57:47 2006
@@ -39,6 +39,12 @@
         _locale = locale;
     }
 
+    @Override
+    public String toString()
+    {
+        return String.format("Page[%s %s]", _name, _locale);
+    }
+
     public String getName()
     {
         return _name;

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties?rev=439626&r1=439625&r2=439626&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties Sat Sep  2 10:57:47 2006
@@ -32,4 +32,5 @@
 template-parse-error=Failure parsing template %s: %s
 content-inside-body-not-allowed=Content inside a Tapestry body element is not allowed (at %s). The content has been ignored.
 may-not-nest-elements-inside-body=Element '%s' is nested within a Tapestry body element, which is not allowed.
-method-compile-error=Error compiling method %s (%s): %s
\ No newline at end of file
+method-compile-error=Error compiling method %s (%s): %s
+render-queue-error=Render queue error in %s: %s
\ No newline at end of file

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java?rev=439626&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java Sat Sep  2 10:57:47 2006
@@ -0,0 +1,100 @@
+// Copyright 2006 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.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.internal.services;
+
+import org.apache.commons.logging.Log;
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.runtime.RenderCommand;
+import org.apache.tapestry.runtime.RenderQueue;
+import org.testng.annotations.Test;
+
+public class RenderQueueImplTest extends InternalBaseTestCase
+{
+    @Test
+    public void run_commands()
+    {
+        final RenderCommand command2 = newMock(RenderCommand.class);
+        RenderCommand command1 = new RenderCommand()
+        {
+            public void render(MarkupWriter writer, RenderQueue queue)
+            {
+                queue.push(command2);
+            }
+        };
+
+        Log log = newLog();
+        MarkupWriter writer = newMarkupWriter();
+        RenderQueueImpl queue = new RenderQueueImpl(log);
+
+        command2.render(writer, queue);
+
+        replay();
+
+        queue.push(command1);
+        queue.run(writer);
+
+        verify();
+    }
+
+    @Test
+    public void command_failed()
+    {
+        final RuntimeException t = new RuntimeException("Oops.");
+
+        RenderCommand rc = new RenderCommand()
+        {
+
+            public void render(MarkupWriter writer, RenderQueue queue)
+            {
+                throw t;
+            }
+
+            @Override
+            public String toString()
+            {
+                return "FailedCommand";
+            }
+        };
+
+        Log log = newLog();
+        MarkupWriter writer = newMarkupWriter();
+
+        log.error("Render queue error in FailedCommand: Oops.", t);
+
+        replay();
+
+        RenderQueueImpl queue = new RenderQueueImpl(log);
+
+        queue.push(rc);
+
+        try
+        {
+            queue.run(writer);
+            unreachable();
+        }
+        catch (RuntimeException ex)
+        {
+            assertSame(ex, t);
+        }
+
+        verify();
+    }
+
+    protected final MarkupWriter newMarkupWriter()
+    {
+        return newMock(MarkupWriter.class);
+    }
+}