/[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

revision 394 by torben, Mon Oct 5 19:46:15 2009 UTC revision 447 by torben, Mon Oct 19 13:57:42 2009 UTC
# Line 1  Line 1 
1  package dk.thoerup.curcuitbreaker;  package dk.thoerup.curcuitbreaker;
2    
3  import java.util.logging.Logger;  
4    import dk.thoerup.curcuitbreaker.notification.Notifier;
5    import dk.thoerup.curcuitbreaker.notification.NullNotifier;
6    
7  /* Simple CircuitBreaker implementation - snipped from http://www.jroller.com/kenwdelong/entry/circuit_breaker_in_java  /* Simple CircuitBreaker implementation - snipped from http://www.jroller.com/kenwdelong/entry/circuit_breaker_in_java
8   *   *
9   *  example of how it can be used   *  example of how it can be used
10  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
11     private CircuitBreaker cb = new CircuitBreaker("test", 5, 10000);
12     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13                  class TestInvocation implements CircuitInvocation {                  class TestInvocation implements CircuitInvocation {
14                          String url;                          String url;
15                          public TestInvocation(String url) {                          public TestInvocation(String url) {
# Line 38  protected void doGet(HttpServletRequest Line 42  protected void doGet(HttpServletRequest
42    
43    
44  public class CircuitBreaker{  public class CircuitBreaker{
         Logger logger = Logger.getLogger(CircuitBreaker.class.getName());  
   
45                    
46          private CircuitBreakerState currentState;          private volatile CircuitBreakerState currentState;
47                    
48          private OpenState open = new OpenState();          private final OpenState open = new OpenState();
49          private HalfOpenState halfOpen = new HalfOpenState();          private final HalfOpenState halfOpen = new HalfOpenState();
50          private ClosedState closed = new ClosedState();          private final ClosedState closed = new ClosedState();
51                    
52          private String name;          private String name;
53                    
54            private Notifier notifier = new NullNotifier();
55            
56          public CircuitBreaker(String name, int threshold, long timeoutMS) {          public CircuitBreaker(String name, int threshold, long timeoutMS) {
57                  closed.setThreshold(threshold);                  closed.setThreshold(threshold);
58                  open.setTimeout(timeoutMS);                  open.setTimeout(timeoutMS);
# Line 78  public class CircuitBreaker{ Line 82  public class CircuitBreaker{
82            
83      public void tripBreaker() {      public void tripBreaker() {
84          synchronized(this) {          synchronized(this) {
85                  currentState = open;                  if (currentState != open) { // TODO:Is this conditional necessary ??
86                  open.trip();                          open.trip();
87                            currentState = open;
88                                    
89                  logger.warning("Circuitbreaker tripBreaker - " + name);                          notifier.sendNotification(name, Notifier.Event.BreakerTripped);
90          }                  }
91                }    
92      }      }
93            
94      public void attemptReset() {      public void attemptReset() {
95          synchronized(this) {          synchronized(this) {
96                  currentState = halfOpen;                  if (currentState != halfOpen) { // TODO:Is this conditional necessary ??
97                                            currentState = halfOpen;
98                  logger.warning("Circuitbreaker attemptReset - " + name);                          notifier.sendNotification(name, Notifier.Event.BreakerAttemptReset);
99                    }
100          }          }
101            
102      }      }
103            
104      public void reset() {      public void reset() {
105          synchronized(this) {          synchronized(this) {
106                  currentState = closed;                  if (currentState != closed) { // TODO: Is this conditional necessary ??
107                                            currentState = closed;
108                  logger.warning("Circuitbreaker reset - " + name);                          notifier.sendNotification(name, Notifier.Event.BreakerReset);
109                    }
110          }          }
111      }      }
112            
113        
114      private CircuitBreakerState getState() {      private CircuitBreakerState getState() {
115          synchronized(this) {          synchronized(this) {
116                  return currentState;                  return currentState;
117          }          }
118      }      }
119        
120        public boolean isClosed() {
121            return (getState() == closed);
122        }
123        
124        public boolean isOpen() {
125            return (getState() == open);
126        }
127        
128        public String getName() {
129            return name;
130        }
131        
132        public String getStateName() {
133            return getState().getName();
134        }
135        
136        public int getThreshold() {
137            return closed.getThreshold();
138        }
139        
140        public int getTimeout() {
141            return (int)open.getTimeout();
142        }
143        
144        public int getFailureCount() {
145            if (getState() == closed) {
146                    return closed.getFailureCount();
147            } else {
148                    return -1;
149            }
150        }
151        
152        public long getElapsed() {
153            if (getState() == open) {
154                    return open.getElapsed();
155            } else {
156                    return -1;
157            }
158        }
159        
160        public void setNotifier(Notifier notifier) {
161            this.notifier = notifier;
162        }
163        
164        public String getNotifierName() {
165            return notifier.getClass().getName();
166        }
167    
168  }  }

Legend:
Removed from v.394  
changed lines
  Added in v.447

  ViewVC Help
Powered by ViewVC 1.1.20