use of com.qlangtech.tis.extension.PluginManager in project plugins by qlangtech.
the class TISFlinClassLoaderFactory method buildServerLoaderFactory.
@Override
public BlobLibraryCacheManager.ClassLoaderFactory buildServerLoaderFactory(FlinkUserCodeClassLoaders.ResolveOrder classLoaderResolveOrder, String[] alwaysParentFirstPatterns, @Nullable Consumer<Throwable> exceptionHander, boolean checkClassLoaderLeak) {
if (Boolean.getBoolean(SKIP_CLASSLOADER_FACTORY_CREATION)) {
return (urls) -> FlinkUserCodeClassLoaders.create(classLoaderResolveOrder, urls, TISFlinClassLoaderFactory.class.getClassLoader(), alwaysParentFirstPatterns, NOOP_EXCEPTION_HANDLER, checkClassLoaderLeak);
}
this.makeDataDirUseable();
logger.info("buildServerLoader classLoaderResolveOrder:{}", classLoaderResolveOrder);
return new BlobLibraryCacheManager.DefaultClassLoaderFactory(classLoaderResolveOrder, alwaysParentFirstPatterns, exceptionHander, checkClassLoaderLeak) {
@Override
public URLClassLoader createClassLoader(URL[] libraryURLs) {
try {
String appName = getTisAppName(libraryURLs);
logger.info("start createClassLoader of app:" + appName);
TIS.clean();
synchronizeIncrPluginsFromRemoteRepository(appName);
PluginManager pluginManager = TIS.get().getPluginManager();
return new TISChildFirstClassLoader(pluginManager.uberClassLoader, libraryURLs, this.getParentClassLoader(), this.alwaysParentFirstPatterns, this.classLoadingExceptionHandler);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
};
}
use of com.qlangtech.tis.extension.PluginManager in project tis by qlangtech.
the class TestComponentMeta method testSynchronizePluginsPackageFromRemote.
/**
* 通过 执行 synchronizePluginsPackageFromRemote 可以动态加载类
*/
public void testSynchronizePluginsPackageFromRemote() {
// 加载完成之后,本地class 要能够加载出来
PluginManager pluginManager = TIS.get().getPluginManager();
String MySQLV5DataSourceFactory = "com.qlangtech.tis.plugin.ds.mysql.MySQLV5DataSourceFactory";
try {
pluginManager.uberClassLoader.loadClass(MySQLV5DataSourceFactory);
fail("shall not find class");
} catch (ClassNotFoundException e) {
}
ComponentMeta componentMeta = new ComponentMeta(Collections.emptyList()) {
public Set<XStream2.PluginMeta> loadPluginMeta() {
XStream2.PluginMeta pluginMeta = new XStream2.PluginMeta("tis-ds-mysql-v5-plugin", "2.3.0");
return Collections.singleton(pluginMeta);
}
};
componentMeta.synchronizePluginsPackageFromRemote();
try {
assertNotNull(pluginManager.uberClassLoader.loadClass(MySQLV5DataSourceFactory));
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
Aggregations