From 2959db8631493bed81f483d0157c7a90c6f95594 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Thu, 13 Sep 2012 17:45:36 -0400 Subject: [PATCH] INT-2748 Change CircuitBreaker Exception Previously, when the breaker was open, it threw a MessagingException. This was not wrapped so normal error-channel processing 'payload.cause.message' failed because the cause was null. Change the exception to a new private CircuitBreakerOpenException. --- .../advice/RequestHandlerCircuitBreakerAdvice.java | 12 ++++++++++-- .../handler/advice/AdvisedMessageHandlerTests.java | 6 +++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/advice/RequestHandlerCircuitBreakerAdvice.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/advice/RequestHandlerCircuitBreakerAdvice.java index 1def2a8aa1..926c8f019c 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/advice/RequestHandlerCircuitBreakerAdvice.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/advice/RequestHandlerCircuitBreakerAdvice.java @@ -20,7 +20,6 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; import org.springframework.integration.Message; -import org.springframework.integration.MessagingException; /** * A circuit breaker that stops calling a failing service after threshold @@ -56,7 +55,7 @@ public class RequestHandlerCircuitBreakerAdvice extends AbstractRequestHandlerAd } if (metadata.getFailures().get() >= this.threshold && System.currentTimeMillis() - metadata.getLastFailure() < this.halfOpenAfter) { - throw new MessagingException("Circuit Breaker is Open for " + target); + throw new CircuitBreakerOpenException("Circuit Breaker is Open for " + target); } try { Object result = callback.execute(); @@ -92,4 +91,13 @@ public class RequestHandlerCircuitBreakerAdvice extends AbstractRequestHandlerAd } } + private class CircuitBreakerOpenException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public CircuitBreakerOpenException(String message) { + super(message); + } + } + } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/handler/advice/AdvisedMessageHandlerTests.java b/spring-integration-core/src/test/java/org/springframework/integration/handler/advice/AdvisedMessageHandlerTests.java index 23a1b50dfa..98382f6c40 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/handler/advice/AdvisedMessageHandlerTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/handler/advice/AdvisedMessageHandlerTests.java @@ -304,7 +304,7 @@ public class AdvisedMessageHandlerTests { fail("Expected failure"); } catch (Exception e) { - assertEquals("Circuit Breaker is Open for baz", e.getMessage()); + assertEquals("Circuit Breaker is Open for baz", e.getCause().getMessage()); } Thread.sleep(100); try { @@ -319,7 +319,7 @@ public class AdvisedMessageHandlerTests { fail("Expected failure"); } catch (Exception e) { - assertEquals("Circuit Breaker is Open for baz", e.getMessage()); + assertEquals("Circuit Breaker is Open for baz", e.getCause().getMessage()); } Thread.sleep(100); doFail.set(false); @@ -344,7 +344,7 @@ public class AdvisedMessageHandlerTests { fail("Expected failure"); } catch (Exception e) { - assertEquals("Circuit Breaker is Open for baz", e.getMessage()); + assertEquals("Circuit Breaker is Open for baz", e.getCause().getMessage()); } }