Search in sources :

Example 1 with TIS

use of com.qlangtech.tis.TIS in project plugins by qlangtech.

the class TestPlugin method testReceiceRequestFromClient.

public void testReceiceRequestFromClient() throws Exception {
    com.alibaba.fastjson.JSONArray jsonArray = null;
    com.alibaba.fastjson.JSONObject jsonObject = null;
    com.alibaba.fastjson.JSONObject valJ = null;
    String impl = null;
    PropertyType attrDesc = null;
    Descriptor descriptor = null;
    JSONArray vals = null;
    String attr = null;
    String attrVal = null;
    TIS tis = TIS.get();
    // IncrComponent incrComponent = tis.loadIncrComponent(collection);
    // incrComponent.setMqListenerFactory();
    Describable describable = null;
    try (InputStream input = TestPlugin.class.getResourceAsStream("RocketMQListenerFactory.json")) {
        assertNotNull(input);
        jsonArray = JSONArray.parseArray(IOUtils.toString(input, TisUTF8.getName()));
        for (int i = 0; i < jsonArray.size(); i++) {
            // 创建一个item
            jsonObject = jsonArray.getJSONObject(i);
            describable = (Describable) parseDescribable(jsonObject).instance;
        }
    }
    assertNotNull(describable);
    RocketMQListenerFactory mqListenerFactory = (RocketMQListenerFactory) describable;
    assertEquals(MQ_TOPIC, mqListenerFactory.getMqTopic());
    assertEquals(NamesrvAddr, mqListenerFactory.getNamesrvAddr());
    assertEquals(consumeId, mqListenerFactory.consumeName);
    assertNotNull(mqListenerFactory.getDeserialize());
}
Also used : Describable(com.qlangtech.tis.extension.Describable) InputStream(java.io.InputStream) JSONArray(com.alibaba.fastjson.JSONArray) PropertyType(com.qlangtech.tis.extension.impl.PropertyType) JSONArray(com.alibaba.fastjson.JSONArray) Descriptor(com.qlangtech.tis.extension.Descriptor) JSONObject(com.alibaba.fastjson.JSONObject) RocketMQListenerFactory(com.qlangtech.async.message.client.consumer.RocketMQListenerFactory) TIS(com.qlangtech.tis.TIS)

Example 2 with TIS

use of com.qlangtech.tis.TIS in project tis by qlangtech.

the class PluginAction method doGetExtensionPointShow.

public void doGetExtensionPointShow(Context context) throws Exception {
    TIS tis = TIS.get();
    this.setBizResult(context, tis.loadGlobalComponent().isShowExtensionDetail());
}
Also used : TIS(com.qlangtech.tis.TIS)

Example 3 with TIS

use of com.qlangtech.tis.TIS in project tis by qlangtech.

the class PluginAction method doSwitchExtensionPointShow.

/**
 * @param context
 * @throws Exception
 */
public void doSwitchExtensionPointShow(Context context) throws Exception {
    boolean open = this.getBoolean("switch");
    TIS tis = TIS.get();
    tis.saveComponent(tis.loadGlobalComponent().setShowExtensionDetail(open));
}
Also used : TIS(com.qlangtech.tis.TIS)

Example 4 with TIS

use of com.qlangtech.tis.TIS in project tis by qlangtech.

the class GenerateDAOAndIncrScript method generateDAOScript.

// private void compileAndPackage(Context context, IControlMsgHandler msgHandler, Map<DBNode, List<String>> dbNameMap, File sourceRoot) throws Exception {
// /**
// * *********************************************************************************
// * 编译增量脚本
// * ***********************************************************************************
// */
// if (this.streamScriptCompile(sourceRoot, dbNameMap.keySet())) {
// msgHandler.addErrorMessage(context, "增量脚本编译失败");
// msgHandler.addFieldError(context, "incr_script_compile_error", "error");
// return;
// }
// /**
// * *********************************************************************************
// * 对scala代码进行 打包
// * ***********************************************************************************
// */
// JavaCompilerProcess.SourceGetterStrategy getterStrategy
// = new JavaCompilerProcess.SourceGetterStrategy(false, "/src/main/scala", ".scala") {
// 
// @Override
// public JavaFileObject.Kind getSourceKind() {
// // 没有scala的类型,暂且用other替换一下
// return JavaFileObject.Kind.OTHER;
// }
// 
// @Override
// public MyJavaFileObject processMyJavaFileObject(MyJavaFileObject fileObj) {
// try {
// try (InputStream input = FileUtils.openInputStream(fileObj.getSourceFile())) {
// IOUtils.copy(input, fileObj.openOutputStream());
// }
// } catch (IOException e) {
// throw new RuntimeException(e);
// }
// return fileObj;
// }
// };
// //
// JavaCompilerProcess.FileObjectsContext fileObjects = JavaCompilerProcess.getFileObjects(sourceRoot, getterStrategy);
// final JavaCompilerProcess.FileObjectsContext compiledCodeContext = new JavaCompilerProcess.FileObjectsContext();
// File streamScriptClassesDir = new File(sourceRoot, "classes");
// appendClassFile(streamScriptClassesDir, compiledCodeContext, null);
// // 取得spring配置文件相关resourece
// JavaCompilerProcess.FileObjectsContext xmlConfigs = indexStreamCodeGenerator.getSpringXmlConfigsObjectsContext();
// 
// JavaCompilerProcess.packageJar(
// sourceRoot, StreamContextConstant.getIncrStreamJarName(indexStreamCodeGenerator.collection)
// , fileObjects, compiledCodeContext, xmlConfigs);
// }
private void generateDAOScript(Context context, Map<Integer, Long> dependencyDbs) throws Exception {
    final Map<DBNode, List<String>> dbNameMap = Collections.unmodifiableMap(indexStreamCodeGenerator.getDbTables());
    if (dbNameMap.size() < 1) {
        throw new IllegalStateException("dbNameMap size can not small than 1");
    }
    if (dbNameMap.size() != dependencyDbs.size()) {
        throw new IllegalStateException("dbNameMap.size() " + dbNameMap.size() + " != dependencyDbs.size()" + dependencyDbs.size());
    }
    // long timestampp;// = Long.parseLong(ManageUtils.formatNowYyyyMMddHHmmss());
    DataSourceFactoryPluginStore dbPluginStore = null;
    final KoubeiProgressCallback koubeiProgressCallback = new KoubeiProgressCallback();
    List<IbatorContext> daoFacadeList = Lists.newArrayList();
    Long lastOptime = null;
    List<DataSourceFactoryPluginStore> leakFacadeDsPlugin = Lists.newArrayList();
    for (Map.Entry<DBNode, List<String>> /* dbname */
    entry : dbNameMap.entrySet()) {
        dbPluginStore = getFacadePluginStore(entry);
        if (dbPluginStore.getPlugin() == null) {
            leakFacadeDsPlugin.add(dbPluginStore);
        }
    }
    if (leakFacadeDsPlugin.size() > 0) {
        this.msgHandler.addErrorMessage(context, "数据库:" + leakFacadeDsPlugin.stream().map((p) -> "'" + p.getDSKey().keyVal + "'").collect(Collectors.joining(",")) + "还没有定义对应的Facade数据源");
        return;
    }
    for (Map.Entry<DBNode, List<String>> /* dbname */
    entry : dbNameMap.entrySet()) {
        lastOptime = dependencyDbs.get(entry.getKey().getDbId());
        if (lastOptime == null) {
            throw new IllegalStateException("db " + entry.getKey() + " is not find in dependency dbs:" + dbNameMap.keySet().stream().map((r) -> "[" + r.getDbId() + ":" + r.getDbName() + "]").collect(Collectors.joining(",")));
        }
        long timestamp = lastOptime;
        dbPluginStore = getFacadePluginStore(entry);
        FacadeDataSource facadeDataSource = dbPluginStore.createFacadeDataSource();
        IbatorProperties properties = new IbatorProperties(facadeDataSource, entry.getValue(), timestamp);
        entry.getKey().setTimestampVer(timestamp);
        if (entry.getValue().size() < 1) {
            throw new IllegalStateException("db:" + entry.getKey() + " relevant tablesList can not small than 1");
        }
        KoubeiIbatorRunner runner = new KoubeiIbatorRunner(properties) {

            @Override
            protected KoubeiProgressCallback getProgressCallback() {
                return koubeiProgressCallback;
            }
        };
        IbatorContext ibatorContext = runner.getIbatorContext();
        daoFacadeList.add(ibatorContext);
        try {
            if (!properties.isDaoScriptCreated()) {
                // 生成源代码
                runner.build();
                // dao script 脚本已经创建不需要再创建了
                // if (compilerAndPackage) {
                // 直接生成就行了,别管当前是不是要编译了
                File classpathDir = new File(Config.getDataDir(), "libs/tis-ibatis");
                // File classpathDir = new File("/Users/mozhenghua/Desktop/j2ee_solution/project/tis-ibatis/target/dependency");
                JavaCompilerProcess daoCompilerPackageProcess = new JavaCompilerProcess(facadeDataSource.dbMeta, properties.getDaoDir(), classpathDir);
                // 打包,生成jar包
                daoCompilerPackageProcess.compileAndBuildJar();
            // }
            }
        } catch (Exception e) {
            // 将文件夹清空
            FileUtils.forceDelete(properties.getDaoDir());
            throw new RuntimeException("dao path:" + properties.getDaoDir(), e);
        }
    }
    if (daoFacadeList.size() < 1) {
        throw new IllegalStateException("daoFacadeList can not small than 1");
    }
    daoFacadeList.stream().forEach((r) -> {
        FacadeContext fc = new FacadeContext();
        fc.setFacadeInstanceName(r.getFacadeInstanceName());
        fc.setFullFacadeClassName(r.getFacadeFullClassName());
        fc.setFacadeInterfaceName(r.getFacadeInterface());
        indexStreamCodeGenerator.getFacadeList().add(fc);
    });
// return dbNameMap;
}
Also used : PluginStore(com.qlangtech.tis.plugin.PluginStore) DataSourceFactoryPluginStore(com.qlangtech.tis.plugin.ds.DataSourceFactoryPluginStore) TIS(com.qlangtech.tis.TIS) PostedDSProp(com.qlangtech.tis.plugin.ds.PostedDSProp) DbScope(com.qlangtech.tis.offline.DbScope) Context(com.alibaba.citrus.turbine.Context) DBNode(com.qlangtech.tis.sql.parser.DBNode) Config(com.qlangtech.tis.manage.common.Config) Lists(com.google.common.collect.Lists) Map(java.util.Map) KoubeiProgressCallback(com.koubei.abator.KoubeiProgressCallback) IPluginStore(com.qlangtech.tis.plugin.IPluginStore) FacadeContext(com.qlangtech.tis.sql.parser.stream.generate.FacadeContext) StreamContextConstant(com.qlangtech.tis.manage.common.incr.StreamContextConstant) IncrStreamFactory(com.qlangtech.tis.plugin.incr.IncrStreamFactory) IbatorProperties(com.qlangtech.tis.coredefine.module.action.IbatorProperties) JavaCompilerProcess(com.qlangtech.tis.compiler.java.JavaCompilerProcess) IOutputEntry(com.qlangtech.tis.compiler.java.IOutputEntry) FileUtils(org.apache.commons.io.FileUtils) IOException(java.io.IOException) KoubeiIbatorRunner(com.koubei.abator.KoubeiIbatorRunner) IPluginContext(com.qlangtech.tis.util.IPluginContext) Collectors(java.util.stream.Collectors) FacadeDataSource(com.qlangtech.tis.plugin.ds.FacadeDataSource) File(java.io.File) IndexIncrStatus(com.qlangtech.tis.coredefine.module.action.IndexIncrStatus) Objects(java.util.Objects) List(java.util.List) HeteroEnum(com.qlangtech.tis.util.HeteroEnum) IControlMsgHandler(com.qlangtech.tis.runtime.module.misc.IControlMsgHandler) IbatorContext(org.apache.ibatis.ibator.config.IbatorContext) Collections(java.util.Collections) KoubeiIbatorRunner(com.koubei.abator.KoubeiIbatorRunner) FacadeDataSource(com.qlangtech.tis.plugin.ds.FacadeDataSource) JavaCompilerProcess(com.qlangtech.tis.compiler.java.JavaCompilerProcess) DataSourceFactoryPluginStore(com.qlangtech.tis.plugin.ds.DataSourceFactoryPluginStore) IOException(java.io.IOException) IbatorContext(org.apache.ibatis.ibator.config.IbatorContext) DBNode(com.qlangtech.tis.sql.parser.DBNode) KoubeiProgressCallback(com.koubei.abator.KoubeiProgressCallback) List(java.util.List) Map(java.util.Map) File(java.io.File) IbatorProperties(com.qlangtech.tis.coredefine.module.action.IbatorProperties) FacadeContext(com.qlangtech.tis.sql.parser.stream.generate.FacadeContext)

Example 5 with TIS

use of com.qlangtech.tis.TIS in project plugins by qlangtech.

the class TISFlinClassLoaderFactory method buildClientLoaderFactory.

// public static void main(String[] args) throws Exception {
// File f = new File("/opt/data/tis/cfg_repo/streamscript/mysql_elastic/20210629113249/mysql_elastic-inc.jar");
// try (JarInputStream jarReader = new JarInputStream(FileUtils.openInputStream(f))) {
// Manifest manifest = jarReader.getManifest();
// Attributes pluginInventory = manifest.getAttributes("plugin_inventory");
// if (pluginInventory == null) {
// throw new IllegalStateException("plugin inventory can not be empty in lib:" + f);
// }
// for (Map.Entry<Object, Object> pluginDesc : pluginInventory.entrySet()) {
// //  pluginManager.dynamicLoadPlugin(String.valueOf(pluginDesc.getKey()));
// }
// }
// }
@Override
public BlobLibraryCacheManager.ClassLoaderFactory buildClientLoaderFactory(FlinkUserCodeClassLoaders.ResolveOrder classLoaderResolveOrder, String[] alwaysParentFirstPatterns, @Nullable Consumer<Throwable> exceptionHander, boolean checkClassLoaderLeak) {
    this.makeDataDirUseable();
    ClassLoader parentClassLoader = TIS.get().getPluginManager().uberClassLoader;
    return (libraryURLs) -> {
        return FlinkUserCodeClassLoaders.create(classLoaderResolveOrder, libraryURLs, parentClassLoader, alwaysParentFirstPatterns, NOOP_EXCEPTION_HANDLER, checkClassLoaderLeak);
    };
}
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) URLClassLoader(java.net.URLClassLoader)

Aggregations

TIS (com.qlangtech.tis.TIS)8 JSONArray (com.alibaba.fastjson.JSONArray)2 JSONObject (com.alibaba.fastjson.JSONObject)2 Lists (com.google.common.collect.Lists)2 Config (com.qlangtech.tis.manage.common.Config)2 IncrStreamFactory (com.qlangtech.tis.plugin.incr.IncrStreamFactory)2 IOException (java.io.IOException)2 List (java.util.List)2 Map (java.util.Map)2 FileUtils (org.apache.commons.io.FileUtils)2 Context (com.alibaba.citrus.turbine.Context)1 KoubeiIbatorRunner (com.koubei.abator.KoubeiIbatorRunner)1 KoubeiProgressCallback (com.koubei.abator.KoubeiProgressCallback)1 RocketMQListenerFactory (com.qlangtech.async.message.client.consumer.RocketMQListenerFactory)1 MQListenerFactory (com.qlangtech.tis.async.message.client.consumer.impl.MQListenerFactory)1 IOutputEntry (com.qlangtech.tis.compiler.java.IOutputEntry)1 JavaCompilerProcess (com.qlangtech.tis.compiler.java.JavaCompilerProcess)1 IbatorProperties (com.qlangtech.tis.coredefine.module.action.IbatorProperties)1 IndexIncrStatus (com.qlangtech.tis.coredefine.module.action.IndexIncrStatus)1 Describable (com.qlangtech.tis.extension.Describable)1