AbstractCircuitBreaker
Date: 2017-02-08

org.apache.commons.lang3.concurrent

## Class AbstractCircuitBreaker<T>

- java.lang.Object
- - org.apache.commons.lang3.concurrent.AbstractCircuitBreaker<T>

- Type Parameters:
    `T` - the type of the value monitored by this circuit breaker
  All Implemented Interfaces:
    CircuitBreaker<T>
  Direct Known Subclasses:
    EventCountCircuitBreaker, ThresholdCircuitBreaker

      public abstract class AbstractCircuitBreaker<T>
      extends java.lang.Object
      implements CircuitBreaker<T>

  Base class for circuit breakers.
  Since:
    3.5

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected static class` | `AbstractCircuitBreaker.State` An internal enumeration representing the different states of a circuit breaker.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static java.lang.String` | `PROPERTY_NAME` The name of the open property as it is passed to registered change listeners.
    `protected java.util.concurrent.atomic.AtomicReference<AbstractCircuitBreaker.State>` | `state` The current state of this circuit breaker.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractCircuitBreaker()` Creates an `AbstractCircuitBreaker`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addChangeListener(java.beans.PropertyChangeListener listener)` Adds a change listener to this circuit breaker.
    `protected void` | `changeState(AbstractCircuitBreaker.State newState)` Changes the internal state of this circuit breaker.
    `abstract boolean` | `checkState()` Checks the state of this circuit breaker and changes it if necessary.
    `void` | `close()` Closes this circuit breaker.
    `abstract boolean` | `incrementAndCheckState(T increment)` Increments the monitored value and performs a check of the current state of this circuit breaker.
    `boolean` | `isClosed()` Returns the current closed state of this circuit breaker.
    `boolean` | `isOpen()` Returns the current open state of this circuit breaker.
    `protected static boolean` | `isOpen(AbstractCircuitBreaker.State state)` Converts the given state value to a boolean open property.
    `void` | `open()` Opens this circuit breaker.
    `void` | `removeChangeListener(java.beans.PropertyChangeListener listener)` Removes the specified change listener from this circuit breaker.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### PROPERTY_NAME

          public static final java.lang.String PROPERTY_NAME

      The name of the open property as it is passed to registered change listeners.
      See Also:
        Constant Field Values

    - #### state

          protected final java.util.concurrent.atomic.AtomicReference<AbstractCircuitBreaker.State> state

      The current state of this circuit breaker.

  - ### Constructor Detail

    - #### AbstractCircuitBreaker

          public AbstractCircuitBreaker()

      Creates an `AbstractCircuitBreaker`. It also creates an internal `PropertyChangeSupport`.

  - ### Method Detail

    - #### isOpen

          public boolean isOpen()

      Returns the current open state of this circuit breaker. A return value of true means that the circuit breaker is currently open indicating a problem in the monitored sub system.
      Specified by:
        `isOpen` in interface `CircuitBreaker<T>`
      Returns:
        the current open state of this circuit breaker

    - #### isClosed

          public boolean isClosed()

      Returns the current closed state of this circuit breaker. A return value of true means that the circuit breaker is currently closed. This means that everything is okay with the monitored sub system.
      Specified by:
        `isClosed` in interface `CircuitBreaker<T>`
      Returns:
        the current closed state of this circuit breaker

    - #### checkState

          public abstract boolean checkState()

      Checks the state of this circuit breaker and changes it if necessary. The return value indicates whether the circuit breaker is now in state `CLOSED`; a value of true typically means that the current operation can continue.
      Specified by:
        `checkState` in interface `CircuitBreaker<T>`
      Returns:
        true if the circuit breaker is now closed; false otherwise

    - #### incrementAndCheckState

          public abstract boolean incrementAndCheckState(T increment)

      Increments the monitored value and performs a check of the current state of this circuit breaker. This method works like `CircuitBreaker.checkState()`, but the monitored value is incremented before the state check is performed.
      Specified by:
        `incrementAndCheckState` in interface `CircuitBreaker<T>`
      Parameters:
        `increment` - value to increment in the monitored value of the circuit breaker
      Returns:
        true if the circuit breaker is now closed; false otherwise

    - #### close

          public void close()

      Closes this circuit breaker. Its state is changed to closed. If this circuit breaker is already closed, this method has no effect.
      Specified by:
        `close` in interface `CircuitBreaker<T>`

    - #### open

          public void open()

      Opens this circuit breaker. Its state is changed to open. Depending on a concrete implementation, it may close itself again if the monitored sub system becomes available. If this circuit breaker is already open, this method has no effect.
      Specified by:
        `open` in interface `CircuitBreaker<T>`

    - #### isOpen

          protected static boolean isOpen(AbstractCircuitBreaker.State state)

      Converts the given state value to a boolean open property.
      Parameters:
        `state` - the state to be converted
      Returns:
        the boolean open flag

    - #### changeState

          protected void changeState(AbstractCircuitBreaker.State newState)

      Changes the internal state of this circuit breaker. If there is actually a change of the state value, all registered change listeners are notified.
      Parameters:
        `newState` - the new state to be set

    - #### addChangeListener

          public void addChangeListener(java.beans.PropertyChangeListener listener)

      Adds a change listener to this circuit breaker. This listener is notified whenever the state of this circuit breaker changes. If the listener is null, it is silently ignored.
      Parameters:
        `listener` - the listener to be added

    - #### removeChangeListener

          public void removeChangeListener(java.beans.PropertyChangeListener listener)

      Removes the specified change listener from this circuit breaker.
      Parameters:
        `listener` - the listener to be removed