You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2021/03/10 09:45:54 UTC

[lucene] 13/21: renamed PluginLoader to SolrClassLoader

This is an automated email from the ASF dual-hosted git repository.

dweiss pushed a commit to branch jira/solr14155
in repository https://gitbox.apache.org/repos/asf/lucene.git

commit 61ee4d8327ecb07cffd5463e59e584fa3e8c24d8
Author: noble <no...@apache.org>
AuthorDate: Sat Dec 28 00:11:38 2019 +1100

    renamed PluginLoader to SolrClassLoader
---
 .../java/org/apache/solr/core/MemClassLoader.java  | 14 ++++++++--
 .../src/java/org/apache/solr/core/PluginBag.java   |  7 +++--
 .../{PluginLoader.java => SolrClassLoader.java}    |  4 ++-
 .../src/java/org/apache/solr/core/SolrCore.java    |  7 +++--
 .../org/apache/solr/core/SolrResourceLoader.java   |  9 ++++---
 .../org/apache/solr/handler/SolrConfigHandler.java |  5 ++--
 .../java/org/apache/solr/pkg/PackageLoader.java    | 12 ++++++---
 .../org/apache/solr/schema/CurrencyFieldType.java  |  2 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  | 12 ++++-----
 .../java/org/apache/solr/schema/IndexSchema.java   | 31 +++++++++++-----------
 .../org/apache/solr/schema/ManagedIndexSchema.java |  2 +-
 .../org/apache/solr/schema/PreAnalyzedField.java   |  2 +-
 .../solr/util/plugin/AbstractPluginLoader.java     |  8 +++---
 13 files changed, 67 insertions(+), 48 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/MemClassLoader.java b/solr/core/src/java/org/apache/solr/core/MemClassLoader.java
index cf6bb4d..60942f5 100644
--- a/solr/core/src/java/org/apache/solr/core/MemClassLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/MemClassLoader.java
@@ -39,7 +39,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 
-public class MemClassLoader extends ClassLoader implements AutoCloseable, ResourceLoader {
+public class MemClassLoader extends ClassLoader implements ResourceLoader, SolrClassLoader {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   private boolean allJarsLoaded = false;
   private final SolrResourceLoader parentLoader;
@@ -53,6 +53,16 @@ public class MemClassLoader extends ClassLoader implements AutoCloseable, Resour
     this.libs = libs;
   }
 
+  @Override
+  public <T> T newInstance(String cname, Class<T> expectedType, String... subpackages) {
+    return null;
+  }
+
+  @Override
+  public <T> T newInstance(String cName, Class<T> expectedType, String[] subPackages, Class[] params, Object[] args) {
+    return null;
+  }
+
   synchronized void loadRemoteJars() {
     if (allJarsLoaded) return;
     int count = 0;
@@ -149,7 +159,7 @@ public class MemClassLoader extends ClassLoader implements AutoCloseable, Resour
   }
 
   @Override
-  public void close() throws Exception {
+  public void close() {
     for (PluginBag.RuntimeLib lib : libs) {
       try {
         lib.close();
diff --git a/solr/core/src/java/org/apache/solr/core/PluginBag.java b/solr/core/src/java/org/apache/solr/core/PluginBag.java
index b26b987..708910b 100644
--- a/solr/core/src/java/org/apache/solr/core/PluginBag.java
+++ b/solr/core/src/java/org/apache/solr/core/PluginBag.java
@@ -34,7 +34,6 @@ import java.util.stream.Collectors;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
-import org.apache.lucene.analysis.util.ResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoaderAware;
 import org.apache.solr.api.Api;
 import org.apache.solr.api.ApiBag;
@@ -144,7 +143,7 @@ public class PluginBag<T> implements AutoCloseable {
         PackagePluginHolder<T> holder = new PackagePluginHolder<>(info, core, meta);
         return holder;
       } else {
-        T inst = core.createInstance(info.className, (Class<T>) meta.clazz, meta.getCleanTag(), null, core.getResourceLoader(info.pkgName));
+        T inst = core.createInstance(info.className, (Class<T>) meta.clazz, meta.getCleanTag(), null, core.getSolrClassLoader(info.pkgName));
         initInstance(inst, info);
         return new PluginHolder<>(info, inst);
       }
@@ -403,11 +402,11 @@ public class PluginBag<T> implements AutoCloseable {
     private final SolrConfig.SolrPluginInfo pluginMeta;
     protected SolrException solrException;
     private final SolrCore core;
-    protected ResourceLoader resourceLoader;
+    protected SolrClassLoader resourceLoader;
     private final boolean isRuntimeLib;
 
 
-    LazyPluginHolder(SolrConfig.SolrPluginInfo pluginMeta, PluginInfo pluginInfo, SolrCore core, ResourceLoader loader, boolean isRuntimeLib) {
+    LazyPluginHolder(SolrConfig.SolrPluginInfo pluginMeta, PluginInfo pluginInfo, SolrCore core, SolrClassLoader loader, boolean isRuntimeLib) {
       super(pluginInfo);
       this.pluginMeta = pluginMeta;
       this.isRuntimeLib = isRuntimeLib;
diff --git a/solr/core/src/java/org/apache/solr/core/PluginLoader.java b/solr/core/src/java/org/apache/solr/core/SolrClassLoader.java
similarity index 93%
rename from solr/core/src/java/org/apache/solr/core/PluginLoader.java
rename to solr/core/src/java/org/apache/solr/core/SolrClassLoader.java
index ef0bd94..b260e07 100644
--- a/solr/core/src/java/org/apache/solr/core/PluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrClassLoader.java
@@ -17,10 +17,12 @@
 
 package org.apache.solr.core;
 
+import java.io.Closeable;
+
 /**A generic interface to load classes
  *
  */
-public interface PluginLoader {
+public interface SolrClassLoader extends Closeable {
 
   <T> T newInstance(String cname, Class<T> expectedType, String... subpackages);
 
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 284bf66..b1c38ba 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -63,7 +63,6 @@ import com.codahale.metrics.Timer;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.MapMaker;
 import org.apache.commons.io.FileUtils;
-import org.apache.lucene.analysis.util.ResourceLoader;
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexDeletionPolicy;
@@ -288,7 +287,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
   /** Gets the SolrResourceLoader for a given package
    * @param pkg The package name
    */
-  public SolrResourceLoader getResourceLoader(String pkg) {
+  public SolrClassLoader getSolrClassLoader(String pkg) {
     if (pkg == null) {
       return resourceLoader;
     }
@@ -819,7 +818,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
    * @return the desired instance
    * @throws SolrException if the object could not be instantiated
    */
-  public static <T> T createInstance(String className, Class<T> cast, String msg, SolrCore core, ResourceLoader resourceLoader) {
+  public static <T> T createInstance(String className, Class<T> cast, String msg, SolrCore core, SolrClassLoader resourceLoader) {
     Class<? extends T> clazz = null;
     if (msg == null) msg = "SolrCore Object";
     try {
@@ -879,7 +878,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
 
   public <T extends Object> T createInitInstance(PluginInfo info, Class<T> cast, String msg, String defClassName) {
     if (info == null) return null;
-    T o = createInstance(info.className == null ? defClassName : info.className, cast, msg, this, getResourceLoader(info.pkgName));
+    T o = createInstance(info.className == null ? defClassName : info.className, cast, msg, this, getSolrClassLoader(info.pkgName));
     if (o instanceof PluginInfoInitialized) {
       ((PluginInfoInitialized) o).init(info);
     } else if (o instanceof NamedListInitializedPlugin) {
diff --git a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
index 46e2ecf..2ad001b 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
@@ -20,7 +20,6 @@ import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.naming.NoInitialContextException;
-import java.io.Closeable;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -83,7 +82,7 @@ import org.slf4j.LoggerFactory;
 /**
  * @since solr 1.3
  */
-public class SolrResourceLoader implements ResourceLoader, PluginLoader, Closeable {
+public class SolrResourceLoader implements ResourceLoader, SolrClassLoader {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   static final String project = "solr";
@@ -190,6 +189,11 @@ public class SolrResourceLoader implements ResourceLoader, PluginLoader, Closeab
     }
     this.classLoader = URLClassLoader.newInstance(new URL[0], parent);
 
+    initSPI();
+    this.coreProperties = coreProperties;
+  }
+
+  protected void initSPI() {
     /*
      * Skip the lib subdirectory when we are loading from the solr home.
      * Otherwise load it, so core lib directories still get loaded.
@@ -207,7 +211,6 @@ public class SolrResourceLoader implements ResourceLoader, PluginLoader, Closeab
         reloadLuceneSPI();
       }
     }
-    this.coreProperties = coreProperties;
   }
 
   /**
diff --git a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
index 09f2778..fe97744 100644
--- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
@@ -66,6 +66,7 @@ import org.apache.solr.core.ConfigOverlay;
 import org.apache.solr.core.PluginBag;
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.RequestParams;
+import org.apache.solr.core.SolrClassLoader;
 import org.apache.solr.core.SolrConfig;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.core.SolrResourceLoader;
@@ -593,9 +594,9 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa
         //this is not dynamically loaded so we can verify the class right away
         try {
           if(expected == Expressible.class) {
-            SolrResourceLoader resourceLoader = info.pkgName == null ?
+            SolrClassLoader resourceLoader = info.pkgName == null ?
                 req.getCore().getResourceLoader() :
-                req.getCore().getResourceLoader(info.pkgName);
+                req.getCore().getSolrClassLoader(info.pkgName);
             resourceLoader.findClass(info.className, expected);
           } else {
             req.getCore().createInitInstance(info, expected, clz, "");
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java b/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
index b7a88d1..c9ef000 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
@@ -37,6 +37,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import org.apache.solr.common.MapWriter;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.SolrClassLoader;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.core.SolrResourceLoader;
 import org.slf4j.Logger;
@@ -234,7 +235,7 @@ public class PackageLoader implements Closeable {
 
     public class Version implements MapWriter, Closeable {
       private final Package parent;
-      private SolrResourceLoader loader;
+      private SolrClassLoader loader;
 
       private final PackageAPI.PkgVersion version;
 
@@ -263,7 +264,12 @@ public class PackageLoader implements Closeable {
               "PACKAGE_LOADER: " + parent.name() + ":" + version,
               paths,
               coreContainer.getResourceLoader().getInstancePath(),
-              coreContainer.getResourceLoader().getClassLoader());
+              coreContainer.getResourceLoader().getClassLoader()){
+            @Override
+            protected void initSPI() {
+              //no op
+            }
+          };
         } catch (MalformedURLException e) {
           log.error("Could not load classloader ", e);
         }
@@ -277,7 +283,7 @@ public class PackageLoader implements Closeable {
         return Collections.unmodifiableList(version.files);
       }
 
-      public SolrResourceLoader getLoader() {
+      public SolrClassLoader getLoader() {
         return loader;
       }
 
diff --git a/solr/core/src/java/org/apache/solr/schema/CurrencyFieldType.java b/solr/core/src/java/org/apache/solr/schema/CurrencyFieldType.java
index 0511830..c0f82ee 100644
--- a/solr/core/src/java/org/apache/solr/schema/CurrencyFieldType.java
+++ b/solr/core/src/java/org/apache/solr/schema/CurrencyFieldType.java
@@ -121,7 +121,7 @@ public class CurrencyFieldType extends FieldType implements SchemaAware, Resourc
     }
     try {
       Class<? extends ExchangeRateProvider> c
-          = schema.getPluginLoader().findClass(exchangeRateProviderClass, ExchangeRateProvider.class);
+          = schema.getSolrClassLoader().findClass(exchangeRateProviderClass, ExchangeRateProvider.class);
       provider = c.getConstructor().newInstance();
       provider.init(args);
     } catch (Exception e) {
diff --git a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
index 89c6ff2..af72660 100644
--- a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
@@ -34,7 +34,7 @@ import org.apache.lucene.analysis.util.TokenizerFactory;
 import org.apache.lucene.util.Version;
 import org.apache.solr.analysis.TokenizerChain;
 import org.apache.solr.common.SolrException;
-import org.apache.solr.core.PluginLoader;
+import org.apache.solr.core.SolrClassLoader;
 import org.apache.solr.core.SolrConfig;
 import org.apache.solr.util.DOMUtil;
 import org.apache.solr.util.plugin.AbstractPluginLoader;
@@ -78,7 +78,7 @@ public final class FieldTypePluginLoader
 
 
   @Override
-  protected FieldType create( PluginLoader loader,
+  protected FieldType create( SolrClassLoader loader,
                               String name, 
                               String className,
                               Node node ) throws Exception {
@@ -191,7 +191,7 @@ public final class FieldTypePluginLoader
   //
   private Analyzer readAnalyzer(Node node) throws XPathExpressionException {
                                 
-    final PluginLoader loader = schema.getPluginLoader();
+    final SolrClassLoader loader = schema.getSolrClassLoader();
 
     // parent node used to be passed in as "fieldtype"
     // if (!fieldtype.hasChildNodes()) return null;
@@ -256,7 +256,7 @@ public final class FieldTypePluginLoader
       ("[schema.xml] analyzer/charFilter", CharFilterFactory.class, false, false) {
 
       @Override
-      protected CharFilterFactory create(PluginLoader loader, String name, String className, Node node) throws Exception {
+      protected CharFilterFactory create(SolrClassLoader loader, String name, String className, Node node) throws Exception {
         final Map<String,String> params = DOMUtil.toMap(node.getAttributes());
         String configuredVersion = params.remove(LUCENE_MATCH_VERSION_PARAM);
         params.put(LUCENE_MATCH_VERSION_PARAM, parseConfiguredVersion(configuredVersion, CharFilterFactory.class.getSimpleName()).toString());
@@ -306,7 +306,7 @@ public final class FieldTypePluginLoader
       ("[schema.xml] analyzer/tokenizer", TokenizerFactory.class, false, false) {
       
       @Override
-      protected TokenizerFactory create(PluginLoader loader, String name, String className, Node node) throws Exception {
+      protected TokenizerFactory create(SolrClassLoader loader, String name, String className, Node node) throws Exception {
         final Map<String,String> params = DOMUtil.toMap(node.getAttributes());
         String configuredVersion = params.remove(LUCENE_MATCH_VERSION_PARAM);
         params.put(LUCENE_MATCH_VERSION_PARAM, parseConfiguredVersion(configuredVersion, TokenizerFactory.class.getSimpleName()).toString());
@@ -360,7 +360,7 @@ public final class FieldTypePluginLoader
       new AbstractPluginLoader<TokenFilterFactory>("[schema.xml] analyzer/filter", TokenFilterFactory.class, false, false)
     {
       @Override
-      protected TokenFilterFactory create(PluginLoader loader, String name, String className, Node node) throws Exception {
+      protected TokenFilterFactory create(SolrClassLoader loader, String name, String className, Node node) throws Exception {
         final Map<String,String> params = DOMUtil.toMap(node.getAttributes());
         String configuredVersion = params.remove(LUCENE_MATCH_VERSION_PARAM);
         params.put(LUCENE_MATCH_VERSION_PARAM, parseConfiguredVersion(configuredVersion, TokenFilterFactory.class.getSimpleName()).toString());
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 09f6341..ab8d49b 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -63,7 +63,7 @@ import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.Pair;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.PluginInfo;
-import org.apache.solr.core.PluginLoader;
+import org.apache.solr.core.SolrClassLoader;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.core.SolrResourceLoader;
 import org.apache.solr.core.XmlConfigFile;
@@ -144,11 +144,11 @@ public class IndexSchema implements Closeable {
    */
   protected final SolrResourceLoader loader;
 
-  /**Classes for all plugins should be loaded using this.
+  /** Classes for all plugins should be loaded using this.
    * If resources need to be loaded from packages, use the classloader of one of the classes
    * loaded from this package
    */
-  protected final PluginLoader pluginLoader;
+  protected final SolrClassLoader classLoader;
 
   protected Map<String,SchemaField> fields = new HashMap<>();
   protected Map<String,FieldType> fieldTypes = new HashMap<>();
@@ -200,21 +200,20 @@ public class IndexSchema implements Closeable {
     }
   }
 
-  public PluginLoader getPluginLoader(){
-    return pluginLoader;
+  public SolrClassLoader getSolrClassLoader(){
+    return classLoader;
   }
   protected IndexSchema(Version luceneVersion, SolrResourceLoader loader) {
     this.luceneVersion = Objects.requireNonNull(luceneVersion);
     this.loader = loader;
     if(loader.getCore() == null) {
-      this.pluginLoader = loader;
+      this.classLoader = loader;
     } else {
-      PackageAwarePluginLoader papl = new PackageAwarePluginLoader(loader.getCore());
-      this.pluginLoader = papl;
+      this.classLoader = new PackageAwarePluginLoader(loader.getCore());
     }
   }
 
-  public class PackageAwarePluginLoader implements PluginLoader, Closeable {
+  public class PackageAwarePluginLoader implements SolrClassLoader {
     final SolrCore core;
     private final List<PackageListeners.Listener> listeners = new ArrayList<>();
     Runnable reloadSchemaRunnable = () -> getCore().refreshSchema();
@@ -234,7 +233,7 @@ public class IndexSchema implements Closeable {
           (pkgloader, name) -> pkgloader.newInstance(name, expectedType, subpackages));
     }
 
-    private <T> T loadWithRightPackageLoader(String cname, Class expectedType, BiFunction<SolrResourceLoader, String, T> fun) {
+    private <T> T loadWithRightPackageLoader(String cname, Class expectedType, BiFunction<SolrClassLoader, String, T> fun) {
       PluginInfo.ClassName className = new PluginInfo.ClassName(cname);
       if (className.pkg == null) {
         return  fun.apply(loader, className.klas);
@@ -280,7 +279,7 @@ public class IndexSchema implements Closeable {
 
     @Override
     public <T> Class<? extends T> findClass(String cname, Class<T> expectedType) {
-      return loadWithRightPackageLoader(cname, expectedType, (BiFunction<SolrResourceLoader, String ,Class<? extends T>>) (loader, name) -> loader.findClass(name, expectedType));
+      return loadWithRightPackageLoader(cname, expectedType, (BiFunction<SolrClassLoader, String ,Class<? extends T>>) (loader, name) -> loader.findClass(name, expectedType));
     }
 
     @Override
@@ -599,7 +598,7 @@ public class IndexSchema implements Closeable {
       final FieldTypePluginLoader typeLoader = new FieldTypePluginLoader(this, fieldTypes, schemaAware);
       expression = getFieldTypeXPathExpressions();
       NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
-      typeLoader.load(pluginLoader, nodes);
+      typeLoader.load(classLoader, nodes);
 
       // load the fields
       Map<String,Boolean> explicitRequiredProp = loadFields(document, xpath);
@@ -610,7 +609,7 @@ public class IndexSchema implements Closeable {
       if (similarityFactory == null) {
         final Class<?> simClass = SchemaSimilarityFactory.class;
         // use the loader to ensure proper SolrCoreAware handling
-        similarityFactory = pluginLoader.newInstance(simClass.getName(), SimilarityFactory.class);
+        similarityFactory = classLoader.newInstance(simClass.getName(), SimilarityFactory.class);
         similarityFactory.init(new ModifiableSolrParams());
       } else {
         isExplicitSimilarity = true;
@@ -1084,7 +1083,7 @@ public class IndexSchema implements Closeable {
     dynamicCopyFields = temp;
   }
 
-  static SimilarityFactory readSimilarity(PluginLoader loader, Node node) {
+  static SimilarityFactory readSimilarity(SolrClassLoader loader, Node node) {
     if (node==null) {
       return null;
     } else {
@@ -2096,8 +2095,8 @@ public class IndexSchema implements Closeable {
 
   @Override
   public void close() throws IOException {
-    if (pluginLoader instanceof PackageAwarePluginLoader) {
-      ((PackageAwarePluginLoader) pluginLoader).close();
+    if (classLoader instanceof PackageAwarePluginLoader) {
+      ((PackageAwarePluginLoader) classLoader).close();
     }
   }
 }
diff --git a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
index d65ece9..3256ff2 100644
--- a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
@@ -1272,7 +1272,7 @@ public final class ManagedIndexSchema extends IndexSchema {
     Map<String,FieldType> newFieldTypes = new HashMap<>();
     List<SchemaAware> schemaAwareList = new ArrayList<>();
     FieldTypePluginLoader typeLoader = new FieldTypePluginLoader(this, newFieldTypes, schemaAwareList);
-    typeLoader.loadSingle(pluginLoader, FieldTypeXmlAdapter.toNode(options));
+    typeLoader.loadSingle(classLoader, FieldTypeXmlAdapter.toNode(options));
     FieldType ft = newFieldTypes.get(typeName);
     if (!schemaAwareList.isEmpty())
       schemaAware.addAll(schemaAwareList);
diff --git a/solr/core/src/java/org/apache/solr/schema/PreAnalyzedField.java b/solr/core/src/java/org/apache/solr/schema/PreAnalyzedField.java
index 9a5683f..e9979306 100644
--- a/solr/core/src/java/org/apache/solr/schema/PreAnalyzedField.java
+++ b/solr/core/src/java/org/apache/solr/schema/PreAnalyzedField.java
@@ -80,7 +80,7 @@ public class PreAnalyzedField extends TextField implements HasImplicitIndexAnaly
         parser = new SimplePreAnalyzedParser();
       } else {
         try {
-          Class<? extends PreAnalyzedParser> implClazz = schema.getPluginLoader().findClass(implName, PreAnalyzedParser.class);
+          Class<? extends PreAnalyzedParser> implClazz = schema.getSolrClassLoader().findClass(implName, PreAnalyzedParser.class);
           Constructor<?> c = implClazz.getConstructor(new Class<?>[0]);
           parser = (PreAnalyzedParser) c.newInstance(new Object[0]);
         } catch (Exception e) {
diff --git a/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
index 5be8ab4..a1081b4 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
@@ -23,7 +23,7 @@ import java.util.Objects;
 
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.core.PluginLoader;
+import org.apache.solr.core.SolrClassLoader;
 import org.apache.solr.util.DOMUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -86,7 +86,7 @@ public abstract class AbstractPluginLoader<T>
    * @param node - the XML node defining this plugin
    */
   @SuppressWarnings("unchecked")
-  protected T create(PluginLoader loader, String name, String className, Node node ) throws Exception
+  protected T create(SolrClassLoader loader, String name, String className, Node node ) throws Exception
   {
     return loader.newInstance(className, pluginClassType, getDefaultPackages());
   }
@@ -135,7 +135,7 @@ public abstract class AbstractPluginLoader<T>
    * If a default element is defined, it will be returned from this function.
    * 
    */
-  public T load(PluginLoader loader, NodeList nodes )
+  public T load(SolrClassLoader loader, NodeList nodes )
   {
     List<PluginInitInfo> info = new ArrayList<>();
     T defaultPlugin = null;
@@ -223,7 +223,7 @@ public abstract class AbstractPluginLoader<T>
    * The created class for the plugin will be returned from this function.
    * 
    */
-  public T loadSingle(PluginLoader loader, Node node) {
+  public T loadSingle(SolrClassLoader loader, Node node) {
     List<PluginInitInfo> info = new ArrayList<>();
     T plugin = null;