Class SolrResourceLoader

java.lang.Object
org.apache.solr.core.SolrResourceLoader
All Implemented Interfaces:
Closeable, AutoCloseable, org.apache.lucene.util.ResourceLoader, org.apache.solr.common.cloud.SolrClassLoader, SolrCoreAware
Direct Known Subclasses:
ZkSolrResourceLoader

public class SolrResourceLoader extends Object implements org.apache.lucene.util.ResourceLoader, Closeable, org.apache.solr.common.cloud.SolrClassLoader, SolrCoreAware
Since:
solr 1.3
  • Field Details

    • SOLR_RESOURCELOADING_RESTRICTED_ENABLED_PARAM

      public static final String SOLR_RESOURCELOADING_RESTRICTED_ENABLED_PARAM
      See Also:
    • classLoader

      protected URLClassLoader classLoader
  • Constructor Details

    • SolrResourceLoader

      public SolrResourceLoader(String name, List<Path> classpath, Path instanceDir, ClassLoader parent)
      Creates a loader. Note: we do NOT call reloadLuceneSPI().
    • SolrResourceLoader

      public SolrResourceLoader(Path instanceDir)
      Creates a loader.
      Parameters:
      instanceDir - - base directory for this resource loader, must not be null
    • SolrResourceLoader

      public SolrResourceLoader(Path instanceDir, ClassLoader parent)
      This loader will delegate to Solr's classloader when possible, otherwise it will attempt to resolve resources using any jar files found in the "lib/" directory in the specified instance directory.
  • Method Details

    • getManagedResourceRegistry

      public RestManager.Registry getManagedResourceRegistry()
    • getSchemaLoader

      public org.apache.solr.common.cloud.SolrClassLoader getSchemaLoader()
    • getURLs

      public static List<URL> getURLs(Path libDir, DirectoryStream.Filter<Path> filter) throws IOException
      Utility method to get the URLs of all paths under a given directory that match a filter
      Parameters:
      libDir - the root directory
      filter - the filter
      Returns:
      all matching URLs
      Throws:
      IOException - on error
    • getURLs

      public static List<URL> getURLs(Path libDir) throws IOException
      Utility method to get the URLs of all paths under a given directory
      Parameters:
      libDir - the root directory
      Returns:
      all subdirectories as URLs
      Throws:
      IOException - on error
    • getFilteredURLs

      public static List<URL> getFilteredURLs(Path libDir, String regex) throws IOException
      Utility method to get the URLs of all paths under a given directory that match a regex
      Parameters:
      libDir - the root directory
      regex - the regex as a String
      Returns:
      all matching URLs
      Throws:
      IOException - on error
    • getConfigPath

      public Path getConfigPath()
    • getClassLoader

      public ClassLoader getClassLoader()
      EXPERT

      The underlying class loader. Most applications will not need to use this.

      Returns:
      The ClassLoader
    • openResource

      public InputStream openResource(String resource) throws IOException
      Opens any resource by its name. By default, this will look in multiple locations to load the resource: $configDir/$resource (if resource is not absolute) $CWD/$resource otherwise, it will look for it in any jar accessible through the class loader. Override this method to customize loading resources.
      Specified by:
      openResource in interface org.apache.lucene.util.ResourceLoader
      Returns:
      the stream for the named resource
      Throws:
      IOException
    • resourceLocation

      public String resourceLocation(String resource)
      Report the location of a resource found by the resource loader
    • getLines

      public List<String> getLines(String resource) throws IOException
      Accesses a resource by name and returns the (non comment) lines containing data.

      A comment line is any line that starts with the character "#"

      Returns:
      a list of non-blank non-comment lines with whitespace trimmed from front and back.
      Throws:
      IOException - If there is a low-level I/O error.
    • getLines

      public List<String> getLines(String resource, String encoding) throws IOException
      Accesses a resource by name and returns the (non comment) lines containing data using the given character encoding.

      A comment line is any line that starts with the character "#"

      Parameters:
      resource - the file to be read
      Returns:
      a list of non-blank non-comment lines with whitespace trimmed
      Throws:
      IOException - If there is a low-level I/O error.
    • getLines

      public List<String> getLines(String resource, Charset charset) throws IOException
      Throws:
      IOException
    • findClass

      public <T> Class<? extends T> findClass(String cname, Class<T> expectedType)
      Specified by:
      findClass in interface org.apache.lucene.util.ResourceLoader
      Specified by:
      findClass in interface org.apache.solr.common.cloud.SolrClassLoader
    • findClass

      public <T> Class<? extends T> findClass(String cname, Class<T> expectedType, String... subpackages)
      This method loads a class either with its FQN or a short-name (solr.class-simplename or class-simplename). It tries to load the class with the name that is given first and if it fails, it tries all the known solr packages. This method caches the FQN of a short-name in a static map in-order to make subsequent lookups for the same class faster. The caching is done only if the class is loaded by the webapp classloader and it is loaded using a shortname.
      Parameters:
      cname - The name or the short name of the class.
      subpackages - the packages to be tried if the cname starts with solr.
      Returns:
      the loaded class. An exception is thrown if it fails
    • newInstance

      public <T> T newInstance(String name, Class<T> expectedType)
      Specified by:
      newInstance in interface org.apache.lucene.util.ResourceLoader
    • newInstance

      public <T> T newInstance(String cname, Class<T> expectedType, String... subpackages)
      Specified by:
      newInstance in interface org.apache.solr.common.cloud.SolrClassLoader
    • newInstance

      public <T> T newInstance(String cName, Class<T> expectedType, String[] subPackages, Class<?>[] params, Object[] args)
      Specified by:
      newInstance in interface org.apache.solr.common.cloud.SolrClassLoader
    • addToInfoBeans

      public <T> void addToInfoBeans(T obj)
    • addToResourceLoaderAware

      public <T> boolean addToResourceLoaderAware(T obj)
    • addToCoreAware

      public <T> boolean addToCoreAware(T obj)
      the inform() callback should be invoked on the listener. If this is 'live', the callback is not called so currently this returns 'false'
    • setSolrConfig

      protected final void setSolrConfig(SolrConfig config)
    • setCoreContainer

      protected final void setCoreContainer(CoreContainer coreContainer)
    • setSolrCore

      protected final void setSolrCore(SolrCore core)
    • inform

      public void inform(SolrCore core)
      Tell all SolrCoreAware instances about the SolrCore
      Specified by:
      inform in interface SolrCoreAware
    • inform

      public void inform(org.apache.lucene.util.ResourceLoader loader) throws IOException
      Tell all ResourceLoaderAware instances about the loader
      Throws:
      IOException
    • informAware

      public static void informAware(org.apache.lucene.util.ResourceLoader loader, org.apache.lucene.util.ResourceLoaderAware aware) throws IOException
      Set the current ResourceLoaderAware object in thread local so that appropriate classloader can be used for package loaded classes
      Throws:
      IOException
    • inform

      public void inform(Map<String,SolrInfoBean> infoRegistry)
      Register any SolrInfoBeans
      Parameters:
      infoRegistry - The Info Registry
    • getInstancePath

      public Path getInstancePath()
      The instance path for this resource loader, as passed in from the constructor. It's absolute when this is for Solr Home or a Solr Core instance dir.
    • assertAwareCompatibility

      public static Class<?> assertAwareCompatibility(Class<?> aware, Object obj)
      Utility function to throw an exception if the class is invalid
    • getCoreContainer

      public CoreContainer getCoreContainer()
    • getSolrConfig

      public SolrConfig getSolrConfig()
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • getInfoMBeans

      public List<SolrInfoBean> getInfoMBeans()
    • findClass

      public <T> Class<? extends T> findClass(PluginInfo info, Class<T> type, boolean registerCoreReloadListener)
      Load a class using an appropriate SolrResourceLoader depending of the package on that class
      Parameters:
      registerCoreReloadListener - register a listener for the package and reload the core if the package is changed. Use this sparingly. This will result in core reloads across all the cores in all collections using this configset
    • newInstance

      public <T> T newInstance(PluginInfo info, Class<T> type, boolean registerCoreReloadListener)
      Create an instance of a class using an appropriate SolrResourceLoader depending on the package of that class
      Parameters:
      registerCoreReloadListener - register a listener for the package and reload the core if the package is changed. Use this sparingly. This will result in core reloads across all the cores in all collections using this configset
    • persistConfLocally

      public static void persistConfLocally(SolrResourceLoader loader, String resourceName, byte[] content)