Class InstrumentedShiftAwareListenerAdapter

All Implemented Interfaces:
com.fishlib.base.log.LogOutputAppendable, NotificationQueue.Dependency, LivenessManager, LivenessNode, LivenessReferent, ListenerBase, ShiftAwareListener, Serializable
Direct Known Subclasses:
AddedTableLoggingListener, FullTableLoggingListener, ToMapListener

public abstract class InstrumentedShiftAwareListenerAdapter extends InstrumentedShiftAwareListener
This class is used for ShiftAwareListeners that represent "leaf" nodes in the update propagation tree. It provides an optional retention cache, to prevent listeners from being garbage collected. For creating internally ticking table nodes, instead use BaseTable.ShiftAwareListenerImpl
See Also:
  • Field Details

  • Constructor Details

    • InstrumentedShiftAwareListenerAdapter

      public InstrumentedShiftAwareListenerAdapter(DynamicTable source)
      Create an instrumented listener for source. The listener will be retained and no description is provided.
      Parameters:
      source - The source table this listener will subscribe to - needed for preserving referential integrity.
    • InstrumentedShiftAwareListenerAdapter

      public InstrumentedShiftAwareListenerAdapter(@Nullable String description, DynamicTable source)
      Create an instrumented listener for source. The listener will be retained and no description is provided.
      Parameters:
      description - A description for the UpdatePerformanceTracker to append to its entry description.
      source - The source table this listener will subscribe to - needed for preserving referential integrity.
    • InstrumentedShiftAwareListenerAdapter

      public InstrumentedShiftAwareListenerAdapter(@Nullable String description, DynamicTable source, boolean retain)
      Parameters:
      description - A description for the UpdatePerformanceTracker to append to its entry description.
      source - The source table this listener will subscribe to - needed for preserving referential integrity.
      retain - Whether a hard reference to this listener should be maintained to prevent it from being collected.
  • Method Details

    • onUpdate

      public abstract void onUpdate(ShiftAwareListener.Update upstream)
      Description copied from interface: ShiftAwareListener
      Process notification of table changes.

      The Listener onUpdate call executes within the LiveTableMonitor refresh loop. Any tables used within the listener's onUpdate call must have already been refreshed. Using the typical pattern of a Listener that is listening to a single table, with DynamicTable.listenForUpdates(Listener), this is trivially true.

      When the listener must reference more than just one parent, the tables (or other objects) it references, must be made a NotificationQueue.Dependency of the listener. For listeners that reference multiple ticking tables, a common pattern is to use a MergedListener and collection of ListenerRecorders.

      Parameters:
      upstream - The set of upstream table updates.
    • onFailureInternal

      public void onFailureInternal(Throwable originalException, UpdatePerformanceTracker.Entry sourceEntry)
      Called when the source table produces an error
      Specified by:
      onFailureInternal in class InstrumentedListenerBase
      Parameters:
      originalException - the original throwable that caused this error
      sourceEntry - the performance tracker entry that was active when the error occurred
    • canExecute

      public boolean canExecute(long step)
      Description copied from class: InstrumentedListenerBase
      Check if this listener is ready to execute.
      Overrides:
      canExecute in class InstrumentedListenerBase
      Returns:
      if this listener is ready to execute
    • destroy

      protected void destroy()
      Description copied from class: ReferenceCountedLivenessNode

      Attempt to release (destructively when necessary) resources held by this object. This may render the object unusable for subsequent operations. Implementations should be sure to call super.destroy().

      This is intended to only ever be used as a side effect of decreasing the reference count to 0.

      Overrides:
      destroy in class ReferenceCountedLivenessNode