vertx-gaia/vertx-ams/src/main/qas/io/horizon/eon/VSpec.java
package io.horizon.eon;
import io.horizon.specification.boot.HInstall;
import io.horizon.util.HUt;
import io.macrocosm.specification.nc.HWrapper;
public interface VSpec {
/**
* 计算 Bundle 名称,目录模式,如果是目录模式,则内容遵循
* {@link VSpecBundle} 内置目录规范
*
* @param group 组
* @param artifact ID
* @param version 版本
*
* @return Bundle 名称
*/
static String bundle(final String group, final String artifact, final String version) {
return HUt.fromMessage("{}.{}_{}", group, artifact, version);
}
/**
* 计算 Bundle 名称,文件模式,如果是文件模式,jar 文件内部资源
* 路径遵循 {@link VSpecBundle} 内置目录规范
*
* @param group 组
* @param artifact ID
* @param version 版本
*
* @return Bundle 名称.jar
*/
static String bundle_jar(final String group, final String artifact, final String version) {
return HUt.fromMessage("{}.{}_{}.jar", group, artifact, version);
}
/**
* -----------------------------------------------------------------------------
* <p>
* 4. Bundle接入目录规范<br/>
*
* Bundle模块基础规范,参考如下:<br/>
*
* Eclipse常用插件基础
* <pre><code>
* - /META-INF/MANIFEST.MF 模块描述文件
* - plugin.xml 插件配置文件(XML)
* - plugin.properties 插件配置文件(PROP)
* - lib/ 依赖库
* - schema/ XSD专用文件存储目录
* - xxx.jar JAR文件,主 Bundle
* </code></pre>
*
* 自定义插件基础
* <pre><code>
* - lib/
* - extension/ (扩展)第三方开发的扩展JAR文件
* - modeler/ (后端)模型库
* - emf/ - EMF模型库
* - atom/ - zero-atom 专用模型库
* - meta/ - 定义
* - reference/ - 引用
* - rule/ - 规则
* - init/ (后端)注册初始化目录,元数据出厂设置
* - modeler/ - 模型注册器
* - store/ - 存储注册器
* - ddl/ - SQL存储中的基础文件
* - cloud/ - 云端连接器
* - development/ - 开发层编辑器
* - oob/ - 初始化元数据
* - resource/ - 专用资源文件
* - backend/ (后端)后端 Web 主目录
* - scripts/ (后端)后端 Web 专用主脚本
* - {type}/ - 不同类型的脚本,后期扩展脚本引擎
* - endpoint/ (后端)后端 Web 端地址
* - api/ - Web服务接口,RESTful
* - web-socket/ - Web Socket服务
* - service-bus/ - Service Bus服务总线
* - webapp/ (后端)JSP等类型内容
* - WEB-INF/ - 传统资源文件,包括 web.xml / Servlet
* - components/ (后端)组件配置目录
* - task/ - 任务
* - handler/ - 处理器
* - event/ - 事件
* - validator/ - 验证器
* - frontend/ (前端)前端配置主目录
* - assembly/ (前端)Native前端处理
* - cab/ (前端)资源包
* - {language}/ - 语言目录(多语言环境)
* - scripts/ (前端)前端脚本(Ts、Js)
* - skin/ (前端)前端皮肤处理专用
* - images/ (前端)图片相关资源
* - icon/ - 图标资源
* - components/ (前端)自定义组件(扩展)
* </code></pre>
* </p>
*
* @author lang : 2023-05-28
*/
interface Bundle extends VSpecBundle {
}
/**
* -----------------------------------------------------------------------------
* <p>
* 3. Zero模块化专用目录规范<br/>
* Zero模块化专用目录规范,主要用于 Zero Extension 的模块化处理,Zero Extension可以作为两种模式存在:
* <ol>
* <li>Zero Extension直接使用静态方式作为依赖接入应用中(通常是单机版)</li>
* <li>Zero Extension使用 `动态方式` 接入应用(基于OSGI规范),参考下边章节的 Bundle 专用目录规范</li>
* </ol>
*
* 在上述Zero Extension第一种静态接入模式中:由于模块本身会作为依赖的应用,所以需实现全路径唯一,且不可重复,因此针对横向的管理会很差,
* 于是才有OSGI模式下的标准出现,本章节为第一种静态方式的依赖。直接参考:<a href="https://www.vertx-cloud.cn/document/doc-web/index.html#_%E8%B5%84%E6%BA%90%E7%BB%93%E6%9E%84">4.3.2.资源结构</a>。
* </p>
*
* Zero模块内的核心目录如(假设模块名称 `mod`)
* <pre><code>
* - /action/{code} (横向)安全,资源管理,code唯一
* - /authority/{code} (横向)安全,权限管理面板,code唯一
* - /cab/cn/{uri} (横向)前端配置,非微前端下的前端统一目录
* - /modulat/mod (横向)模块配置,code唯一为模块对应的名称
* - /plugin/mod (模块内)模块基础配置
* /plugin/sql/mod (模块内)模块SQL配置
* - /pojo/{identifier} (横向)POJO映射配置,identifier为静态模型文件名
* - /workflow/{code} (横向)工作流配置,code微工作流定义的键值
* </code></pre>
*
* 书写过程给中,小写是目录,大写是值,所有路径本身依靠小写来区分,基本命名规范
* <pre><code>
* 1. 目录本名直接使用小写命名
* 2. 目录节点值则直接使用大写命名
* 3. 当前目录的全路径(绝对路径)采用 V 大写命名
* </code></pre>
* </p>
*
* @author lang
*/
interface Extension extends VSpecExtension {
}
/**
* Bundle基础规范,当前版本为草稿,考虑如下几点:
* -----------------------------------------------------------------------------
* <p>
* 1. 核心目录<br/>
* 描述了标准目录空间下的基础内容,如:
* <pre><code>
* 全容器:
* - configuration/ 系统配置目录
* - init/oob/ 出厂设置(初始化目录)
* - runtime/ 运行时目录
* - plugin/ Zero Extension扩展目录
* 容器和模块对接(OSGI):
* - plugins/
* - features/
* - extensions/
* </code></pre>
* -----------------------------------------------------------------------------
* <p>
* 2. 全容器目录
* <pre><code>
* - /configuration/library/ 「库信息」
* - /system/ 系统库基础目录
* - /internal/ 内置应用共享库
* - /external/ 扩展库基础目录
* - /configuration/editor/ 「编辑器」
* - /internal/ 默认带的产品内置编辑器
* - /{editor_1}/ 编辑器1
* - /{editor_2}/ 编辑器2
* - ...
* - /external/ 扩展编辑器目录
* - /{editor_1}/ 编辑器1
* - /{editor_2}/ 编辑器2
* - ...
* - /init/oob/ 「数据初始化」OOB数据初始化(元数据导入)
* - /secure/ 安全相关配置数据
* - /environment/ 环境相关配置数据
* - /navigation/ 服务于前端,由后端提供前端的导航基础(菜单部分的整体运行)
* - /runtime/ 「运行时」
* - /cache/ 运行时缓存基础
* - /log/ 运行时日志信息
*
* - /plugin/ 「旧版插件」区别于OSGI插件,此目录现阶段主要用于 Zero Extension 的遗留系统,且此规范主要应用于
* 单点系统部分,当您的应用是一个单机应用时,则需遵循此种规范,由于和 OSGI 插件规范近似,所以
* 此处需区分 `plugins` 和 `plugin` 两个目录,不同目录代表的含义有所区别,新版中的 OSGI模块
* 化处理完成后,此处的 `plugin` 目录将会被移除,统一使用 OSGI 插件规范。
* - /{extension_1}/ 扩展1
* - /{extension_2}/ 扩展2
* - ...
*
* {OSGI} 「OSGI容器」 Bundle外层(接入,遵循OSGI基础规范)
* - /features/ 功能
* - /plugins/ 插件
* - /extension/ 「Bundle扩展」(元模型级)
* - /{bundle_1}/ 此处扩展为系统级扩展,在注册流程中,如果有需要直接将Bundle针对系统的基础扩展放置到此处,
* - /{bundle_2}/ 并且根据Bundle本身的特性(identifier)构造对应的扩展目录,扩展出来的目录遵循基本的定义
* 配置,您可以为新的Bundle提前执行环境预处理,包括:
* - 环境基础检查(准入规则)
* - 环境运行检查(环境扫描)
* - 运行状态检查(是否可激活、激活完成之后是否状态正常)
* </code></pre>
* </p>
*/
interface Web extends VSpecWeb {
}
/**
* 启动器核心目录设计
* <p>
* 内置配置对象 {@link HWrapper},统一配置接口
* <pre><code>
* boot: # 启动器主配置
* launcher: # 「路径」主容器配置 {@link io.horizon.specification.boot.HLauncher}
* # 主容器1:OSGI容器 -> Jetty Bundle
* # 主容器2:OSGI容器 -> Rx Vertx
* # 主容器3:VertxApplication(单机版Zero标准)
* # 主容器4:AeonApplication(云端启动器)
* component: # {@link io.horizon.spi.BootIo} 中提供并执行初始化
* on: # 配置内置于 {@link io.macrocosm.specification.boot.HOn}
* off: # 配置内置于 {@link io.macrocosm.specification.boot.HOff}
* run: # 配置内置于 {@link io.macrocosm.specification.boot.HRun}
* config: # 实现层所需启动的基础配置,提供路径格式
* # - OSGI容器配置路径
* # - Web容器配置外置路径
* rad: # 配置内置于 {@link io.horizon.specification.under.HRAD}
* connect: # 空间连接专用配置
* frontier: # 配置内置于 {@link io.macrocosm.specification.secure.HFrontier}
* galaxy: # 配置内置于 {@link io.macrocosm.specification.secure.HGalaxy}
* space: # 配置内置于 {@link io.macrocosm.specification.secure.HSpace}
* </code></pre>
* 所有组件对应的配置使用 {@link io.horizon.spi.BootIo} 的 SPI提供,此 SPI 会用于构造所有启动节点的核心
* 区域组件,核心接口改造流程处理:
* <pre><code>
* 1. {@link io.horizon.specification.boot.HLauncher} 启动容器
* 1.1. 内置初始化 {@link HWrapper} 组装所有配置数据
* 提取上述节点所有配置信息,内置调用 {@link io.horizon.spi.BootIo} 提取不同的配置组件
* 开启启动组件表,而配置数据则位于不同节点
* 1.2. 抽取配置信息以初始化配置对象(配置对象只有一套)
* 1.3. 根据最终结果,构造核心启动组件,然后触发 {@link io.horizon.specification.boot.HLauncher}
* 2. 组件启动
* -- {@link io.horizon.specification.boot.HLauncher} start
* -- {@link io.macrocosm.specification.boot.HOn} configure 启动配置初始化
* -- {@link HInstall} start Bundle启动,有多少启动多少
* -- {@link io.horizon.specification.under.HRAD} 开发中心启动(可选)
* -- connect 安全连接器启动
* 3. 组件职责
* - launcher:主启动器
* - on:核心启动器,内置可调用多个 on,实现配置检查
* - 环境变量连接器
* - 目录检查器
* - 配置验证器(启动保证)
* - 可选组件扫描器
* - 启动Bundle /
* - 提取所有 Bundle 走内置流程,Bundle 流程依旧可使用生命周期组件 on / off / run(递归调用)
* - off:用于关闭流程
* - run:用于更新流程
* - rad:用于开发中心
* - connect:根据不同的方式获取 {@link io.macrocosm.specification.secure.HAccount},连接安全中心实现
* 不同空间模式的整体连接流程
* </code></pre>
*
* </p>
*/
interface Boot extends VSpecBoot {
}
}