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

3.4 KiB

代码审查报告

文件: 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 接口。