Repository: kylin Updated Branches: refs/heads/master b5bed2497 -> b075d25fa
Revert "minor, refactor code to ease integrate with coding tool" This reverts commit b5bed249725fdc03a945b1fff2f209770c8f26dc. Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/b075d25f Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/b075d25f Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/b075d25f Branch: refs/heads/master Commit: b075d25fab401d30f13dfcb17425ee72a07c004e Parents: b5bed24 Author: Li Yang <[email protected]> Authored: Thu Jun 30 10:43:39 2016 +0800 Committer: Li Yang <[email protected]> Committed: Thu Jun 30 10:43:39 2016 +0800 ---------------------------------------------------------------------- .../apache/kylin/common/KylinConfigBase.java | 5 +++ .../realization/RealizationRegistry.java | 39 +++++++------------- 2 files changed, 19 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/b075d25f/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java index e75609c..84c4db9 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java @@ -201,6 +201,11 @@ abstract public class KylinConfigBase implements Serializable { return new StringBuffer(root).append(StringUtils.replaceChars(getMetadataUrlPrefix(), ':', '-')).append("/").toString(); } + public String[] getRealizationProviders() { + return getOptionalStringArray("kylin.realization.providers", // + new String[] { "org.apache.kylin.cube.CubeManager", "org.apache.kylin.storage.hybrid.HybridManager", "org.apache.kylin.invertedindex.IIManager" }); + } + public CliCommandExecutor getCliCommandExecutor() throws IOException { CliCommandExecutor exec = new CliCommandExecutor(); if (getRunAsRemoteCommand()) { http://git-wip-us.apache.org/repos/asf/kylin/blob/b075d25f/core-metadata/src/main/java/org/apache/kylin/metadata/realization/RealizationRegistry.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/RealizationRegistry.java b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/RealizationRegistry.java index b317444..e6b1a86 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/RealizationRegistry.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/RealizationRegistry.java @@ -25,6 +25,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.common.util.ClassUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -80,24 +81,19 @@ public class RealizationRegistry { providers = Maps.newConcurrentMap(); // use reflection to load providers - // Note: keep "Class.forName" and "getMethod" on same line, allow detection of the use of reflection - try { - IRealizationProvider p = (IRealizationProvider) Class.forName("org.apache.kylin.cube.CubeManager").getMethod("getInstance", KylinConfig.class).invoke(null, config); - providers.put(p.getRealizationType(), p); - } catch (Exception | NoClassDefFoundError e) { - logEx(e); - } - try { - IRealizationProvider p = (IRealizationProvider) Class.forName("org.apache.kylin.storage.hybrid.HybridManager").getMethod("getInstance", KylinConfig.class).invoke(null, config); - providers.put(p.getRealizationType(), p); - } catch (Exception | NoClassDefFoundError e) { - logEx(e); - } - try { - IRealizationProvider p = (IRealizationProvider) Class.forName("org.apache.kylin.invertedindex.IIManager").getMethod("getInstance", KylinConfig.class).invoke(null, config); - providers.put(p.getRealizationType(), p); - } catch (Exception | NoClassDefFoundError e) { - logEx(e); + String[] providerNames = config.getRealizationProviders(); + for (String clsName : providerNames) { + try { + Class<? extends IRealizationProvider> cls = ClassUtil.forName(clsName, IRealizationProvider.class); + IRealizationProvider p = (IRealizationProvider) cls.getMethod("getInstance", KylinConfig.class).invoke(null, config); + providers.put(p.getRealizationType(), p); + + } catch (Exception | NoClassDefFoundError e) { + if (e instanceof ClassNotFoundException || e instanceof NoClassDefFoundError) + logger.warn("Failed to create realization provider " + e); + else + logger.error("Failed to create realization provider", e); + } } if (providers.isEmpty()) @@ -106,13 +102,6 @@ public class RealizationRegistry { logger.info("RealizationRegistry is " + providers); } - private void logEx(Throwable e) { - if (e instanceof ClassNotFoundException || e instanceof NoClassDefFoundError) - logger.warn("Failed to create realization provider ", e); - else - logger.error("Failed to create realization provider", e); - } - public Set<RealizationType> getRealizationTypes() { return Collections.unmodifiableSet(providers.keySet()); }
