package net.greencoding.thysdrus.circuitbreaker.core.handler;
import net.greencoding.thysdrus.circuitbreaker.core.handler.exception.CircuitBreakerMethodExecutionException;
import net.greencoding.thysdrus.circuitbreaker.core.model.CircuitBreaker;
import org.aspectj.lang.ProceedingJoinPoint;
/**
*
* CircuitBreakerHandler handles the flow and the CB status transitions.
*
* @author Nabil Ben Said (nabil.ben.said@gmail.com)
*
*/
public interface CircuitBreakerHandler {
/**
* handles the method invocation passed in the ProceedingJoinPoint with the surrounding Circuit Breaker for this method.
* @param pjp PrceedingJoinPoint
* @param circuitBreaker the circuitBreaker surrounding this method invocation.
* @return
* @throws CircuitBreakerMethodExecutionException which includes the real exception while method invocation as cause.
*/
public MethodInvocationResult handleMethodInvocation(ProceedingJoinPoint pjp, CircuitBreaker circuitBreaker);
public MethodInvocationResult handleMethodInvocation(ProceedingJoinPoint pjp, String circuitBreakerKey);
public void registerCircuitBreaker(CircuitBreaker circuitBreaker);
}