IIDP 平台应用市场功能技术文档

概述

本文档详细描述了 IIDP 平台应用市场的相关功能,包括应用的上传、上架、安装、更新、卸载和删除的具体流程和技术实现。以下内容基于单机版平台的功能实现。

1. 应用上传

功能描述

上传应用的 JAR 包到 meta_attachment 中,对于重复的文件也会当作新的文件处理。优化建议:可以实现一键秒传功能,即如果文件的 MD5 值相同则无需重复上传。

实现细节

  1. 方法签名
    public String putObject(InputStream inputStream, String fileType, String originalFilename, String bucketName)
  2. 上传流程
    • 最终调用 base_file 中的 upload 方法。
    • meta_attachment 中新增一条记录。
    • 点击保存后,调用 create 方法,在应用市场创建一条记录,并设置 app_marketnoUp

点击展开puml
@startuml
start
:浏览器端上传jar包和前端zip包;
:调用 /file/upload 接口;

:调用 meta_attachment 模型的 upload 方法(这个方法继承自base_file模型);
:根据 minio 配置信息构建 minioTemplate;
:调用 putObject 上传到 minio apps桶下;

:计算 md5 值;
:在 meta_attachment create 新增一条附件记录;

:返回到浏览器;

:用户点击保存;
:调用 meta_app_store 元模型upload 方法;

:将前端上传的 jar 包下载到 apps/uploads 目录下;
:获取 app 的信息 (name, version, summary 等);

:在 meta_app_store 新增一条记录,并设置 state 为 noup;

if (app 有依赖?) then (是)
    :在 meta_app_store_dependency 表中新增一条或多条依赖的 app id 信息;
endif

stop
@enduml

2. 应用上架

功能描述

计算依赖图,检查依赖的应用是否在应用市场中,修改应用状态为 up。此过程相当于一次干运行(dry run)。

实现细节

  1. 依赖检查:确保所有依赖的应用均在应用市场中。
  2. 状态修改:将应用状态设置为 up

点击展开puml
  @startuml
start
:如果是单个上架;
: 获取整个应用市场的app,并计算当前待上架app的依赖图;
: 依次检查待上架app的依赖是否已经存在;


if (存在?) then (是)
    : 修改app_market状态为up;
else (否)
    : 返回上架失败;
endif

stop
@enduml

3. 应用安装

功能描述

应用必须先上架后才能安装。安装过程中会获取依赖的应用,初始化策略注册菜单的权限策略,加载应用的配置信息和系统变量,并将状态修改为 installed

实现细节

  1. 安装方法
    • installApps
    • 获取依赖的应用,调用 buildAppDataInfo 方法。
    • 调用 doInstallApps 方法。
    • 调用 postInstall 方法。
    • 加载种子数据 loadSeedData
  2. 状态修改:将应用状态设置为 installed

展开puml
@startuml
start
: 如果是单机模式;

: 从应用市场获取待安装的app信息;

: 根据模式获取loader,这是是单机版的loader;

: 从应用市场获取待安装的app的依赖图,并获取依赖app;

if (依赖的app存在?) then (是)
    : 所有的依赖,计算需要安装的引用,更新的应用,初始化: 插入应用,更改应用,初始化菜单等;
    : 下载新jar包;
    : 恢复之前软删除的其他资源,比如menu、view等;
    : doInstallApps、postInstall 统一的方法;
    : 调用安装事件 startUpEvent;
else (否)
    : 返回上架失败;
endif

stop
@enduml

4. 应用卸载

功能描述

除了卸载选中的当前应用,还需要卸载其所依赖的应用。修改数据状态为 uninstalled,软删除应用的其他资源状态(如菜单、视图等),清理内存中的相关信息。

实现细节

  1. 状态修改:将应用状态设置为 uninstalled
  2. 资源清理
    • 移除内存信息。
    • 清理 appContainer 中的 metasmodels
    • 清理 appDataInfoMapappContainerMap
    • 移除类加载器。
    • 清理 appContainerMap 中的 finalModelMap
    • 移除自定义系统变量。
  3. 重新安装:安装需要重装的应用(按安装流程)。

展开puml
@startuml
start
: 如果是单机模式;

: 初始化当前模式的appLoader;

: 调用loader的uninstallApps方法;

: 获取待卸载的 appGroupContainer,以及 graphs 信息;

: 设置安装状态为 uninstalled;

: 软删除应用的其他资源状态,比如menue、view等;

: 清理出台metas,清理models,以及清理appDataInfoMap和 appContainerMap该app的key;

: 清理该app的类加载器,并设置为null;

: 清理 finalModelMap 终态信息;

: 移除自定义变量;

: 计算需要重装的app,并执行统一的 doInstallApps;


stop
@enduml

5. 应用更新

功能描述

对比应用市场的 MD5 值和已安装的 MD5 值(前提是应用已上架),如果不相等则激活更新。注意:仅在有新版本时提示更新,而不是仅基于 MD5 不相等。

实现细节

  1. MD5 比对:如果上架的应用版本低于已安装版本,也会提示更新,这是需要优化的点。
  2. 更新流程
    • 点击更新后,比对 MD5 不一致,则下载新的 JAR 包到 apps/modules 目录下。

6. 应用删除

功能描述

已经安装过的应用不能删除。否则将直接删除 MetaAppStore 中的记录。

实现细节

  1. 删除限制:已安装的应用不可删除。
  2. 记录删除:直接删除 MetaAppStore 中的记录。

7. 安装逻辑详细描述 (doInstallApps)

步骤描述

  1. 清空应用信息:清空 app 信息,元模型信息,移除类加载器等操作。
  2. 重置类加载器:通过最新的 JAR 文件设置类加载器,检测循环依赖和配置错误,计算应用安装顺序(基础应用在最前面)。
  3. 加载初始态元模型
    • OriginalMeta:直接通过 convert 转换而来的元模型信息,没有继承扩展。
    • appDataInfoMap:保存的是 app.json 信息。
    • appContainerMap:保存的是元模型相关信息。
    • appGroupContainer:多个应用组成一个组的 map
  4. 二次构建
    • 仅处理 ModelMeta,即 model 元模型,并处理继承扩展(仅解析)。
  5. 最终构建
    • 处理继承扩展的场景,并构建父信息。

总结

以上是 IIDP 平台应用市场功能的详细技术文档。本文档涵盖了应用上传、上架、安装、更新、卸载和删除的具体实现细节和流程。通过对各功能模块的详细描述,能够帮助开发者更好地理解和使用 IIDP 平台的应用市场功能。