评估采用claude code with deepseek 将 ThingsBoard 从spring迁移到jakarta EE 11的难度及工作量,在迁移spring的时候顺带需要把jakarta EE 11的运行环境改为open liberty
基于现有信息,将 ThingsBoard 从 Spring 迁移到 Jakarta EE 11 并部署到 Open Liberty,是一项工作量大、复杂度高、风险显著的工程。它不仅仅是简单的包名替换,而是涉及底层框架、核心 API 和运行时的全面重构。
以下是基于公开信息的详细评估。
🧐 现状:ThingsBoard 的技术栈与迁移起点
-
当前技术栈:ThingsBoard 后端基于 Spring Boot 构建,是一个大型、模块化的 Maven 项目。
-
最新动态:在 3.7 版本中,ThingsBoard 已升级至 JDK 17 和 Spring Boot 3.1,Spring 框架也更新至 6.1.8。
-
迁移起点:ThingsBoard 3.7 使用的 Spring Boot 3.x 基于 Jakarta EE 9 命名空间(
jakarta.*),你计划迁移到的 Jakarta EE 11 则是该技术的最新版本。这意味着需要跨越从 EE 9 到 EE 11 的多个版本。
🚧 核心挑战与工作量评估
工作量可以拆解为三个主要部分,每部分都有其特定的挑战。
1. 代码与依赖迁移(核心,工作量:极大)
这是迁移的主体部分,涉及大量代码改动。
-
包名替换(基础但繁琐):将所有
javax.*的 import 替换为jakarta.*。虽然可以使用工具批量完成,但 ThingsBoard 代码库庞大,必须确保无遗漏。 -
API 适配(核心难点):Jakarta EE 11 带来了众多规范更新,可能需要重写大量代码。
-
Servlet API:从
javax.servlet迁移到jakarta.servlet。 -
JPA:从
javax.persistence迁移到jakarta.persistence。 -
Bean Validation:从
javax.validation迁移到jakarta.validation。 -
依赖管理:所有传递依赖了旧版
javaxAPI 的第三方库都需要更新或寻找替代品。
-
2. 运行时环境迁移(工作量:中等)
将应用服务器从 Spring Boot 内置的 Tomcat/Jetty 切换到 Open Liberty。
-
Open Liberty 支持:好消息是,Open Liberty 从 24.0.0.11-beta 版本开始就支持 Jakarta EE 11,并在 26.0.0.5 版本中提供了官方支持。它还支持部署 Spring Boot 4.0 应用。
-
打包与部署(需要重新设计):ThingsBoard 目前是作为 Spring Boot 可执行 JAR 部署的。迁移到 Open Liberty 后,需要:
-
将应用重新打包为
.war或适配 Open Liberty 的部署结构。 -
重写或适配现有的 Dockerfile 和 Kubernetes 部署脚本。
-
在 Open Liberty 的
server.xml中配置所需功能(如servlet-6.1,jpa-3.2等)。
-
-
配置转换:Spring Boot 的
application.yml配置需要转换为 Open Liberty 的配置方式。
3. 测试与验证(工作量:巨大)
这是确保迁移后系统稳定性的关键,也是工作量最大的部分之一。
-
单元与集成测试:需全面审查、更新并执行所有测试用例,确保在新环境下通过。
-
性能与回归测试:ThingsBoard 作为物联网平台,对性能和稳定性要求极高。需要执行全面的性能测试,确保迁移后无性能退化。
-
功能验证:所有功能,包括设备管理、数据处理、可视化等,都必须进行详尽的端到端验证。
🤖 AI辅助(Claude Code + DeepSeek)的作用与局限
-
Claude Code + DeepSeek 的作用:
-
自动化重复劳动:可以高效地完成包名替换、简单的 API 调用更新等重复性工作。
-
代码解释与辅助:帮助理解复杂的代码片段,辅助生成测试用例。
-
迁移方案辅助:可以根据项目上下文提供迁移步骤的建议。
-
-
关键局限:
-
理解力有限:对于复杂的业务逻辑、框架层面的深度集成,AI 无法完全理解,需要人工决策。
-
无法进行测试:AI 无法替代人工进行功能、性能和回归测试。
-
需要人工监督:AI 生成的所有代码变更都需要资深工程师审查。
-
📊 工作量与风险总结
| 迁移阶段 | 主要任务 | 工作量评估 | 风险等级 |
|---|---|---|---|
| 代码与依赖迁移 | 包名替换、API 适配、依赖管理 | 极大 | 高 |
| 运行时环境迁移 | 打包方式改造、Open Liberty 配置、脚本调整 | 中等 | 中 |
| 测试与验证 | 单元/集成测试、性能/回归测试、功能验证 | 巨大 | 极高 |
| AI 辅助 | 代码辅助、自动化重复劳动 | 辅助性工作 | 低 |
💎 总结与建议
这是一个高风险、高投入的工程,需要审慎评估ROI。如果决定启动,可以考虑以下策略:
-
分阶段推进:可以先将 ThingsBoard 升级到最新的 Spring Boot 3.x(已完成),然后考虑迁移到 Jakarta EE 10 作为中间步骤,最后再升级到 Jakarta EE 11,以降低风险。
-
增强测试覆盖:在迁移前,尽可能提升自动化测试的覆盖率,这是保障迁移质量的生命线。
-
利用 AI 工具:将 Claude Code + DeepSeek 作为强大的辅助工具,用于处理重复性劳动和代码分析,但核心决策和最终审查必须由经验丰富的工程师完成。
-
做好回滚预案:任何重大迁移都必须有完善的回滚计划,以便在出现不可预知的问题时能迅速恢复。
总的来说,该项目的成功高度依赖于团队的技术深度、充足的人力与时间预算以及严谨的项目管理。
最新社区版为 ThingsBoard CE 4.3.1.2,Open Liberty可以采用 jakartaee11-26.0.0.3及更新的版本;基于上面的信息重新评估
基于 ThingsBoard CE 4.3.1.2 和 Open Liberty 26.0.0.3 这两个最新版本信息,重新评估后结论不变:这依然是一项工作量大、复杂度高、风险显著的工程。不过,新信息让评估的结论更加清晰,特别是明确了版本跨度带来的具体挑战。
🧐 现状:ThingsBoard 4.3.1.2 的技术栈分析
-
Java 版本:ThingsBoard 4.3.1.2 要求 Java 17 或更高版本,官方推荐 OpenJDK 21。这为后续升级提供了良好的基础。
-
Spring Boot 版本:根据其发展轨迹,ThingsBoard 从 v3.7 版本开始升级到了 Spring Boot 3.1。因此,可以确定 4.3.1.2 版本是基于 Spring Boot 3.x 构建的。
-
关键推断:Spring Boot 3.x 的基线是 Jakarta EE 9,这意味着 ThingsBoard 4.3.1.2 的代码已经完成了从
javax.*到jakarta.*的初步迁移。
🚧 核心挑战:从 EE 9 到 EE 11 的跨越
你计划将 ThingsBoard 从当前的 Jakarta EE 9 基线升级到 Jakarta EE 11,并更换应用服务器到 Open Liberty。这并非小版本升级,而是一次跨越两个主要版本的架构演进。
1. 代码与依赖迁移(工作量:极大)
-
API 的重大演进:从 EE 9 到 EE 11,许多核心规范发生了不兼容的变化。例如:
-
Servlet API:从
6.0升级到6.1。 -
JPA (持久化):从
3.0升级到3.2。 -
Bean Validation:从
3.0升级到3.1。
-
-
第三方库的兼容性:所有依赖了特定 Jakarta EE API 版本的第三方库都需要逐一核实并升级到兼容版本。这是一个耗时且容易引入新问题的过程。
-
隐含的下一步:根据业界规划,Spring Boot 4 将实现对 Jakarta EE 11 的完整支持。这意味着,你现在所做的迁移工作,相当于在为未来升级到 Spring Boot 4 做准备。
2. 运行时环境迁移(工作量:中等)
-
Open Liberty 已就绪:好消息是,Open Liberty 26.0.0.3 已经正式支持 Jakarta EE 11。你可以在其
server.xml中通过<feature>jakartaee-11.0</feature>来启用该特性。它支持的 Java 版本包括 Java SE 17, 21, 25, 26,与 ThingsBoard 的要求匹配。 -
打包与部署方式的改变:ThingsBoard 目前是作为一个 Spring Boot 可执行 JAR 运行的。要迁移到 Open Liberty,需要将其重新打包为
.war文件,并适配 Open Liberty 的部署结构和配置方式(如server.xml)。
3. 测试与验证(工作量:巨大)
这是确保迁移后系统稳定性的关键,也是工作量最大的部分。必须进行全面的单元测试、集成测试、性能测试和回归测试,以确保所有功能在全新的 Jakarta EE 11 和 Open Liberty 环境下正常运行。
📊 工作量与风险总结
| 迁移阶段 | 主要任务 | 工作量评估 | 风险等级 |
|---|---|---|---|
| 代码与依赖迁移 | API 适配(EE 9 -> 11)、依赖管理 | 极大 | 高 |
| 运行时环境迁移 | 打包方式改造、Open Liberty 配置 | 中等 | 中 |
| 测试与验证 | 单元/集成/性能/回归测试 | 巨大 | 极高 |
💎 总结与建议
在 ThingsBoard 4.3.1.2 的基础上,虽然基础环境(Java 17+)已经具备,但 Jakarta EE 9 到 11 的跨越依然是本次迁移的核心难点和主要工作量所在。
如果决定推进,建议采取以下策略:
-
分阶段、渐进式迁移:这是降低风险最有效的策略。
-
第一阶段:可以先将 ThingsBoard 部署到 Open Liberty 上,但使用其 Jakarta EE 9.1 或 10 的特性,确保应用能在新容器上运行。
-
第二阶段:在确认第一阶段稳定后,再逐步升级依赖和代码,最终过渡到 Jakarta EE 11。
-
-
增强测试覆盖率:在开始任何代码修改前,请尽可能提升项目的自动化测试覆盖率。这是保障迁移质量的生命线。
-
利用 AI 工具辅助:像 Claude Code 这样的工具可以高效地处理包名替换、简单的 API 调用更新等重复性劳动,但所有核心决策和最终代码审查仍需由经验丰富的工程师完成。
-
制定回滚预案:任何重大迁移都必须有完善的回滚计划,以便在出现不可预知的问题时能迅速恢复。
本项目的主要目的就是验证 Claude Code with deepseek 的迁移代码的能力,此外IBM提供了专业的工作是可以迁移到open liberty/websphere liberty环境的;如果在IBM专业迁移工具的基础上进行第一次迁移,在利用claude code with deepseek解决迁移遗留的问题及难点,是不是可以大幅降低迁移的工作流及难度?
这个思路是可行的,能够大幅降低迁移的工作量与难度。“IBM专业迁移工具先行,Claude Code with DeepSeek攻坚”的组合,是应对此类复杂迁移任务的高效策略。
这本质上是一个“工业化流水线”与“智能专家”协同的分工模式,能有效覆盖迁移工作的不同层面。以下是具体的分析:
🏭 第一棒:IBM专业迁移工具 —— 完成“工业化”重担
IBM的工具,如 IBM Application Modernization Accelerator (AMA) 及相关的开发者工具,主要承担的是规模化、自动化的重体力劳动。它们能高效处理:
-
环境分析与规划:自动发现并可视化应用间的依赖关系、数据库和消息队列等。
-
代码自动现代化:自动将现有Java企业应用代码升级到新的运行时环境,并升级至最新的Java SE版本。
-
依赖与配置迁移:处理诸如
javax到jakarta的包名替换、第三方库版本对齐,以及生成Open Liberty所需的server.xml等配置文件。
🧠 第二棒:Claude Code with DeepSeek —— 解决“智能化”难题
在IBM工具完成了大量基础工作后,会遗留一些需要深度理解和复杂决策的任务。这正是 Claude Code with DeepSeek 发挥作用的战场,它们构成了一个强大的“AI辅助编程组合”。
-
Claude Code的强项:凭借其超长上下文窗口和强大的推理能力,特别适合处理大型遗留系统的重构与复杂架构的梳理。它可以:
-
理解IBM工具未能完全自动化的、复杂的业务逻辑代码。
-
协调修改多个文件,解决因自动化迁移引入的深层逻辑问题。
-
实际案例表明,在
Claude Code + 人工审核的模式下,曾有团队将原本需要3-4人耗时6个月的重构任务,缩短至6周完成,其中AI的代码生成占比高达65%。
-
-
DeepSeek的辅助角色:它在中规模上下文、单点Bug修复和算法实现上准确率极高。可以用来快速验证Claude Code的修改、进行代码审查,或处理一些局部的、定义清晰的重构任务,形成互补。
✨ 协同效应:1+1 > 2
两者结合,可以将迁移工作流简化为一个高效的“流水线”:
-
扫描与分析:使用IBM AMA等工具对ThingsBoard代码库进行全面扫描,生成迁移计划和问题清单。
-
自动化迁移:运行IBM工具的自动化迁移功能,完成大部分重复性、规则性的代码和配置转换。
-
AI辅助攻坚:针对IBM工具未能处理的复杂业务逻辑、架构层面的决策、API的深度适配等问题,由Claude Code主导进行深度分析和代码重构。同时,用DeepSeek进行辅助验证、代码审查和局部修复。
-
人工审核与测试:所有AI生成的代码必须经过资深工程师的严格审查,并进行全面的集成与回归测试。人工审核是保障质量的关键防线。
⚠️ 风险与注意事项
-
上下文丢失风险:
Claude Code依赖CLAUDE.md文件来维持项目上下文。在迁移过程中,需注意维护此文件,防止AI“失忆”。 -
工具理解差异:需确保IBM的迁移工具与
Claude Code对项目结构的理解保持一致,避免产生冲突。 -
API调用的可靠性:AI工具在长任务中可能存在“遗忘”或产生“幻觉”的风险。需要通过将大任务拆解为小步骤、明确指定目标版本(如Jakarta EE 11) 等方式来规避。
-
安全与权限管理:注意AI工具的权限模型,在操作生产级代码或配置时,务必开启审批门控,防止意外修改。
💎 总结
这是一个扬长避短、科学合理的方案。IBM的工具解决了“量”的问题,而Claude Code with DeepSeek解决了“质”的问题。通过这种组合,可以将迁移工作的难度和人力成本降低一个数量级。
671

被折叠的 条评论
为什么被折叠?



