ranger插件的初始化
随手记录, 主要都是在配置文件里写好类名, 然后classFor读取记载.
ranger init chained plugin
利用classLoader, 实例化配置里的插件.
public class RangerBasePlugin {
this.chainedPlugins = initChainedPlugins();
private List<RangerChainedPlugin> initChainedPlugins() {
List<RangerChainedPlugin> ret = new ArrayList<>();
String chainedServicePropPrefix = pluginConfig.getPropertyPrefix() + ".chained.services";
for (String chainedService : StringUtil.toList(pluginConfig.get(chainedServicePropPrefix))) {
if (StringUtils.isBlank(chainedService)) {
continue;
}
String className = pluginConfig.get(chainedServicePropPrefix + "." + chainedService + ".impl");
if (StringUtils.isBlank(className)) {
LOG.error("Ignoring chained service " + chainedService + ": no impl class specified");
continue;
}
try {
@SuppressWarnings("unchecked")
Class<RangerChainedPlugin> pluginClass = (Class<RangerChainedPlugin>) Class.forName(className);
RangerChainedPlugin chainedPlugin = pluginClass.getConstructor(RangerBasePlugin.class, String.class).newInstance(this, chainedService);
ret.add(chainedPlugin);
} catch (Throwable t) {
LOG.error("initChainedPlugins(): error instantiating plugin impl " + className, t);
}
}
return ret;
}
}
audit provider
audit provider 插件, 也是靠配置里名称进行实例化
package org.apache.ranger.audit.provider;
private AuditHandler getProviderFromConfig(Properties props,
String propPrefix, String providerName, AuditHandler consumer) {
AuditHandler provider = null;
String className = MiscUtil.getStringProperty(props, propPrefix + "."
+ BaseAuditHandler.PROP_CLASS_NAME);
if (className != null && !className.isEmpty()) {
try {
Class<?> handlerClass = Class.forName(className);
if (handlerClass.isAssignableFrom(AuditQueue.class)) {
// Queue class needs consumer
handlerClass.getDeclaredConstructor(AuditHandler.class)
.newInstance(consumer);
} else {
provider = (AuditHandler) Class.forName(className)
.newInstance();
}
} catch (Exception e) {
LOG.error("Can't instantiate audit class for providerName="
+ providerName + ", className=" + className
+ ", propertyPrefix=" + propPrefix, e);
}
}
}