Interface ClassloaderIsolationKeyProvider


public interface ClassloaderIsolationKeyProvider

There are times when a component must be created in such a way that each instance gets its own ClassLoader hierarchy, rather than sharing the ClassLoader with other components (see @RequiresInstanceClassLoading). This, however, can be extremely expensive, as all of the classes must be loaded again for each instance of the component. When thousands of these components are used in a single flow, the startup time can be great, and it can lead to massive amounts of RAM being required.

For components that do require instance ClassLoading that clones ancestor resources, this interface can be optional implemented by the component. If the interface is implemented, the component is given the opportunity to return a distinct "key" that can be used to identify instances that may share the same ClassLoader.

  • Method Summary

    Modifier and Type
    Method
    Description
    Determines the key that identifies a shared ClassLoader that this component may use.
  • Method Details

    • getClassloaderIsolationKey

      String getClassloaderIsolationKey(PropertyContext context)

      Determines the key that identifies a shared ClassLoader that this component may use. Any two instances of the same component that return the same key may be assigned the same base ClassLoader (though it is not guaranteed that this will be the case).

      If a subsequent call to this method returns a different value, the component will be recreated with a different ClassLoader.

      Implementation Note: for components that implement this interface, this method will be called often. Therefore, performance characteristics of the implementation are critical. The method is expected to return the value of a configured property or derive a value to return based off of the values of a few properties. Accessing a remote resource, is too expensive. If the necessary computation is non-trivial, then it should be performed out of band and the pre-computed value simply returned by this method.

      Parameters:
      context - the PropertyContext that can be used for determining the key
      Returns:
      a distinct key that can be used to indicate which shared ClassLoader is allowed to be used