Class DataLoaderRegistry

java.lang.Object
org.dataloader.DataLoaderRegistry
Direct Known Subclasses:
ScheduledDataLoaderRegistry

@PublicApi @NullMarked public class DataLoaderRegistry extends Object
This allows data loaders to be registered together into a single place, so they can be dispatched as one. It also allows you to retrieve data loaders by name from a central place.

Notes on DataLoaderInstrumentation : A DataLoaderRegistry can have an instrumentation associated with it. As each DataLoader is added to the registry, the DataLoaderInstrumentation of the registry is applied to that DataLoader.

The DataLoader is changed and hence the object in the registry is not the same one as was originally registered. So you MUST get access to the DataLoader via getDataLoader(String) methods and not use the original DataLoader object.

If the DataLoader has no DataLoaderInstrumentation then the registry one is added to it. If it does have one already then a ChainedDataLoaderInstrumentation is created with the registry DataLoaderInstrumentation in it first and then any other DataLoaderInstrumentations added after that. If the registry DataLoaderInstrumentation instance and DataLoader DataLoaderInstrumentation instance are the same object, then nothing is changed, since the same instrumentation code is being run.

  • Field Details

  • Constructor Details

  • Method Details

    • getInstrumentation

      public @Nullable DataLoaderInstrumentation getInstrumentation()
      Returns:
      the DataLoaderInstrumentation associated with this registry which can be null
    • register

      public DataLoaderRegistry register(DataLoader<?,?> dataLoader)
      This will register a new named dataloader. The DataLoader must be named something and cannot have a null name.

      Note: Registration can change the data loader instance since it might get an DataLoaderInstrumentation applied to it. So the DataLoader instance your read via getDataLoader(String) might not be the same object that was registered.

      Parameters:
      dataLoader - the named data loader to register
      Returns:
      this registry
    • register

      public DataLoaderRegistry register(String key, DataLoader<?,?> dataLoader)
      This will register a new DataLoader

      Note: Registration can change the data loader instance since it might get an DataLoaderInstrumentation applied to it. So the DataLoader instance your read via getDataLoader(String) might not be the same object that was registered.

      Parameters:
      key - the key to put the data loader under
      dataLoader - the data loader to register
      Returns:
      this registry
    • registerAndGet

      public <K, V> DataLoader<K,V> registerAndGet(String key, DataLoader<?,?> dataLoader)
      This will register a new DataLoader and then return it.

      Note: Registration can change the data loader instance since it might get an DataLoaderInstrumentation applied to it. So the DataLoader instance your read via getDataLoader(String) might not be the same object that was registered.

      Parameters:
      key - the key to put the data loader under
      dataLoader - the data loader to register
      Returns:
      the data loader instance that was registered
    • computeIfAbsent

      public <K, V> DataLoader<K,V> computeIfAbsent(String key, Function<String,DataLoader<?,?>> mappingFunction)
      Computes a data loader if absent or return it if it was already registered at that key.

      Note: The entire method invocation is performed atomically, so the function is applied at most once per key.

      Note: Registration can change the data loader instance since it might get an DataLoaderInstrumentation applied to it. So the DataLoader instance your read via getDataLoader(String) might not be the same object that was registered.

      Type Parameters:
      K - the type of keys
      V - the type of values
      Parameters:
      key - the key of the data loader
      mappingFunction - the function to compute a data loader
      Returns:
      a data loader
    • combine

      public DataLoaderRegistry combine(DataLoaderRegistry registry)
      This will combine all the current data loaders in this registry and all the data loaders from the specified registry and return a new combined registry
      Parameters:
      registry - the registry to combine into this registry
      Returns:
      a new combined registry
    • getDataLoaders

      public List<DataLoader<?,?>> getDataLoaders()
      Returns:
      the currently registered data loaders
    • getDataLoadersMap

      public Map<String,DataLoader<?,?>> getDataLoadersMap()
      Returns:
      the currently registered data loaders as a map
    • unregister

      public DataLoaderRegistry unregister(String key)
      This will unregister a new dataloader
      Parameters:
      key - the key of the data loader to unregister
      Returns:
      this registry
    • getDataLoader

      public <K, V> @Nullable DataLoader<K,V> getDataLoader(String key)
      Returns the dataloader that was registered under the specified key
      Type Parameters:
      K - the type of keys
      V - the type of values
      Parameters:
      key - the key of the data loader
      Returns:
      a data loader or null if it's not present
    • getKeys

      public Set<String> getKeys()
      Returns:
      the keys of the data loaders in this registry
    • dispatchAll

      public void dispatchAll()
      This will be called DataLoader.dispatch() on each of the registered DataLoaders
    • dispatchAllWithCount

      public int dispatchAllWithCount()
      Similar to dispatchAll(), this calls DataLoader.dispatch() on each of the registered DataLoaders, but returns the number of dispatches.
      Returns:
      total number of entries that were dispatched from registered DataLoaders.
    • dispatchDepth

      public int dispatchDepth()
      Returns:
      The sum of all batched key loads that need to be dispatched from all registered DataLoaders
    • getStatistics

      public Statistics getStatistics()
      Returns:
      a combined set of statistics for all data loaders in this registry presented as the sum of all their statistics
    • newRegistry

      public static DataLoaderRegistry.Builder newRegistry()
      Returns:
      A builder of DataLoaderRegistrys