Search in sources :

Example 1 with PluginManager

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);
            }
        }
    };
}
Also used : Manifest(java.util.jar.Manifest) ComponentMeta(com.qlangtech.tis.plugin.ComponentMeta) URL(java.net.URL) TIS(com.qlangtech.tis.TIS) LoggerFactory(org.slf4j.LoggerFactory) BlobLibraryCacheManager(org.apache.flink.runtime.execution.librarycache.BlobLibraryCacheManager) NOOP_EXCEPTION_HANDLER(org.apache.flink.util.FlinkUserCodeClassLoader.NOOP_EXCEPTION_HANDLER) StringUtils(org.apache.commons.lang3.StringUtils) Config(com.qlangtech.tis.manage.common.Config) URLClassLoader(java.net.URLClassLoader) Lists(com.google.common.collect.Lists) CenterResource(com.qlangtech.tis.manage.common.CenterResource) Map(java.util.Map) JarInputStream(java.util.jar.JarInputStream) MQListenerFactory(com.qlangtech.tis.async.message.client.consumer.impl.MQListenerFactory) KeyedPluginStore(com.qlangtech.tis.plugin.KeyedPluginStore) Nullable(javax.annotation.Nullable) TISSinkFactory(com.qlangtech.tis.plugin.incr.TISSinkFactory) IncrStreamFactory(com.qlangtech.tis.plugin.incr.IncrStreamFactory) ClassLoaderFactoryBuilder(org.apache.flink.runtime.execution.librarycache.ClassLoaderFactoryBuilder) Logger(org.slf4j.Logger) FlinkUserCodeClassLoaders(org.apache.flink.runtime.execution.librarycache.FlinkUserCodeClassLoaders) FileUtils(org.apache.commons.io.FileUtils) IOException(java.io.IOException) PluginManager(com.qlangtech.tis.extension.PluginManager) Attributes(java.util.jar.Attributes) Consumer(java.util.function.Consumer) List(java.util.List) IRepositoryResource(com.qlangtech.tis.plugin.IRepositoryResource) PluginManager(com.qlangtech.tis.extension.PluginManager) IOException(java.io.IOException)

Example 2 with PluginManager

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);
    }
}
Also used : PluginManager(com.qlangtech.tis.extension.PluginManager) XStream2(com.qlangtech.tis.util.XStream2)

Aggregations

PluginManager (com.qlangtech.tis.extension.PluginManager)2 Lists (com.google.common.collect.Lists)1 TIS (com.qlangtech.tis.TIS)1 MQListenerFactory (com.qlangtech.tis.async.message.client.consumer.impl.MQListenerFactory)1 CenterResource (com.qlangtech.tis.manage.common.CenterResource)1 Config (com.qlangtech.tis.manage.common.Config)1 ComponentMeta (com.qlangtech.tis.plugin.ComponentMeta)1 IRepositoryResource (com.qlangtech.tis.plugin.IRepositoryResource)1 KeyedPluginStore (com.qlangtech.tis.plugin.KeyedPluginStore)1 IncrStreamFactory (com.qlangtech.tis.plugin.incr.IncrStreamFactory)1 TISSinkFactory (com.qlangtech.tis.plugin.incr.TISSinkFactory)1 XStream2 (com.qlangtech.tis.util.XStream2)1 IOException (java.io.IOException)1 URL (java.net.URL)1 URLClassLoader (java.net.URLClassLoader)1 List (java.util.List)1 Map (java.util.Map)1 Consumer (java.util.function.Consumer)1 Attributes (java.util.jar.Attributes)1 JarInputStream (java.util.jar.JarInputStream)1