You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2015/08/07 11:47:25 UTC
tapestry-5 git commit: TAP5-2486: make sure that IOOperation
descripions appear in the operations trace if they throw an IOException
#close
Repository: tapestry-5
Updated Branches:
refs/heads/master 4f67dc7d4 -> b20ed0fae
TAP5-2486: make sure that IOOperation descripions appear in the operations trace if they throw an IOException #close
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/b20ed0fa
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/b20ed0fa
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/b20ed0fa
Branch: refs/heads/master
Commit: b20ed0fae7da0394caaa1609aaf3d60dda9b086a
Parents: 4f67dc7
Author: Jochen Kemnade <jo...@eddyson.de>
Authored: Fri Aug 7 11:46:19 2015 +0200
Committer: Jochen Kemnade <jo...@eddyson.de>
Committed: Fri Aug 7 11:46:19 2015 +0200
----------------------------------------------------------------------
.../ioc/internal/OperationTrackerImpl.java | 18 ++++++++-
.../ioc/specs/OperationTrackerSpec.groovy | 42 ++++++++++++++++++++
2 files changed, 59 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b20ed0fa/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/OperationTrackerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/OperationTrackerImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/OperationTrackerImpl.java
index 6bc462b..f523074 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/OperationTrackerImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/OperationTrackerImpl.java
@@ -119,6 +119,9 @@ public class OperationTrackerImpl implements OperationTracker
} catch (Error ex)
{
return handleError(ex);
+ } catch (IOException ex)
+ {
+ return logAndRethrow(ex);
} finally
{
handleFinally();
@@ -128,7 +131,6 @@ public class OperationTrackerImpl implements OperationTracker
private void handleFinally()
{
operations.pop();
-
// We've finally backed out of the operation stack ... but there may be more to come!
if (operations.isEmpty())
@@ -187,6 +189,20 @@ public class OperationTrackerImpl implements OperationTracker
throw ex;
}
+ private <T> T logAndRethrow(IOException ex) throws IOException
+ {
+ if (!logged)
+ {
+ String[] trace = log(ex);
+
+ logged = true;
+
+ throw new OperationException(ex, trace);
+ }
+
+ throw ex;
+ }
+
private String[] log(Throwable ex)
{
logger.error(ExceptionUtils.toMessage(ex));
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b20ed0fa/tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy
new file mode 100644
index 0000000..ba8c036
--- /dev/null
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy
@@ -0,0 +1,42 @@
+package ioc.specs
+
+import org.apache.tapestry5.ioc.OperationTracker
+import org.apache.tapestry5.ioc.internal.DefaultModuleDefImpl
+import org.apache.tapestry5.ioc.internal.LoggerSourceImpl
+import org.apache.tapestry5.ioc.internal.OperationException;
+import org.apache.tapestry5.ioc.internal.OperationTrackerImpl;
+import org.apache.tapestry5.ioc.internal.RegistryImpl
+import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl
+import org.apache.tapestry5.ioc.modules.TapestryIOCModule
+import org.apache.tapestry5.ioc.services.OperationTrackedModule
+import org.apache.tapestry5.ioc.services.OperationTrackedService
+import org.apache.tapestry5.ioc.services.PlasticProxyFactory
+import org.slf4j.LoggerFactory;
+
+import spock.lang.AutoCleanup
+import spock.lang.Issue;
+import spock.lang.Shared
+import spock.lang.Specification
+
+class OperationTrackerSpec extends Specification {
+
+
+ @Issue('TAP5-2486')
+ def "IOOperation descriptions are reported"() {
+ setup:
+ def logger = LoggerFactory.getLogger(OperationTracker)
+ def operationTracker = new OperationTrackerImpl(logger)
+
+ when:
+ operationTracker.perform 'Throwing exception', {
+ throw new IOException()
+ }
+
+ then:
+ OperationException ex = thrown()
+ ex.trace == ['Throwing exception']
+
+ }
+
+
+}