Solon v3.7.3

Solon v3.8 更新与兼容说明

</> markdown
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度");
    }
}

传输方式对应表:(服务端与客户端,须使用对应的传输方式才可通讯)

服务端客户端备注
STDIOSTDIO
SSESSE
STREAMABLESTREAMABLE
STREAMABLE_STATELESSSTREAMABLE对 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-mcp mcp-java-sdk v0.17 适配(支持 2025-06-18 版本协议)
  • 新增 solon-ai-mcp mcp-server 异步支持
  • 新增 solon-ai-mcp mcp-server streamable_stateless 支持
  • 新增 solon ScopeLocal 接口(用于 ThreadLocal 到 ScopedValue 兼容)
  • 添加 solon Solon.start(Class, MultiMap) 方法
  • 添加 solon ThreadsUtil:newVirtualThreadFactory 方法
  • 添加 solon ContextHolder:currentUse 方法
  • 添加 solon Controller:remoting 属性(可替代 @Remoting 注解)
  • 添加 solon 非依赖关系的 bean 异步初始化(@Init(async=true)
  • 添加 solon Stringable 接口
  • 添加 solon-test HttpTester protocol 参数支持(方便 https 或 http 切换测试)
  • 添加 solon-serialization JsonPropsUtil2.dateAsFormat 添加 java.sql.Timestamp 类型支持
  • 添加 solon-config-yaml 依赖 solon-config-snack4 避免单个引入时啦掉
  • 添加 solon-net-httputils HttpSslSupplierAny
  • 添加 solon-web-rx RxEntity 类(方便对接 mcp-sdk)
  • 添加 solon-server-tomcat ssl 适配支持
  • 添加 solon-flow Graph:create(id,title,consumer) 方法
  • 添加 solon-flow GraphDecl:addLoop 方法替代 addLooping(后者标为弃用)
  • 添加 solon-flow Evaluation:runCondition 方法替代 runTest(后者标为弃用)
  • 添加 solon-flow FlowContext:lastNode 方法(最后一个运行的节点)
  • 添加 solon-flow Graph:copy 方法
  • 添加 solon-flow GraphDecl:getNode 方法
  • 添加 solon-flow Graph:toYaml(FlowContext),Graph:toJson(FlowContext) 方法,可输出节点状态(方便前端展示进度)
  • 添加 solon-ai FunctionPrompt:handleAsync(用于 mcp-server 异步支持)
  • 添加 solon-ai FunctionResource:handleAsync(用于 mcp-server 异步支持)
  • 添加 solon-ai FunctionTool:handleAsync(用于 mcp-server 异步支持)
  • 添加 solon-ai-dialect-openai ClaudeChatDialect 方言
  • 添加 solon-ai-core ChatMessage:toNdjson,fromNdjson 方法(替代 ChatSession:toNdjson, loadNdjson),新方法机制上更自由
  • 添加 solon-ai-mcp McpServerHolder 接口,用于隔离有状态与无状态服务
  • 优化 solon api-version 版本匹配
  • 优化 solon-ai-mcp mcp StreamableHttp 模式下 服务端正常返回时 客户端异常日志打印的情况
  • 优化 solon-flow eval(Node startNode) 处理,改为从 root 开始恢复到 start 再开始执行(恢复过程中,不会执行任务)
  • 优化 solon-flow stateful 允许 stateController 独立使用(即可以没有 stateRepository)
  • 优化 solon-net-httputils SslContextBuilder
  • 调整 nami NamiAttachment 切换为 ScopeLocal 接口实现
  • 调整 solon ContextHolder 切换为 ScopeLocal 接口实现
  • 调整 solon-data TranExecutorDefault 切换为 ScopeLocal 接口实现
  • 调整 solon RunHolder:parallelExecutor 改为 newFixedThreadPool
  • 调整 solon-flow FlowStatefulService:evel、stepForward、stepBack 标为弃用
  • 调整 solon-ai-mcp getResourceTemplates、getResources 不再共享注册
  • 修复 solon IndexFiles 路径表达式的兼容问题(添加转换 *->@:->!
  • 修复 solon-docs-openapi2 返回类型中泛型失效的问题(v3.7.0 出现)
  • snack4 升为 4.0.20
  • jackson 升为 2.19.2
  • liquor 升为 1.6.4
  • asm 升为 9.9