☰
Current Page
Main Menu
Home
Home
Editing
单机版
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
## IIDP 平台应用市场功能技术文档 ### 概述 本文档详细描述了 IIDP 平台应用市场的相关功能,包括应用的上传、上架、安装、更新、卸载和删除的具体流程和技术实现。以下内容基于单机版平台的功能实现。 ### 1. 应用上传 #### 功能描述 上传应用的 JAR 包到 `meta_attachment` 中,对于重复的文件也会当作新的文件处理。优化建议:可以实现一键秒传功能,即如果文件的 MD5 值相同则无需重复上传。 #### 实现细节 1. **方法签名**: ```java public String putObject(InputStream inputStream, String fileType, String originalFilename, String bucketName) ``` 2. **上传流程**: - 最终调用 `base_file` 中的 `upload` 方法。 - 在 `meta_attachment` 中新增一条记录。 - 点击保存后,调用 `create` 方法,在应用市场创建一条记录,并设置 `app_market` 为 `noUp`。 [[http://iidp.chinasie.com:9999/iidpminio/design/store/upload.png]] <details> <summary>点击展开puml</summary> ```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 ``` </details> ### 2. 应用上架 #### 功能描述 计算依赖图,检查依赖的应用是否在应用市场中,修改应用状态为 `up`。此过程相当于一次干运行(dry run)。 #### 实现细节 1. **依赖检查**:确保所有依赖的应用均在应用市场中。 2. **状态修改**:将应用状态设置为 `up`。 [[http://iidp.chinasie.com:9999/iidpminio/design/store/putaway.png]] <details> <summary>点击展开puml</summary> ```uml @startuml start :如果是单个上架; : 获取整个应用市场的app,并计算当前待上架app的依赖图; : 依次检查待上架app的依赖是否已经存在; if (存在?) then (是) : 修改app_market状态为up; else (否) : 返回上架失败; endif stop @enduml ``` </details> ### 3. 应用安装 #### 功能描述 应用必须先上架后才能安装。安装过程中会获取依赖的应用,初始化策略注册菜单的权限策略,加载应用的配置信息和系统变量,并将状态修改为 `installed`。 #### 实现细节 1. **安装方法**: - `installApps` - 获取依赖的应用,调用 `buildAppDataInfo` 方法。 - 调用 `doInstallApps` 方法。 - 调用 `postInstall` 方法。 - 加载种子数据 `loadSeedData`。 2. **状态修改**:将应用状态设置为 `installed`。 [[http://iidp.chinasie.com:9999/iidpminio/design/store/install.png]] <details> <summary>展开puml </summary> ```puml @startuml start : 如果是单机模式; : 从应用市场获取待安装的app信息; : 根据模式获取loader,这是是单机版的loader; : 从应用市场获取待安装的app的依赖图,并获取依赖app; if (依赖的app存在?) then (是) : 所有的依赖,计算需要安装的引用,更新的应用,初始化: 插入应用,更改应用,初始化菜单等; : 下载新jar包; : 恢复之前软删除的其他资源,比如menu、view等; : doInstallApps、postInstall 统一的方法; : 调用安装事件 startUpEvent; else (否) : 返回上架失败; endif stop @enduml ``` </details> ### 4. 应用卸载 #### 功能描述 除了卸载选中的当前应用,还需要卸载其所依赖的应用。修改数据状态为 `uninstalled`,软删除应用的其他资源状态(如菜单、视图等),清理内存中的相关信息。 #### 实现细节 1. **状态修改**:将应用状态设置为 `uninstalled`。 2. **资源清理**: - 移除内存信息。 - 清理 `appContainer` 中的 `metas`、`models`。 - 清理 `appDataInfoMap`、`appContainerMap`。 - 移除类加载器。 - 清理 `appContainerMap` 中的 `finalModelMap`。 - 移除自定义系统变量。 3. **重新安装**:安装需要重装的应用(按安装流程)。 [[http://iidp.chinasie.com:9999/iidpminio/design/store/uninstall.png]] <details> <summary>展开puml </summary> ```puml @startuml start : 如果是单机模式; : 初始化当前模式的appLoader; : 调用loader的uninstallApps方法; : 获取待卸载的 appGroupContainer,以及 graphs 信息; : 设置安装状态为 uninstalled; : 软删除应用的其他资源状态,比如menue、view等; : 清理出台metas,清理models,以及清理appDataInfoMap和 appContainerMap该app的key; : 清理该app的类加载器,并设置为null; : 清理 finalModelMap 终态信息; : 移除自定义变量; : 计算需要重装的app,并执行统一的 doInstallApps; stop @enduml ``` </details> ### 5. 应用更新 #### 功能描述 对比应用市场的 MD5 值和已安装的 MD5 值(前提是应用已上架),如果不相等则激活更新。可优化点:仅在有新版本时提示更新,而不是仅基于 MD5 不相等。 #### 实现细节 1. **MD5 比对**:如果上架的应用版本低于已安装版本,也会提示更新,这是需要优化的点。 2. **更新流程**: - 点击更新后,比对 MD5 不一致,则下载新的 JAR 包到 `apps/modules` 目录下。 - 按照install的逻辑执行,同时更新app信息到数据库中。 ### 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 平台的应用市场功能。
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel