Class InstrumentedListenerAdapter

All Implemented Interfaces:
com.fishlib.base.log.LogOutputAppendable, NotificationQueue.Dependency, LivenessManager, LivenessNode, LivenessReferent, Listener, ListenerBase, Serializable
Direct Known Subclasses:
DynamicTableToAdoConverter, TableLogger

public abstract class InstrumentedListenerAdapter extends InstrumentedListener
This class is used for Listeners 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.ListenerImpl
See Also:
  • Field Details

  • Constructor Details

    • InstrumentedListenerAdapter

      public InstrumentedListenerAdapter(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.
    • InstrumentedListenerAdapter

      public InstrumentedListenerAdapter(@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.
    • InstrumentedListenerAdapter

      public InstrumentedListenerAdapter(@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(Index added, Index removed, Index modified)
      Description copied from interface: Listener
      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:
      added - rows added
      removed - rows removed
      modified - rows modified
    • 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