/[projects]/miscJava/CircuitBreaker/src/main/java/dk/thoerup/circuitbreaker/CircuitBreaker.java
ViewVC logotype

Diff of /miscJava/CircuitBreaker/src/main/java/dk/thoerup/circuitbreaker/CircuitBreaker.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

CircuitBreaker/src/dk/thoerup/circuitbreaker/CircuitBreaker.java revision 864 by torben, Sun Jun 20 21:54:53 2010 UTC miscJava/CircuitBreaker/src/dk/thoerup/circuitbreaker/CircuitBreaker.java revision 2448 by torben, Fri Mar 20 08:52:49 2015 UTC
# Line 1  Line 1 
1  package dk.thoerup.circuitbreaker;  package dk.thoerup.circuitbreaker;
2    
3    
4    import java.util.concurrent.ExecutorService;
5    import java.util.concurrent.Executors;
6    
7    import dk.thoerup.circuitbreaker.config.BreakerConfig;
8    import dk.thoerup.circuitbreaker.config.StaticConfig;
9    import dk.thoerup.circuitbreaker.notification.NotiferHelper;
10  import dk.thoerup.circuitbreaker.notification.Notifier;  import dk.thoerup.circuitbreaker.notification.Notifier;
11  import dk.thoerup.circuitbreaker.notification.NullNotifier;  import dk.thoerup.circuitbreaker.notification.NullNotifier;
12    
# Line 51  public class CircuitBreaker{ Line 57  public class CircuitBreaker{
57                    
58          private String name;          private String name;
59                    
60            private ExecutorService executor = null;        
61          private Notifier notifier = new NullNotifier();          private Notifier notifier = new NullNotifier();
62                    
63          public CircuitBreaker(String name, int threshold, long timeoutMS) {          @Deprecated
64                  closed.setThreshold(threshold);          public CircuitBreaker(String name, int threshold, int timeoutMS) {
65                  open.setTimeout(timeoutMS);                  this(name, new StaticConfig(threshold, timeoutMS) );
66            }
67            
68            public CircuitBreaker(String name, BreakerConfig config) {
69                    closed.setThreshold(config);
70                    open.setTimeout(config);
71                                    
72                  this.name = name;                  this.name = name;
73                    
# Line 63  public class CircuitBreaker{ Line 75  public class CircuitBreaker{
75                  internalReset();                  internalReset();
76          }          }
77                    
78            public synchronized void shutdown() {
79                    if (executor != null) {
80                            executor.shutdown();
81                    }
82            }
83            
84                    
85      public Object invoke(CircuitInvocation invocation) throws Exception      public Object invoke(CircuitInvocation invocation) throws Exception
86      {      {
# Line 82  public class CircuitBreaker{ Line 100  public class CircuitBreaker{
100      }      }
101            
102      public void tripBreaker() {      public void tripBreaker() {
103          synchronized(this) {          commonTripBreaker(Notifier.Event.BreakerTripped);
                 if (currentState != open) { // TODO:Is this conditional necessary ??  
                         open.trip();  
                         currentState = open;  
                   
                         notifier.sendNotification(name, Notifier.Event.BreakerTripped);  
                 }  
         }      
104      }      }
105            
106          //a re-trip should basically do the same as a normal trip, but it is here just to differentiate the two different events          //a re-trip should basically do the same as a normal trip, but it is here just to differentiate the two different events
107      public void retripBreaker() {      public void retripBreaker() {
108          synchronized(this) {          commonTripBreaker(Notifier.Event.BreakerRetripped);
109        }
110        
111        private void commonTripBreaker(Notifier.Event event) {
112            synchronized(this) {
113                  if (currentState != open) { // TODO:Is this conditional necessary ??                  if (currentState != open) { // TODO:Is this conditional necessary ??
114                          open.trip();                          open.trip();
115                          currentState = open;                          currentState = open;
116                                    
117                          notifier.sendNotification(name, Notifier.Event.BreakerRetripped);                          notifier.sendNotification(this, event);
118                  }                  }
119          }              }      
120      }      }
121    
122      public void attemptReset() {      public void attemptReset() {
123          synchronized(this) {          synchronized(this) {
124                  if (currentState != halfOpen) { // TODO:Is this conditional necessary ??                  if (currentState != halfOpen) { // TODO:Is this conditional necessary ??
125                          currentState = halfOpen;                          currentState = halfOpen;
126                          notifier.sendNotification(name, Notifier.Event.BreakerAttemptReset);                          notifier.sendNotification(this, Notifier.Event.BreakerAttemptReset);
127                  }                  }
128          }          }
129                    
# Line 118  public class CircuitBreaker{ Line 133  public class CircuitBreaker{
133          synchronized(this) {          synchronized(this) {
134                  if (currentState != closed) { // TODO: Is this conditional necessary ??                  if (currentState != closed) { // TODO: Is this conditional necessary ??
135                          internalReset();                          internalReset();
136                          notifier.sendNotification(name, Notifier.Event.BreakerReset);                          notifier.sendNotification(this, Notifier.Event.BreakerReset);
137                  }                  }
138          }          }
139      }      }
# Line 180  public class CircuitBreaker{ Line 195  public class CircuitBreaker{
195          this.notifier = notifier;          this.notifier = notifier;
196      }      }
197            
198      public String getNotifierName() {      public String getNotifierName() {
199          return notifier.getClass().getName();          return NotiferHelper.getName(notifier);
200        }
201        
202        public synchronized ExecutorService getExecutor() {
203            
204            if (executor == null) {
205                    executor = Executors.newFixedThreadPool(1);
206            }
207            
208            return executor;
209            
210      }      }
211    
212  }  }

Legend:
Removed from v.864  
changed lines
  Added in v.2448

  ViewVC Help
Powered by ViewVC 1.1.20