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 Throwable { // NO OP } public void postInvoke(CircuitBreaker circuitBreaker) throws Throwable { resetFailureCount(); } public void onError(CircuitBreaker circuitBreaker, Throwable t) throws Throwable { int currentCount = failureCount.incrementAndGet(); int threshold = failureThreshold.get(); if(currentCount >= threshold) circuitBreaker.tripBreaker(); } private void resetFailureCount() { failureCount.set(0); } public String getName() { return "Closed"; } public int getFailureCount() { return failureCount.get(); } public int getThreshold() { return failureThreshold.get(); } }