Files
2026Technology-Competition/data/demo-pmd/reports/EJBNamingDemo-review.md
T

53 lines
3.4 KiB
Markdown

# 代码审查报告
**文件:** `data\demo-pmd\src\com\demo\codestyle\extra\EJBNamingDemo.java`
**语言:** java
**耗时:** 213.0s
**分析工具:** pmd
---
总计: 11 | 错误: 3 | 警告: 2 | 建议: 6
静态分析 · 8 个问题
- 🔴 `pmd:SystemPrintln` L35
第 35 行:使用了 System.out/err 输出。
建议: 避免直接使用 System.out.println,改用日志框架;例如使用 java.util.logging.Logger。
- 🟡 `pmd:AtLeastOneConstructor` L22
第 22 行:每个类应至少声明一个构造器。
建议: 为 MissingBeanSuffix 添加 public 无参构造器(如 public MissingBeanSuffix() {}),不要依赖编译器生成的默认构造器。
- 🔵 `pmd:UnnecessaryImport` L11
第 11 行:重复导入 'javax.ejb.EJBObject'。
建议: 删除第 11 行重复的 import javax.ejb.EJBObject,只保留第 8 行的一次导入。
- 🔵 `pmd:LocalHomeNamingConvention` L14
第 14 行:会话 EJB 的本地 Home 接口应以 LocalHome 作为后缀。
建议: 将接口名从 MissingLocalHomeSuffixBean 改为 MissingLocalHomeSuffixLocalHome,使其以 LocalHome 结尾。
- 🔵 `pmd:LocalInterfaceSessionNamingConvention` L18
第 18 行:会话 EJB 的本地接口应以 Local 作为后缀。
建议: 将接口名从 MissingLocalSuffixBean 改为 MissingLocalSuffixLocal,使其以 Local 结尾。
- 🔵 `pmd:MDBAndSessionBeanNamingConvention` L22
第 22 行:SessionBean/MessageBean 实现类应以 Bean 作为后缀。
建议: 将类名从 MissingBeanSuffix 改为 MissingSuffixBean,使其以 Bean 结尾。
- 🔵 `pmd:RemoteInterfaceNamingConvention` L26
第 26 行:会话 EJB 的远程接口不应带有后缀。
建议: 将接口名从 BadSuffixSession 改为 BadSuffix,去掉 Session 后缀。
- 🔵 `pmd:RemoteSessionInterfaceNamingConvention` L30
第 30 行:会话 EJB 的远程 Home 接口应以 Home 作为后缀。
建议: 将接口名从 MissingHomeSuffixEJB 改为 MissingHomeSuffixHome,使其以 Home 结尾。
AI 审查 · 3 条建议
- 🔴 [AI] [bug] `multiple-public-top-level-types` L14
**一个源文件中存在多个 public 顶层类型**
第 14、18、22、26、30 行都声明了 public 顶层接口/类。Java 规定每个编译单元只能有一个 public 顶层类型,且源文件名必须与该 public 类型名一致,否则编译失败。
建议: 将每个 public 类型拆分为独立的 .java 文件(文件名与类型名一致);若这些类型不需要外部访问,可将除一个之外的 public 改为包私有。
- 🔴 [AI] [bug] `session-bean-methods-not-implemented` L22
**SessionBean 实现类缺少必需的方法**
MissingBeanSuffix 是具体类,实现了 javax.ejb.SessionBean,但没有实现接口要求的方法(ejbActivate、ejbPassivate、ejbRemove、setSessionContext),导致编译失败。
建议: 补全这四个方法的空实现。由于 EJB Bean 类不能是 abstract,不能通过改为抽象类来绕过。
- 🟡 [AI] [design] `deprecated-ejb-2-api` L22
**使用了已废弃的 EJB 2.x SessionBean API**
MissingBeanSuffix 实现的是 javax.ejb.SessionBean,这是 EJB 2.x 时代的接口;同时 Home/Object 接口也是 EJB 2.x 模式,这类 API 在现代 EJB 容器中已过时。
建议: 如有条件,迁移到 EJB 3.x:在 Bean 类上使用 @Stateless/@Stateful 注解,并通过 @Local/@Remote 注解暴露业务接口,避免实现大量回调方法和手工维护 Home/Component 接口。