Class SolrResourceLoader

    • Constructor Detail

      • 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 Detail

      • 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.
      • 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 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
      • 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'
      • 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
      • 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
      • getSolrConfig

        public SolrConfig getSolrConfig()
      • 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 a n 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)