Skip to content

Commit 9f36701

Browse files
authored
Feature/native image (#3)
* feat(flow): 添加自动布局功能支持流程设计 - 引入 getLayoutedElements 工具函数实现自动布局 - 移除手动位置计算逻辑,改用 dagre 自动布局算法 - 当节点缺少 positionX/positionY 属性时自动应用布局 - 支持对整张流程图进行 LR 方向的自动排列 - 优化节点解析逻辑以适配新的布局机制 * feat(ci): 添加服务器原生镜像推送工作流 - 新增 push-server-native-image 工作流用于构建和推送服务器 Docker 镜像 - 配置 JDK 25 环境和 Maven 缓存设置 - 设置 GitHub Token 和 Docker 凭据用于镜像推送 - 添加子模块递归检出配置 - 配置 Maven 认证设置以访问私有仓库 - 实现原生可执行文件的镜像构建和推送流程 * ci(workflow): 添加原生镜像构建工作流并优化服务器镜像构建配置 - 添加新的 native.yml 工作流文件用于原生镜像测试 - 重命名推送服务器镜像任务为更明确的描述 - 调整 Maven 构建命令参数顺序以支持原生镜像构建 - 配置 Java 25 环境和 Maven 缓存设置 - 更新 Docker 镜像构建和推送配置参数 * chore(ci): 移除native工作流中的依赖检查 - 移除了对engine-test和server-test的依赖 - 删除了actions/checkout步骤以优化工作流执行 * chore(ci): 更新本地工作流配置并启用调试模式 - 移除 Maven 设置配置步骤 - 在 Maven 命令中添加调试标志 (-X) - 保留原生镜像构建和推送功能 - 维持跳过测试的配置选项 * refactor(flow): 替换 JavaScript 引擎从 GraalVM 到 QuickJS - 将 JavaScript 执行引擎从 GraalVM 更改为 quickjs4j (QuickJS) - 移除 GraalVM 相关依赖并添加 quickjs4j 依赖 - 简化 RequestScriptContext 类,移除请求响应相关字段 - 更新测试用例中的数值断言以匹配新的计算结果 - 删除已废弃的 RequestScriptContext 测试方法 * refactor(flow): 移除请求脚本上下文类 - 删除了 RequestScriptContext 类及其相关方法 - 移除了脚本执行上下文的数据封装功能 - 清理了项目中不再使用的上下文构建和同步逻辑 * chore(test): 清理 JavaScriptUtilTest 类的格式 - 移除类末尾多余的空行以符合代码风格规范 * refactor(auth): 优化 API 密钥生成器的运行时初始化 - 添加 @RuntimeInitialize 注解确保运行时初始化 - 避免 SecureRandom 实例在 Native Image 构建期被嵌入 - 防止 GraalVM 中随机数种子值缓存导致的随机性失效问题 - 更新类文档说明运行时初始化的重要性 * chore(native-image): 配置 ApiKeyGenerator 运行时初始化以支持 Native Image 构建 - 移除 ApiKeyGenerator 类上的 @RuntimeInitialize 注解 - 更新注释说明 Native Image 构建时的安全随机数配置要求 - 在 application.properties 中添加 quarkus.native.additional-build-args 配置 - 指定 ApiKeyGenerator 在运行时初始化避免构建期随机数实例错误 * chore(server): 更新服务器配置以支持S3存储和原生镜像构建 - 在application.properties中添加Native Image运行时初始化配置,解决SecureRandom静态字段构建问题 - 添加NTLMEngineImpl到运行时初始化列表,避免AWS SDK S3客户端构建错误 - 更新pom.xml依赖管理,添加quarkus-amazon-services-bom平台依赖 - 集成quarkus-amazon-s3依赖替换原有AWS SDK S3依赖 - 移除手动指定版本的AWS SDK S3依赖,统一使用平台BOM管理 - 调整pom.xml中依赖声明顺序,优化项目结构 - 修正codegen schema配置中的脚本导入格式,合并多行声明为单行 * chore(build): 修复原生镜像构建参数中的逗号转义问题 - 移除了 quarkus.native.additional-build-args 中多余的反斜杠转义 - 修正了构建配置以符合正确的参数格式要求 - 确保原生镜像构建时参数能够正确解析和传递 * refactor(storage): 使用 Quarkus Amazon S3 扩展替代手动配置 - 移除手动创建 S3Client 的代码,改用 Quarkus 注入的 S3Client - 更新 S3Backend 构造函数,接受注入的 S3Client 而不是凭据参数 - 修改 application.properties 中的 S3 配置方式,使用 quarkus.s3.* 属性 - 移除 NTLMEngineImpl 相关的运行时初始化配置 - 在 pom.xml 中添加 quarkus-amazon-s3 扩展依赖 * feat(s3): 更新 S3 客户端配置以使用 URL 连接 - 将 quarkus.s3.sync-client.type 从 url-connection 更改为 url - 添加注释说明合法值包括 aws-crt、apache 和 url - 添加 software.amazon.awssdk:url-connection-client 依赖 - 移除关于 apache-client 导致 native image 构建错误的注释 - 优化 AWS SDK HTTP 客户端配置以避免 NTLMEngineImpl 问题 * deps(build): 添加 HikariCP 的可选依赖 metrics-core - 添加 io.dropwizard.metrics:metrics-core 依赖 - 该依赖在 native-image 构建时必需,因为 HikariPool 引用了 MetricRegistry - 配置为可选依赖以避免运行时冲突 * feat(deps): 添加 Metrics 库依赖 - 在项目中引入 io.dropwizard.metrics:metrics-core 依赖 - 配置 metrics.version 属性为 3.2.5 - 将依赖设置为可选依赖 (optional=true) - 更新 Maven 依赖管理配置以包含新库 * deps(server): 添加 HikariCP 构建时依赖 - 更新 HikariCP 可选依赖注释说明 - 添加 metrics-core 依赖用于原生镜像构建 - 添加 micrometer-core 依赖用于指标监控 * refactor(deps): 调整 HikariCP 相关依赖配置 - 移除主 pom.xml 中 metrics-core 和 micrometer-core 的可选依赖配置 - 在 native 配置文件中添加 HikariCP 构建时必需的依赖项 - 新增 metrics-healthchecks 依赖以支持 GraalVM native image 构建 - 添加详细注释说明 native image 构建时依赖解析的特殊要求 - 统一依赖管理,避免逐个补充缺失的引用类型 * fix(config): 解决 GraalVM native image 中 JDBC 驱动注册问题 - 添加 resolveDriverClassName 方法解析 JDBC URL 对应的驱动类名 - 在 EngineConfig 中显式设置 HikariDataSource 的 driverClassName - 更新 SchemaRegistry 和 ProjectService 以使用新的驱动类解析逻辑 - 添加 SQLite、MySQL、PostgreSQL、Oracle、SQL Server 数据库驱动支持 - 修复 native image 环境下 DriverManager SPI 自动注册失效的问题 * refactor(database): 优化 JDBC 驱动注册机制以支持 native image - 将驱动类名解析改为直接注册驱动实例到 DriverManager - 移除 Optional 返回值,改用 void 方法简化接口 - 添加 SQLite、MySQL、MariaDB 等数据库驱动的显式注册逻辑 - 实现驱动重复注册检查避免异常 - 在 SchemaRegistry 和 ProjectService 中统一使用新的驱动注册方法 - 修复 native image 中 JDBC 驱动 SPI 自动注册失效问题 * refactor(database): 优化原生镜像中的数据库连接配置 - 移除通过 DriverManager 注册 JDBC 驱动的方式 - 添加直接创建底层 DataSource 的机制以绕过 SPI 自动注册 - 为 SQLite 和 MySQL/MariaDB 实现专用的数据源创建方法 - 更新 SchemaRegistry 和 ProjectService 使用新的数据源创建逻辑 - 在原生镜像环境中完全避免 DriverManager 的使用 * feat(server): 启用HTTP CORS支持 - 添加了quarkus.http.cors.enabled配置项 - 允许跨域请求处理 - 提升API访问灵活性 * refactor(database): 将数据源从 HikariCP 迁移到 Agroal - 替换所有测试类中的 HikariDataSource 为 AgroalDataSource - 更新 pom.xml 依赖,将 com.zaxxer.HikariCP 替换为 io.agroal.agroal-pool - 修改数据源初始化代码以使用 Agroal 配置方式 - 在 flexmodel-server 中创建 AgroalDataSourceFactory 工厂类统一管理数据源创建 - 重构 EngineConfig 中的数据源创建逻辑,移除 HikariCP 相关代码 - 更新 SchemaRegistry 中的数据源处理逻辑以支持 Agroal - 为不同数据库类型提供专门的连接配置处理 * chore(native-image): 更新原生镜像可达性元数据并调整测试配置 - 为 io.agroal.pool.DataSource 添加完整的构造函数和方法反射访问 - 修正 MySQL 数据源的元数据配置 - 移除测试中手动的 API 根路径前缀配置 - 更新测试资源配置以使用 Quarkus 自动注入的根路径 * test(flow): 更新服务任务执行器测试以适配 quickjs4j 引擎 - 修改语法错误验证逻辑,从检查 SyntaxError 消息改为验证异常消息非空 - 更新除零运算测试预期结果,从 Double.POSITIVE_INFINITY 改为 null - 移除认证提供商列表相关测试方法 - 移除流程更新测试中关于项目ID传播的测试用例 - 修正触发器资源测试的基础路径配置 * feat(native-image): 添加原生镜像反射配置处理器 - 实现 FlexmodelNativeProcessor 通过 BuildStep 自动注册反射类 - 配置 Codegen 实体、DTO、模型定义等各类反射访问需求 - 集成 Jackson MixIn、流程引擎、业务组件反射支持 - 添加第三方库如 Auth0 JWT、MySQL JDBC、SQLite 等原生镜像支持 - 注册运行时重新初始化的类以解决构建期初始化问题 - 在 pom.xml 中添加 quarkus-core-deployment 依赖支持 BuildStep * fix(query): 解决 GraalVM native image 中 lambda 序列化问题 - 添加 tryGetSerializedLambda 方法处理 native image 中 writeReplace 方法不可访问的情况 - 优化 getTargetClass 方法使用新的 lambda 提取逻辑并简化类加载策略 - 更新 getMethodName 方法以支持 native image 兼容性并提供详细错误信息 - 在 reachability-metadata.json 中添加 SerializedLambda 的可达性元数据配置 - 为 SFunction 类添加序列化支持配置 - 移除冗余的注释代码并改进异常处理逻辑 * chore(config): 更新原生镜像构建配置以支持随机数生成器 - 将注释从 ApiKeyGenerator 扩展到包含所有含静态 Random/SecureRandom 字段的类 - 添加 IdGenerator 到运行时初始化列表以避免 GraalVM 构建错误 - 调整配置格式以提高可读性 * fix(query): 解决 GraalVM native image 中 lambda 序列化问题 - 修改了 tryGetSerializedLambda 方法,增加多种策略查找 writeReplace 方法 - 添加注释说明在 GraalVM native image 中的特殊处理策略 - 在 application.properties 中启用序列化支持以确保 SFunction 正常工作 - 移除了 Maven 构建命令中的调试参数 -X 优化构建性能 * refactor(config): 简化原生镜像构建配置 - 移除 ApiKeyGenerator 类的运行时初始化配置 - 删除序列化支持启用选项 --enable-serialization - 保留 IdGenerator 类的运行时初始化配置 - 清理相关注释说明 * chore(native-image): 添加序列化配置以支持原生镜像构建 - 配置 SerializedLambda 类的序列化支持 - 添加 SFunction 函数式接口的序列化配置 - 确保原生镜像环境下 Lambda 表达式正常工作 * feat(native-image): 添加 lambda writeReplace 特性支持 - 实现 LambdaWriteReplaceFeature 类来注册 SFunction 实现类的 writeReplace 方法 - 在 native-image.properties 中配置特性功能 - 更新 application.properties 添加 GraalVM 构建参数 - 修复网站首页标签文字从"数据驱动"改为"事件驱动" * feat(codegen): 生成实体字段引用和过滤表达式支持 - 在 SchemaGenerator 中添加 FilterExpression 导入和实体导入收集逻辑 - 为每个实体模型生成嵌套字段类,包含所有字段的 FilterExpression 实例 - 添加静态字段引用实例便于查询使用 - 实现原始类型装箱方法支持泛型使用 - 在原生镜像配置中注册构建项实现类和序列化配置 - 启用 ServiceLoader 自动发现支持 SPI 服务加载 * refactor(query): 移除Expressions类中的方法引用功能并更新相关查询 - 删除Expressions类中基于方法引用的字段名提取功能 - 移除SFunction函数式接口及相关反射处理逻辑 - 替换所有仓库类中的方法引用查询为类型安全的字段访问 - 更新ApiRequestLogService中使用的新查询语法 - 移除GraalVM原生镜像相关的LambdaWriteReplaceFeature类 - 添加ServiceProviderBuildItem注册以支持SPI服务发现 * refactor(config): 更新原生镜像构建配置 - 移除 LambdaWriteReplaceFeature 配置项 - 添加 S3 开发服务禁用配置 - 简化 GraalVM 构建参数设置 * fix(native): 修复原生镜像中SPI实现类的构造函数反射问题 - 显式调用.constructors()方法注册BuildItem实现类的构造函数 - 修正ServiceLoader在原生镜像中需要无参构造函数反射访问权限的问题 - 使用ServiceProviderBuildItem构造函数显式指定提供者类名 - 避免动态生成的SPI描述符文件在构建阶段无法被类路径扫描的问题 - 确保codegen和test模块中的SPI提供者类正确注册到原生镜像中 * feat(session): 添加 BuildItem 直接注册支持以兼容 GraalVM 原生镜像 - 在 SessionFactory 中新增 registerBuildItem 方法,支持直接注册 BuildItem 实例 - 修改 processBuildItem 注释,明确通过 SPI ServiceLoader 加载机制 - 在 EngineConfig 中添加对 GraalVM 原生镜像中 ServiceLoader 不可靠情况的处理 - 添加 dev.flexmodel.BuildItem 和 dev.flexmodel.test.codegen.DevTest 导入 - 配置启动时直接注册 System 和 DevTest 构建项实例 * refactor(codegen): 替换Java原生序列化为Jackson JSON序列化 - 使用Jackson JSON序列化替代ObjectOutputStream/ObjectInputStream - 避免JDK版本间serialVersionUID不兼容问题 - 在序列化格式中嵌入类名以支持准确的类型重建 - 添加Base64编码的JSON字符串序列化功能 - 实现从Base64编码数据反序列化对象的方法 - 更新原生镜像配置以包含必要的构造函数反射支持 * refactor(session): 重构SessionFactory中的BuildItem应用逻辑 - 将原来的内联代码提取为独立的applyBuildItemSchemas私有方法 - 添加了详细的JavaDoc文档说明方法功能和参数 - 优化了代码结构,提高了可读性和可维护性 - 在registerBuildItem方法中新增对新加载BuildItem的即时应用逻辑 - 添加了空配置检查以避免潜在的空指针异常 * fix(session): 修复无数据源时的模型缓存和表创建逻辑 - 始终将模型定义写入缓存以支持缓存命中 - 添加对未注册数据源的 schema 的检测和警告 - 避免在缺少数据源时执行 DDL 和数据导入操作 - 优化异常处理流程防止因数据源缺失导致的错误 * feat(datasource): 添加数据源注册日志记录和开发测试数据源配置 - 在数据源注册过程中添加详细的日志记录,包括数据源键值和URL信息 - 记录已注册数据源的总数统计信息 - 添加开发测试专用的SQLite数据源配置 - 配置dev_test数据源使用SQLite数据库文件存储 * ``` fix(deploy): 修复原生镜像部署配置问题 - 修改 GitHub Actions 工作流中的容器镜像名称为 cjbi/flexmodel-server-native:latest - 在 docker-compose 环境变量文件中添加运行模式和镜像配置选项 - 更新 docker-compose 配置以支持原生镜像环境变量和时区设置 - 优化 Docker Compose 中的环境变量配置方式 - 添加 MySQL JDBC 驱动相关类的原生镜像反射配置 ``` * chore(native-image): 配置 GraalVM 原生镜像构建参数 - 添加 MySQL 连接器运行时初始化配置 - 增加 CJException 和 WrongArgumentException 的运行时初始化 - 优化原生镜像构建以避免随机实例错误 - 为 SQLite 开发测试环境添加 S3 服务禁用配置 * refactor(native-image): 优化数据库驱动的原生镜像配置 - 移除手动注册 MySQL JDBC 反射配置,改用 quarkus-jdbc-mysql 扩展自动处理 - 保留 SQLite JDBC 的手动反射注册配置以支持原生驱动 - 从原生镜像运行时初始化列表中移除 MySQL 相关类 - 更新依赖配置以使用 Quarkus 官方 MySQL 扩展 * feat(query): 添加字段引用支持并修复数据库字段名映射 - 在 FilterExpression 中添加 getFieldName 方法以获取字段名 - 在 TypedDSLQueryBuilder 中添加使用字段引用的排序方法 orderBy 和 orderByDesc - 在 TypedDSLUpdateBuilder 中添加使用字段引用的设置方法 set - 修复 SchemaGenerator 中字段名映射,使用原始字段名而非变量名 - 统一数据库字段名格式,将 createTime/createdAt 等驼峰命名改为下划线格式 create_time/created_at - 更新多个仓库类中的字段排序逻辑以匹配数据库实际字段名 * refactor(database): 优化数据库查询中的字段引用方式 - 将硬编码的字符串字段名替换为类型安全的系统字段引用 - 统一使用 System.flowInstance.status 替代 "status" 字符串 - 使用 function.createdAt 替代 "created_at" 字符串进行排序 - 在定时任务仓库中使用 qrtzTrigger.triggerState 等类型安全字段 - 添加必要的静态导入以支持新的字段引用方式 - 提高代码的类型安全性和可维护性 * feat(query): 添加字段引用排序功能 - 在 TypedDSLQueryBuilder 中添加使用 FilterExpression 的 orderBy 方法 - 更新 ApiLogFmRepository 使用字段引用进行排序 - 修改 InstanceDataFmRepository 使用类型安全的字段引用排序 - 导入系统生成的 apiRequestLog 字段引用 * feat(scheduler): 添加定时任务执行器的原生镜像元数据支持 - 注册 ScheduledFunctionExecutionJob 类的构造函数反射访问 - 添加 Quartz 调度器核心组件的完全反射访问权限 - 配置 DefaultThreadExecutor、StdSchedulerFactory 等关键类的元数据 - 添加 CronTriggerImpl 和 SimpleTriggerImpl 触发器实现的访问规则 - 配置 CascadingClassLoadHelper 和 SimpleThreadPool 的完整字段访问 - 确保内存脚本管理器的反射方法调用正常工作 * config(server): 配置HTTP请求体大小限制 - 在docker-compose.yml中添加QUARKUS_HTTP_LIMITS_MAX_BODY_SIZE环境变量 - 在application.properties中设置quarkus.http.limits.max-body-size为100M - 统一配置服务端请求体大小限制以避免上传文件时出现错误 * chore(config): 更新 GraalVM 原生镜像构建配置 - 添加 QuartzScheduler 运行时初始化配置 - 添加 StdSchedulerFactory 运行时初始化配置 - 修复多行参数格式以支持原生镜像构建 * refactor(build): 简化Quartz调度器的原生构建配置 - 将Quartz调度器相关的初始化配置合并为单个条目 - 移除了重复的StdSchedulerFactory初始化配置 - 优化了native build args的结构以提高可读性 * refactor(auth): 优化 API 密钥生成器的随机数实例管理 - 将静态 SecureRandom 字段改为方法内局部变量 - 避免 Native Image 构建期间因静态 Random 实例进入 image heap 导致的 GraalVM 错误 - 更新应用配置注释说明,移除对 ApiKeyGenerator 的运行时初始化要求 - 保留对 graphql.util.IdGenerator 和 org.quartz 的运行时初始化配置 * refactor(scheduler): 迁移至 Quarkus Quartz 扩展实现 - 将 Quartz 配置从手动初始化改为使用 Quarkus Quartz 扩展 - 移除手动创建 Scheduler 的代码,改用 @PostConstruct 初始化 - 从 application.properties 中移除原生 Quartz 依赖和配置 - 更新 pom.xml 依赖从 quartz-scheduler 切换到 quarkus-quartz - 优化测试用例中的触发器调度逻辑 - 简化调度器监听器注册流程 * feat(scheduling): 添加触发器获取锁机制以支持并发安全 - 引入 ReentrantLock 用于触发器获取的互斥控制 - 添加 triggerAcquireLock 成员变量实现内存级锁 - 在 acquireNextTriggers 方法中添加锁获取逻辑 - 使用 try-finally 确保锁的正确释放 - 替代 SQLite 等数据库不支持的 SELECT ... FOR UPDATE 功能 * fix(exception): 优化业务异常映射器的日志记录 - 对于AuthException类型的异常使用警告级别日志 - 保持其他业务异常的错误级别日志记录 - 避免认证异常触发过多错误日志干扰系统监控 * build(native-image): 更新原生镜像可达性元数据配置 - 添加 project.fml 文件到资源 glob 模式 - 添加 platform.fml 文件到资源 glob 模式 - 添加 dev_test.fml 文件到资源 glob 模式 - 为原生镜像构建增加 FML 配置文件支持 - 确保关键配置文件在原生镜像中正确加载 - 修复原生镜像环境下配置文件访问问题 * refactor(nativeimage): 重构原生镜像反射配置 - 将运行时重初始化类注册改为核心基础设施类注册 - 添加缓存、通用工具、配置、过滤器、Session、SQL、MongoDB、查询、解析器等包的反射配置 - 注册 ModelImportBundle、ModelRegistry、SchemaProvider 等核心类 - 新增第三方库类注册,包括 Gson、Guice、JZlib、MongoDB Driver、GraphQL 内部类等 - 移除 MySQL 连接清理线程的单独注册 - 为所有反射类添加构造函数、方法和字段的完整访问权限 * refactor(native-image): 移除不必要的序列化元数据配置 - 删除 SerializedLambda 类型的序列化配置 - 删除 SFunction 类型的序列化配置 - 清理 reachability-metadata.json 中的冗余序列化规则 * fix(deps): 更新 SQLite JDBC 依赖为 Quarkus 扩展 - 将 org.xerial.sqlite-jdbc 替换为 io.quarkiverse.jdbc.quarkus-jdbc-sqlite - 添加版本号 3.0.11 - 解决 Quarkus 3.x 平台移除扩展导致的依赖问题 * refactor(datasource): 替换 Agroal 连接池为 Quarkus Agroal 扩展 - 移除手动注册 Agroal 连接池反射配置 - 添加注释说明 Quarkus Agroal 扩展会自动处理连接池反射 - 在 application.properties 中禁用 Quarkus 默认数据源配置 - 将 pom.xml 中的 agroal-pool 依赖替换为 quarkus-agroal 扩展 - 保持项目通过 EngineConfig 自行管理 AgroalDataSource 的方式不变 * refactor(nativeimage): 优化原生镜像配置中的反射注册 - 添加 Agroal 连接池相关类的反射注册 - 注册 ConnectionHandler 类及其数组类型 - 更新注释说明原生扩展覆盖范围限制 * refactor(nativeimage): 优化 Agroal 连接池反射配置 - 移除手动注册 ConnectionHandler 和 ConnectionHandler[] 类型 - 更新注释说明数组类型通过 reachability-metadata.json 处理 - 简化 MySQL JDBC 反射配置注释 - 调整 Caffeine 缓存内部类反射注释格式 * refactor(datasource): 更改数据库连接池配置 - 移除 quarkus.datasource.active=false 配置项 - 将依赖从 quarkus-agroal 替换为 agroal-pool * refactor(native-image): 更新序列化配置以移除不必要的类 - 移除了 java.lang.invoke.SerializedLambda 的序列化配置 - 移除了 dev.flexmodel.query.Expressions$SFunction 的序列化配置 - 保留了 dev.flexmodel.model.EntityDefinition 的序列化支持 - 简化了原生镜像构建的序列化配置文件结构 * refactor(docs): 将数据库连接池从 HikariCP 替换为 Agroal 并更新 JavaScript 引擎描述 - 更新 API 文档中的 JDBC 数据源配置示例,使用 Agroal 替代 HikariDataSource - 修改连接池配置代码示例,采用 Agroal 的配置方式 - 在 flexmodel-core.md 中替换内存数据库配置的连接池实现 - 更新测试代码中的数据源初始化逻辑为 Agroal 实现 - 将 README.md 中的技术栈描述从 GraalVM JavaScript 改为 QuickJS - 移除 pom.xml 中已废弃的 metrics 相关依赖配置 - 更新网站组件中关于数据库连接池和 JavaScript 引擎的技术描述 - 清理注释中关于与 HikariCP 对齐的说明文字 * feat(api): 更新函数调用接口并升级依赖版本 - 将函数调用接口从 /api/runtime/projects/{projectId}/functions/{name} 迁移到 /api/projects/{projectId}/functions/{name}/invoke - 移除 RuntimeFunctionResource 类并将调用逻辑合并到 FunctionResource 中 - 更新 flexmodel-sdk 依赖从 0.0.4 到 0.0.6 版本 - 更新 functions-runtime 包版本从 0.1 到 0.0.2 - 更新文档和前端界面中的 API 端点引用 - 移除原生镜像配置中的废弃类引用 * refactor(engine): 移除未使用的构建项处理功能并优化配置结构 - 移除 GenerationTool 中的 BuildItemSPIFileGenerator 调用 - 移除 SessionFactory 中的 processBuildItem 方法及调用 - 从 EngineConfig 的项目循环中移除 schemaRegistry.add 调用 - 将默认 schema 名称常量统一定义到 FlexmodelConfig 接口 - 移除 FmJobRepository 和 FmJobStore 中的重复常量定义 - 添加 FlexmodelApplication 主启动类 - 从配置文件中移除未使用的数据源配置项 * refactor(deploy): 调整 Docker Compose 配置和服务器启动配置 - 将存储卷路径从根目录移动到 ./flexmodel-server/ 子目录 - 移除开发测试数据库相关环境变量配置 - 从配置文件中删除开发测试模式相关常量 - 在应用启动时注入并打印配置信息 - 更新 Git 忽略文件以匹配新的目录结构 - 修改启动日志消息从 "Starting..." 到 "started!" * config(server): 添加文件日志记录配置并调整数据库和存储忽略规则 - 在 application.properties 中添加文件日志记录配置,支持每日轮转保留 7 天 - 将 dev 和 test 环境的 SQLite 数据库配置移至主配置文件 - 更新 .gitignore 文件以正确忽略 logs、storage 和 database 目录 - 移除 application-dev.properties 和 application-test.properties 中的重复配置 - 统一日志格式为标准化的时间戳和级别显示格式 * feat(api-keys): 添加 API 密钥前端警告提示 - 在 API 密钥创建表单中添加前端安全警告提示 - 更新英文本地化文件,增加 API 密钥前端警告文本 - 更新中文本地化文件,增加 API 密钥前端警告文本 - 修改构建流程,移除 Maven 配置步骤并更新原生镜像构建配置 - 移除废弃的 native.yml 工作流文件 * refactor(test): 优化集成测试中的数据源配置 - 在连接池配置中添加最大大小限制为5 - 重新排列方法链调用顺序以提高可读性 - 保持现有的内存数据库配置不变
1 parent 7318ac8 commit 9f36701

110 files changed

Lines changed: 8865 additions & 1446 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/ci.yml‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,31 @@ jobs:
122122
-Dquarkus.container-image.username=${{ secrets.DOCKER_USERNAME }} \
123123
-Dquarkus.container-image.password=${{ secrets.DOCKER_PASSWORD }}
124124
125+
push-server-native-image:
126+
name: Push server native docker image
127+
needs: [ engine-test, server-test ]
128+
runs-on: ubuntu-latest
129+
steps:
130+
- uses: actions/checkout@v4
131+
with:
132+
submodules: 'recursive'
133+
token: ${{ secrets.GITHUB_TOKEN }}
134+
- name: Set up JDK 25
135+
uses: actions/setup-java@v4
136+
with:
137+
java-version: '25'
138+
distribution: 'temurin'
139+
cache: 'maven'
140+
cache-dependency-path: '**/pom.xml'
141+
- name: Build and push server native image
142+
run: |
143+
mvn -B -Dmaven.test.skip=true clean package -Pnative -pl flexmodel-server -am \
144+
-Dquarkus.container-image.build=true \
145+
-Dquarkus.container-image.push=true \
146+
-Dquarkus.container-image.image=cjbi/flexmodel-server-native:latest \
147+
-Dquarkus.container-image.username=${{ secrets.DOCKER_USERNAME }} \
148+
-Dquarkus.container-image.password=${{ secrets.DOCKER_PASSWORD }}
149+
125150
push-functions-runtime-image:
126151
name: Push functions-runtime docker image
127152
needs: [ functions-runtime-test ]

‎.gitignore‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@ build/
3838
### Project ###
3939

4040
*.db
41-
flexmodel-server/logs/
42-
flexmodel-server/storage/
41+
/logs/
42+
/storage/
43+
/database/

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Flexmodel 旨在为开发者提供一个开源、灵活且高度可定制的后
3232

3333
## 🛠️ 技术栈
3434

35-
- **后端**: Java 25, Quarkus 3, Maven, GraalVM JavaScript, HikariCP.
35+
- **后端**: Java 25, Quarkus 3, Maven, QuickJS, Agroal.
3636
- **前端**: React, TypeScript, Ant Design v6, Tailwind CSS, Vite, @xyflow/react, ECharts, Monaco Editor.
3737
- **云函数**: Deno, Hono.js.
3838
- **协议**: REST API, GraphQL, MCP, WebSocket, SSE.

‎deploy/.gitignore‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
11
/docker-compose/mysql/data/
2-
/docker-compose/database/
3-
/docker-compose/storage/
4-
.idea
2+
/docker-compose/flexmodel-sever/

‎deploy/docker-compose/.env‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
CONTAINER_NAME_PREFIX=prod
22

3+
# 运行模式: native (GraalVM 原生镜像) 或 jvm (JVM 模式)
4+
# 切换方式:修改 FLEXMODEL_RUN_MODE 和 FLEXMODEL_SERVER_IMAGE 两行
5+
# native → FLEXMODEL_SERVER_IMAGE=cjbi/flexmodel-server-native:latest
6+
# jvm → FLEXMODEL_SERVER_IMAGE=cjbi/flexmodel-server:latest
7+
FLEXMODEL_RUN_MODE=native
8+
FLEXMODEL_SERVER_IMAGE=cjbi/flexmodel-server-native:latest
9+
310
# mysql
411
MYSQL_DATABASE=flexmodel
512
MYSQL_ROOT_PASSWORD=123456

‎deploy/docker-compose/docker-compose.yml‎

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,25 +54,21 @@ services:
5454
- flexmodel
5555
flexmodel-server:
5656
container_name: ${CONTAINER_NAME_PREFIX}-flexmodel-server
57-
image: cjbi/flexmodel-server:latest
57+
image: ${FLEXMODEL_SERVER_IMAGE:-cjbi/flexmodel-server-native:latest}
5858
restart: always
5959
volumes:
60-
- ./storage:/deployments/storage
61-
- ./database:/deployments/database
62-
- ./logs/flexmodel-server:/deployments/logs
60+
- ./flexmodel-server/storage:/deployments/storage
61+
- ./flexmodel-server/database:/deployments/database
62+
- ./flexmodel-server/logs:/deployments/logs
6363
environment:
64-
- |
65-
JAVA_OPTS=
66-
-Dfile.encoding=UTF-8
67-
-Duser.timezone=GMT+8
68-
-Dflexmodel.datasource.db-kind=mysql
69-
-Dflexmodel.datasource.url=jdbc:mysql://mysql:3306/${MYSQL_DATABASE}
70-
-Dflexmodel.datasource.username=root
71-
-Dflexmodel.datasource.password=${MYSQL_ROOT_PASSWORD}
72-
-Dflexmodel.project-url-template=jdbc:mysql://mysql:3306/{{databaseName}}
73-
-Dflexmodel.datasource.dev_test.db-kind=sqlite
74-
-Dflexmodel.datasource.dev_test.url=jdbc:sqlite:file:database/sqlite_dev_test.db
75-
-Dquarkus.rest-client.function-runtime.url=http://flexmodel-functions-runtime:9999
64+
- TZ=GMT+08
65+
- FLEXMODEL_DATASOURCE_DB_KIND=mysql
66+
- FLEXMODEL_DATASOURCE_URL=jdbc:mysql://mysql:3306/${MYSQL_DATABASE}
67+
- FLEXMODEL_DATASOURCE_USERNAME=root
68+
- FLEXMODEL_DATASOURCE_PASSWORD=${MYSQL_ROOT_PASSWORD}
69+
- FLEXMODEL_PROJECT_URL_TEMPLATE=jdbc:mysql://mysql:3306/{{databaseName}}
70+
- QUARKUS_REST_CLIENT_FUNCTION_RUNTIME_URL=http://flexmodel-functions-runtime:9999
71+
- QUARKUS_HTTP_LIMITS_MAX_BODY_SIZE=100M
7672

7773
networks:
7874
- flexmodel

‎flexmodel-engine/docs/API.md‎

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -199,11 +199,14 @@ schemaOps.dropIndex("User", "name_index");
199199
#### JDBC数据源
200200

201201
```java
202-
// 创建JDBC数据源
203-
DataSource dataSource = new HikariDataSource();
204-
((HikariDataSource) dataSource).setJdbcUrl("jdbc:mysql://localhost:3306/test");
205-
((HikariDataSource) dataSource).setUsername("root");
206-
((HikariDataSource) dataSource).setPassword("password");
202+
// 创建JDBC数据源(以 Agroal 连接池为例)
203+
AgroalDataSourceConfigurationSupplier config = new AgroalDataSourceConfigurationSupplier();
204+
AgroalConnectionPoolConfigurationSupplier poolConfig = config.connectionPoolConfiguration();
205+
AgroalConnectionFactoryConfigurationSupplier factoryConfig = poolConfig.connectionFactoryConfiguration();
206+
factoryConfig.jdbcUrl("jdbc:mysql://localhost:3306/test");
207+
factoryConfig.principal(new NamePrincipal("root"));
208+
factoryConfig.credential(new SimplePassword("password"));
209+
DataSource dataSource = AgroalDataSource.from(config);
207210

208211
JdbcDataSourceProvider jdbcProvider = new JdbcDataSourceProvider(dataSource);
209212
```
@@ -477,12 +480,14 @@ try (Session session = sessionFactory.createSession("mySchema")) {
477480
### 1. 连接池配置
478481

479482
```java
480-
HikariDataSource dataSource = new HikariDataSource();
481-
dataSource.setMaximumPoolSize(20);
482-
dataSource.setMinimumIdle(5);
483-
dataSource.setConnectionTimeout(30000);
484-
dataSource.setIdleTimeout(600000);
485-
dataSource.setMaxLifetime(1800000);
483+
AgroalDataSourceConfigurationSupplier config = new AgroalDataSourceConfigurationSupplier();
484+
AgroalConnectionPoolConfigurationSupplier poolConfig = config.connectionPoolConfiguration();
485+
poolConfig.maxSize(20);
486+
poolConfig.minSize(5);
487+
poolConfig.acquisitionTimeout(Duration.ofSeconds(30));
488+
poolConfig.reapTimeout(Duration.ofMinutes(10));
489+
poolConfig.maxLifetime(Duration.ofMinutes(30));
490+
DataSource dataSource = AgroalDataSource.from(config);
486491
```
487492

488493
### 2. 查询优化

‎flexmodel-engine/docs/flexmodel-core.md‎

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -378,8 +378,11 @@ public class SessionConfig {
378378
@Produces
379379
@ApplicationScoped
380380
public SessionFactory sessionFactory() {
381-
HikariDataSource dataSource = new HikariDataSource();
382-
dataSource.setJdbcUrl("jdbc:sqlite:file::memory:?cache=shared");
381+
AgroalDataSourceConfigurationSupplier config = new AgroalDataSourceConfigurationSupplier();
382+
config.connectionPoolConfiguration()
383+
.connectionFactoryConfiguration()
384+
.jdbcUrl("jdbc:sqlite:file::memory:?cache=shared");
385+
DataSource dataSource = AgroalDataSource.from(config);
383386

384387
return SessionFactory.builder()
385388
.setDefaultDataSourceProvider(new JdbcDataSourceProvider("system", dataSource))
@@ -471,10 +474,12 @@ public class FullNameCalculator implements FieldCalculator {
471474
### 连接池配置
472475

473476
```java
474-
// 配置连接池
475-
DataSource datasource = new HikariDataSource();
476-
((HikariDataSource) datasource).setMaximumPoolSize(20);
477-
((HikariDataSource) datasource).setMinimumIdle(5);
477+
// 配置连接池(以 Agroal 为例)
478+
AgroalDataSourceConfigurationSupplier config = new AgroalDataSourceConfigurationSupplier();
479+
AgroalConnectionPoolConfigurationSupplier poolConfig = config.connectionPoolConfiguration();
480+
poolConfig.maxSize(20);
481+
poolConfig.minSize(5);
482+
DataSource datasource = AgroalDataSource.from(config);
478483
```
479484

480485
### 缓存机制
@@ -514,10 +519,13 @@ public class MySQLIntegrationTests extends AbstractSessionTests {
514519

515520
@BeforeAll
516521
public static void beforeAll() {
517-
HikariDataSource dataSource = new HikariDataSource();
518-
dataSource.setJdbcUrl(container.getJdbcUrl());
519-
dataSource.setUsername(container.getUsername());
520-
dataSource.setPassword(container.getPassword());
522+
AgroalDataSourceConfigurationSupplier config = new AgroalDataSourceConfigurationSupplier();
523+
AgroalConnectionFactoryConfigurationSupplier factoryConfig = config.connectionPoolConfiguration()
524+
.connectionFactoryConfiguration();
525+
factoryConfig.jdbcUrl(container.getJdbcUrl());
526+
factoryConfig.principal(new NamePrincipal(container.getUsername()));
527+
factoryConfig.credential(new SimplePassword(container.getPassword()));
528+
DataSource dataSource = AgroalDataSource.from(config);
521529
initSession(new JdbcDataSourceProvider("default", dataSource));
522530
}
523531
}

‎flexmodel-engine/flexmodel-codegen/pom.xml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@
4444
<scope>test</scope>
4545
</dependency>
4646
<dependency>
47-
<groupId>com.zaxxer</groupId>
48-
<artifactId>HikariCP</artifactId>
47+
<groupId>io.agroal</groupId>
48+
<artifactId>agroal-pool</artifactId>
4949
<scope>test</scope>
5050
</dependency>
5151
</dependencies>

‎flexmodel-engine/flexmodel-codegen/src/main/java/dev/flexmodel/codegen/GenerationTool.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static void run(Configuration configuration) {
3030
new EnumGenerator().generate(context, targetDirectory);
3131
new SchemaGenerator().generate(context, targetDirectory);
3232
context.putVariable("buildItems", buildItems);
33-
new BuildItemSPIFileGenerator().generate(context, schema.getBaseDir());
33+
// new BuildItemSPIFileGenerator().generate(context, schema.getBaseDir());
3434
}
3535
}
3636
}

0 commit comments

Comments
 (0)