Solon v3.8 更新与兼容说明
2025年12月18日 下午3:09:32
solon 仓库主要新特性展示
完美支持虚拟线程的三件套,齐全了:
- 不使用线程池,改用虚拟线程库(通过
solon.threads.virtual.enabled配置) - 不使用 synchronized,改用 ReentrantLock
- 不使用 ThreadLocal,改用 ScopedValue(java25 才正试可用)//这是新特性
设计 ScopeLocal 接口,同时适配 ThreadLocal 和 ScopedValue。java25 可引入新包:solon-java25
public class App {
public static void main(String[] args) {
Solon.start(App.class, args, app->{
//替换 ScopeLocal 接口的实现(基于 java25 的 ScopedValue 封装)
app.factories().scopeLocalFactory(ScopeLocalJdk25::new);
});
}
}
solon-ai 仓库主要新特性展示(mcp-sdk 已升为 v0.17)
新特性:
- mcp-sdk 升为 v0.17
- 新增 MCP 无状态会话(STREAMABLE_STATELESS)支持
- 新增 CompletableFuture 异步MCP工具支持
@McpServerEndpoint(channel = McpChannel.STREAMABLE_STATELESS, mcpEndpoint = "/mcp1")
public class McpServerTool {
@ToolMapping(description = "查询天气预报", returnDirect = true)
public CompletableFuture<String> getWeather(@Param(description = "城市位置") String location) {
return CompletableFuture.completedFuture("晴,14度");
}
}
传输方式对应表:(服务端与客户端,须使用对应的传输方式才可通讯)
| 服务端 | 客户端 | 备注 |
|---|---|---|
| STDIO | STDIO | |
| SSE | SSE | |
| STREAMABLE | STREAMABLE | |
| STREAMABLE_STATELESS | STREAMABLE | 对 server 集群很友好 |
- STREAMABLE_STATELESS 集群,不需要 ip_hash,但“原语”变化后无法通知 client
solon-flow 仓库主要新特性展示
新特性预览:Graph 硬编码方式
Graph graph = Graph.create("demo1", "示例", decl -> {
decl.addStart("start").title("开始").linkAdd("01");
decl.addActivity("01").title("01").task("@AaMetaProcessCom").linkAdd("end");
decl.addEnd("end").title("结束");
});
新特性预览:Graph 可输出节点状态(方便前端展示进度)
graph.toJson(FlowContext.of("....")); //带 stateful:{node1:state1}
新特性预览:FlowContext:lastNode (计算的中断与恢复)。参考:https://solon.noear.org/article/1246
flowEngine.eval(graph, context.lastNode(), context);
//...(从上一个节点开始执行)
flowEngine.eval(graph, context.lastNode(), context);
具体更新
- 新增
solon-ai-mcpmcp-java-sdk v0.17 适配(支持 2025-06-18 版本协议) - 新增
solon-ai-mcpmcp-server 异步支持 - 新增
solon-ai-mcpmcp-server streamable_stateless 支持 - 新增
solonScopeLocal 接口(用于 ThreadLocal 到 ScopedValue 兼容) - 添加
solonSolon.start(Class, MultiMap) 方法 - 添加
solonThreadsUtil:newVirtualThreadFactory 方法 - 添加
solonContextHolder:currentUse 方法 - 添加
solonController:remoting 属性(可替代 @Remoting 注解) - 添加
solon非依赖关系的 bean 异步初始化(@Init(async=true)) - 添加
solonStringable 接口 - 添加
solon-testHttpTester protocol 参数支持(方便 https 或 http 切换测试) - 添加
solon-serializationJsonPropsUtil2.dateAsFormat 添加 java.sql.Timestamp 类型支持 - 添加
solon-config-yaml依赖 solon-config-snack4 避免单个引入时啦掉 - 添加
solon-net-httputilsHttpSslSupplierAny - 添加
solon-web-rxRxEntity 类(方便对接 mcp-sdk) - 添加
solon-server-tomcatssl 适配支持 - 添加
solon-flowGraph:create(id,title,consumer) 方法 - 添加
solon-flowGraphDecl:addLoop 方法替代 addLooping(后者标为弃用) - 添加
solon-flowEvaluation:runCondition 方法替代 runTest(后者标为弃用) - 添加
solon-flowFlowContext:lastNode 方法(最后一个运行的节点) - 添加
solon-flowGraph:copy 方法 - 添加
solon-flowGraphDecl:getNode 方法 - 添加
solon-flowGraph:toYaml(FlowContext),Graph:toJson(FlowContext) 方法,可输出节点状态(方便前端展示进度) - 添加
solon-aiFunctionPrompt:handleAsync(用于 mcp-server 异步支持) - 添加
solon-aiFunctionResource:handleAsync(用于 mcp-server 异步支持) - 添加
solon-aiFunctionTool:handleAsync(用于 mcp-server 异步支持) - 添加
solon-ai-dialect-openaiClaudeChatDialect 方言 - 添加
solon-ai-coreChatMessage:toNdjson,fromNdjson 方法(替代 ChatSession:toNdjson, loadNdjson),新方法机制上更自由 - 添加
solon-ai-mcpMcpServerHolder 接口,用于隔离有状态与无状态服务 - 优化
solonapi-version 版本匹配 - 优化
solon-ai-mcpmcp StreamableHttp 模式下 服务端正常返回时 客户端异常日志打印的情况 - 优化
solon-floweval(Node startNode) 处理,改为从 root 开始恢复到 start 再开始执行(恢复过程中,不会执行任务) - 优化
solon-flowstateful 允许 stateController 独立使用(即可以没有 stateRepository) - 优化
solon-net-httputilsSslContextBuilder - 调整
namiNamiAttachment 切换为 ScopeLocal 接口实现 - 调整
solonContextHolder 切换为 ScopeLocal 接口实现 - 调整
solon-dataTranExecutorDefault 切换为 ScopeLocal 接口实现 - 调整
solonRunHolder:parallelExecutor 改为 newFixedThreadPool - 调整
solon-flowFlowStatefulService:evel、stepForward、stepBack 标为弃用 - 调整
solon-ai-mcpgetResourceTemplates、getResources 不再共享注册 - 修复
solonIndexFiles 路径表达式的兼容问题(添加转换*->@、:->!) - 修复
solon-docs-openapi2返回类型中泛型失效的问题(v3.7.0 出现) - snack4 升为 4.0.20
- jackson 升为 2.19.2
- liquor 升为 1.6.4
- asm 升为 9.9