1 package net.secodo.jcircuitbreaker.breakhandler.impl;
2
3 import java.util.concurrent.Callable;
4
5 import net.secodo.jcircuitbreaker.breaker.CircuitBreaker;
6 import net.secodo.jcircuitbreaker.breaker.execution.ExecutionContext;
7 import net.secodo.jcircuitbreaker.breakhandler.BreakHandler;
8 import net.secodo.jcircuitbreaker.breakhandler.OnePerExecutionHandlerFactory;
9 import net.secodo.jcircuitbreaker.breakhandler.helper.InstantiationHelper;
10 import net.secodo.jcircuitbreaker.task.Task;
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class ReusableRetryHandler<R> implements OnePerExecutionHandlerFactory<R> {
25 private static final String EXECUTION_CONTEXT_PARAM_NAME = ReusableRetryHandler.class.getSimpleName() +
26 "_created_handler";
27
28 private final int maxNumberOfAttempts;
29
30 public ReusableRetryHandler(int maxNumberOfAttempts) {
31 this.maxNumberOfAttempts = maxNumberOfAttempts;
32 }
33
34 @Override
35 public BreakHandler<R> createNewHandler(Task<R> task, ExecutionContext<R> executionContext) {
36
37 return InstantiationHelper.constructSingleParamInstance(StatefulRetryHandler.class, maxNumberOfAttempts);
38 }
39
40 @Override
41 public String getOnePerExecutionContextParamName(Task<R> task, ExecutionContext<R> executionContext) {
42 return EXECUTION_CONTEXT_PARAM_NAME;
43 }
44 }