in plugins/src/main/scala/org/apache/toree/plugins/PluginManager.scala [124:151]
def loadPlugin(name: String, klass: Class[_]): Try[Plugin] = {
if (isActive(name)) {
logger.warn(s"Skipping $name as already actively loaded!")
Success(activePlugins(name))
} else {
logger.debug(s"Loading $name as plugin")
// Assume that each plugin has an empty constructor
// https://docs.oracle.com/javase/9/docs/api/java/lang/Class.html#newInstance--
val tryInstance = Try(klass.getDeclaredConstructor().newInstance())
// Log failures
tryInstance.failed.foreach(ex =>
logger.error(s"Failed to load plugin $name", ex))
// Attempt to cast as plugin type to add to active plugins
tryInstance.transform({
case p: Plugin =>
p.internalPluginManager_=(this)
activePlugins.put(p.name, p)
Success(p)
case x =>
val name = x.getClass.getName
logger.warn(s"Unknown plugin type '$name', ignoring!")
Failure(new UnknownPluginTypeException(name))
}, f => Failure(f))
}
}