errors | |
---|---|
|
2.5.1. 新建server
由于引擎是一个jar包,在开发环境中,通过一个引擎jar包来加载正在开发的apps,对于调试非常不友好,建议通过新建一个server项目依赖引擎jar包,以及必要的配置(如端口配置)来启动引擎,加载正在开发的apps进行调试。
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
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,结构如下:
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 应用信息