## 任务目标
请审查 Java 异常处理与事务结果的一致性。
以核查和评审为主,给出有证据的判断及可复核的修改建议;本次用户另有明确实现要求时,按其授权范围执行。
## 输入信息(选填)
两项均可留空,也可直接用一句话说明目标并附上已有资料。无需自行整理版本、配置或完整需求表;能读取的内容由执行者补齐。
事务业务操作:
工程与异常资料:
## 信息不完整时
先使用本次对话中已经说明的信息;用户留空、写“暂无/不清楚”或未替换输入标记,都按缺失处理,不当作真实路径、参数或业务值。已能从资料确定的内容不重复询问,不编造文件、日志、接口、业务值或执行结果。在用户已授权的范围内读取相关工程和材料,不为补齐输入擅自扩大操作范围。
### 优先确认
- 按顺序追踪校验、数据库变更、消息、缓存和远程调用的可逆性。
- 核对事务代理、自调用、传播、管理器和 rollbackFor 等实际配置。
- 检查 catch、finally、提前返回和统一响应包装是否吞掉原始失败。
- 查找提交后任务、重试、补偿、查询与幂等处理及现有故障样例。
### 可采用的默认处理
- 默认只读审查并提供最小修复片段,不改异常码、事务边界或执行外部副作用。
- 远程超时归为可能结果未知,不假设本地回滚能撤销外部操作。
- 框架行为以实际配置和调用链为准,缺运行证据时将回滚效果列为待测。
### 必须有依据的事项
- 用户可见成功的业务定义、允许的部分完成或补偿结果不明确时,不自行把失败转换成成功。
- 外部动作能否查询、撤销或幂等重试的契约未知时,不设计会重复扣款或重复履约的恢复动作。
只有缺口会改变业务结果、权限边界或关键实现,且无法从现有资料确认时,才集中提出最多 3 个关键问题;说明影响,并继续完成不依赖答案的部分。一般命名、排版和可逆实现细节按现有约定决定,不逐项等待确认。
### 资料仍不足时的交付
- 无工程时交付按失败位置划分的事务结果矩阵和可控故障测试样例。
- 有代码无环境时输出异常传播与事务边界证据,列出核对最终数据和副作用次数的执行步骤。
## 执行要求
适用范围:Java业务写操作及显式或框架管理的数据库事务;回滚条件必须核对实际框架配置,远程调用和消息不会自动随本地数据库回滚。
结合代码上下文检查异常后的回滚;注意 finally 中的返回可能遮蔽原有结果。
检查步骤:
1. 以一个真实业务操作为单位,按顺序列出校验、数据库变更、消息、缓存和远程请求,标明每个步骤的可逆性,以及用户看见成功的确切时点。
2. 核对事务边界、调用方式和异常到达的位置,分别模拟校验失败、数据库失败、外部超时及运行时异常;不要只看到事务注解就认定回滚一定生效。
3. 检查异常捕获后是否继续执行、改写返回值或丢失原因,区分可以转成业务结果的失败与必须向上交付的技术失败,保留定位问题所需的最少上下文。
4. 对数据库已提交而外部动作失败的情况明确结果,评估幂等重试、补偿和状态对账是否能恢复;对外部成功但响应超时的情况标记结果未知,避免直接重复副作用。
5. 提出能保留现有契约的最小修改,说明异常类型、返回码和事务配置如何协同;只给项目适用的机制,不为了套用模式拆分无必要的微服务。
6. 用可控故障点验证关键步骤,核对数据库最终状态、外部动作次数及用户响应;列出未覆盖的网络分区或并发场景,以及上线后的异常监测和补偿入口。
## 交付与验收
输出要求:按业务步骤表、异常传播图的文字说明、问题清单、修复片段和故障用例交付。每个用例必须包含初始状态、注入故障、最终数据和预期响应,不能用“未报错”代替一致性结论。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。
### 本条完成检查
- 每个风险关联业务步骤、异常位置、事务结果及用户响应。
- 修复建议保留现有契约并解释数据库提交与外部动作不同步的窗口。
- 用例包含初始状态、故障点、最终数据与响应,不以未报错判定一致性。
按本条要求组织结果,使用简洁中文和一致的编号、术语、缩进及空行;已有项目格式优先。只说明实际完成的内容,将采用的假设、未完成项和缺少的条件写在相关位置,不额外生成无关文档。未执行、无法复现或缺少证据的检查如实标注,不宣称已通过或已有性能收益。
## 参考资料与适用边界
来源(核验日期:2026-09-08):
[阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md)
整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。