package dk.thoerup.curcuitbreaker; import java.util.concurrent.atomic.*; public final class ClosedState implements CircuitBreakerState { final AtomicInteger failureCount = new AtomicInteger(0); final AtomicInteger failureThreshold = new AtomicInteger(0); public void setThreshold(int threshold) { failureThreshold.set( threshold ); } public void preInvoke(CircuitBreaker circuitBreaker) throws Exception { // NO OP } public void postInvoke(CircuitBreaker circuitBreaker) throws Exception { resetFailureCount(); } public void onError(CircuitBreaker circuitBreaker, Exception t) throws Exception { int currentCount = failureCount.incrementAndGet(); int threshold = failureThreshold.get(); if(currentCount >= threshold) circuitBreaker.tripBreaker(); } public void resetFailureCount() { failureCount.set(0); } public String getName() { return "Closed"; } public int getFailureCount() { return failureCount.get(); } public int getThreshold() { return failureThreshold.get(); } }