errors
Failed to load YAML frontmatter: (<unknown>): mapping values are not allowed in this context at line 2 column 6

2.5.1. 新建server

由于引擎是一个jar包,在开发环境中,通过一个引擎jar包来加载正在开发的apps,对于调试非常不友好,建议通过新建一个server项目依赖引擎jar包,以及必要的配置(如端口配置)来启动引擎,加载正在开发的apps进行调试。

img

server启动时,会默认加载apps目录下在apps.json中配置的所有app jar包;iidp-demo-apps是我们需要开发的app工程,一般来说我们现在都分多个工程进行开发,可以在iidp-demo-apps下面建多个module。

2.5.1.1. server pom配置说明

<?xml>
    ......
	<dependencies>       
        <!--   springboot     -->        
        <dependency>            
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.8.RELEASE</version>
        </dependency>
        <!--   引擎     -->        
        <dependency>
            <groupId>com.sie.meta</groupId>
            <artifactId>sie-iidp-engine</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>        
        <!--   脚本引擎(可选)     -->
        <dependency>
            <groupId>com.sie.meta</groupId>
            <artifactId>sie-iidp-script-engine</artifactId> 
            <version>1.0-SNAPSHOT</version>
        </dependency>
     </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId> 
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgs>
                        <arg>-parameters</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</xml>

compilerArgs arg -parameters JDK1.8版本反射拿不参数名,必须配置-parameters参数才能拿到。

2.5.1.2. config配置说明

数据库配置(文件dbcp.properties)如下:

########DBCP##########
driverClassName=com.mysql.cj.jdbc.Driver
#url
url=jdbc:mysql://127.0.0.1:3307/iidp?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
#url=jdbc:mysql://192.168.168.156:3306/iidp?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
username=root
password=123456
initialSize=5
maxActive=30
minIdle=5
maxWait=6000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=select 'x'
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements: true
maxOpenPreparedStatements: 20

########Oracle########
#driverClassName=oracle.jdbc.OracleDriver
#url=jdbc:oracle:thin:@192.168.175.193:1521:SMOMDB
#username=sie_smom
#password=SIE_SMOM#123
#validationQuery=SELECT 'x' FROM DUAL

日志使用logback-classic,可自行配置

引擎相关配置参数可以填写在application.properties或application-dev.properties文件中。

2.5.1.3. apps.json配置说明

{  
    "loaders": {
    	"API": "com.sie.iidp.engine.loaders.ApiLoader",
        "SDK": "com.sie.iidp.loaders.SdkLoader"  
    },
    "apps": { 
        "master": {
            "SDK": {
                "base": "sie-iidp-base-1.0-SNAPSHOT.jar",
                “app名称: ”jar包名称”      
            }
        }
    }
}

apps.json文件是引擎必须的文件,默认在${user.dir}/apps/apps.json,需要把app打包生成的jar放置在此,并按照上面的格式配置。

sie-iidp-base-1.0-SNAPSHOT.jar由引擎提供,开发阶段可从平台处获得。

2.5.1.4 main方法

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })@ComponentScan(basePackages = "com.sie.iidp")public class Server { public static void main(String[] args) { // 启动引擎 Loader.setLoader(new BaseLoader()); Engine.start(); // 启动SpringBoot SpringApplication.run(Server.class, args); }}

端口可自行配置,运行成功的话,可访问http://localhost:{port}/root/api/master。

2.5.2. 业务app

server apps是最终部署的工程的apps资源仓库,即甲方最终购买的所有app资源清单,包括apps涉及的jar、json等文件。我们正在开发的所有apps下的jar也会自动copy到本目录。

2.5.2.1. pom配置说明

iidp-demo-apps是iidp-demo的子模块,所有app的父模块。里面主要放置了两个重要的插件,一个是用于打包app的打包插件,另一个是编译插件。

所有app的公共依赖项可以放置于此。

iidp-demo-apps.pom配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>iidp-demo</artifactId>
        <groupId>com.sie.demo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>iidp-demo-apps</artifactId>

    <packaging>pom</packaging>

    <modules>
        <module>newSdkApp</module>
        <module>newSdkOthers</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>com.sie.meta</groupId>
            <artifactId>sie-iidp-sdk</artifactId>
            <version>2.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>

            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>

            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <targetPath>WEB-INF/classes</targetPath>
                <!--                <includes>-->
                <!--                    <include>application-${package.environment}.yml</include>-->
                <!--                </includes>-->
            </resource>
        </resources>
        <plugins>

<!--   打包及清理插件         -->
            <plugin>
                <groupId>com.sie.meta</groupId>
                <artifactId>sie-iidp-maven-plugin</artifactId>
                <version>1.0-SNAPSHOT</version>
                <configuration>
<!--         生成的包将会被拷贝的目录           -->
                    <copyDir>${basedir}/../../apps</copyDir>
                </configuration>
                <executions>
                    <execution>
                        <id>package</id>
                        <phase>package</phase>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

<!--  编译添加参数          -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgs>
                        <arg>-parameters</arg>
                    </compilerArgs>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

app1就是一个用户自定义app,所有的用户代码、文件、配置应在此添加。借助app依赖,继承和扩展,合理组织多个app,完成共同目标。每个app.pom都需要指明自己的独有依赖项。

sie-iidp-sdk是系统提供且必需的依赖项,也可以放置到上一层(sie-iidp-demo-apps.pom),这样就不需要每个app都单独引用了。

2.5.2.2. app.json配置说明

app.json路径:必须位于resolved路径: com.sie.apps.qms

img

app.json

应用配置信息

​ ● 应用信息

属性 类型 可选值 备注
name String 英文字母例如:newSdkApp 应用名称 与apps路径下的apps.json下的SDK名称一致注意:均要保证一致meta_app应用 JAR包 apps.json清单
displayName String 中文名称例如:测试sdk2.0 中文名
author String   作者
company String   公司名称
category String   分类
categoryDesc String   分类中文描述
product String   产品线
productDesc String   产品线中文描述
productIcon String   产品线图标
description String   详情描述
summary String   简短描述
type String JSON/API/SDK SDK类型,代表用Java SDK代码开发的应用API类型,GME在线建模api,可以实时JSON类型,GME导出json文件
tag String master 版本
version String 0.0.1 应用所属版本
resolved String com.sie.app.newsdk 包名
dependencies Array   依赖项
application Boolean true 应用true 模组 false 暂无差异
icon String   图标
license     开源协议
view Array views/sdk_meus.jsonviews/sdk_user_view.jsonviews/sdk_role_view.json 视图文件,views 相对路径
data Array data/test_user.json 种子数据文件,data 相对于路径

📕注意

​ ● version 考虑>=

​ ● tag 版本

​ ● dependent 依赖项

多应用加载规则:

遇到多级应用依赖LIb1.0,必须要把Lib升级同一版本。

如果是同级树根据权重加载,如果不是要先遍历最外层子树以依赖关系为准。

Lib升级版本要考虑向下兼容,例如Lib1.0 升级Lib2.0的时候要考虑兼容Lib1.0。

否则新的应用引入LIb2.0没办法引用其他采用Lib1.0的应用

apps 存放app的jar包文件夹
apps/ sie-iidp-base-1.0-SNAPSHOT.jar 平台提供,基础app
iidp-demo-apps app的父模块,在此处开发自定义app
iidp-demo-server server模块,辅助调试

2.5.2.3. demo工程说明

在iidp-demo-apps下可以建立module,例如demo项目newSdkApp,结构如下:

img

2.5.2.4. 调试说明

在iidp-demo-apps下,执行mvn clean package命令(也可在ide上直接点击对应按钮),该指令会自动清理并打包所有app到apps目录。

配置${user.dir}/apps/apps.json。

以debug模式启动iidp-demo-server里面的main方法,等待程序启动完毕。访问http://localhost:{port}/root/api/master。

可以在打开的open-api网页里访问开发的模型的所有服务,测试功能是否正常,必要时可以设置断点。

测试app正常运行后,就可以把app的jar包上传到应用商城了。

2.5.3. base应用说明

应用结构说明

​ ● data 种子数据

rbac_user.json 用户种子文件

字段名 中文名 可选值
model 模型名 rbac_role
properties 属性名 {"name":"管理员""is_admin":1}

种子数据文件的作用是为了数据库在删除 rbac_role 这个表的时候,数据还能在恢复过来。

示例代码:

"rbac_role_admin": { "model": "rbac_role", "properties": { "name": "管理员", "is_admin": 1 }}

​ ● jwt 认证

JWT , 全写JSON Web Token, 是开放的行业标准RFC7591,用来实现端到端安全验证.

简单来说, 就是通过一些算法对加密字符串和JSON对象之间进行加解密。

JWT加密JSON,保存在客户端,不需要在服务端保存会话信息。,可以应用在前后端分离的用户验证上,后端对前端输入的用户信息进行加密产生一个令牌字符串, 前端再次请求时附加此字符串,后端再使用算法解密。

Token存储信息

字段名 中文名 备注
login 登录名  
userId 用户id  
isAdmin 是否管理员  
date 过期时间 3600
algorithm 算法 HMAC256

​ ● meta 模型文件

meta_app 应用

将系统安装应用存储在meta_app表中

meta_model 模型

将元模型信息存储在数据库meta_model表

meta_model_service 服务

将系统的所有服务存储在meta_model_service服务表

meta_model_property 属性

​ ● rbac 权限

​ ● ui 菜单 界面

ui_menu 菜单

将应用中menu.json菜单中的文件生成到ui_menu表中

​ ● version 版本

​ ● views 视图文件

​ ● app.json 应用信息