【问题标题】:EJB enterprise application doesn't need EJB interfaceEJB 企业应用程序不需要 EJB 接口
【发布时间】:2016-04-27 01:38:06
【问题描述】:

我创建了一个 Java EE 应用程序并向 EJB 项目添加了一个无状态会话 bean。 EJB 项目是 web/WAR 项目中的一个依赖项,我将在 EJB 项目中创建的 EJB 注入到我的一个 servlet 中。这工作正常,我能够在 Web 应用程序项目的 servlet 中部署和调用此 EJB 的方法。我的困惑是,我认为 EJB 必须在 EJB 容器中有一个接口,它们要么是本地的,要么是远程的。但是在我的示例中,我根本不需要接口并且能够在我认为至少需要本地接口的地方直接调用 EJB?

【问题讨论】:

    标签: jakarta-ee interface ejb


    【解决方案1】:

    从 EJB 3.1 开始,本地服务不再需要 EJB 接口。任何使用 @Stateless@Stateful@Singleton 注释的 POJO 类都是企业会话 bean。

    回到自然契约 一个类的契约包括所有 它的公共方法。公共方法旨在由 他们的客户。 Enterprise JavaBeans 3.1 的无接口视图 bean 在 EJB 3.1 的第 3.4.4 章中完全定义如下 规范(JSR 318):

    “……会话 Bean 的无接口视图是本地视图的变体 公开 bean 类的公共方法而不使用 独立的业务接口……”

    所有私有方法都被隐藏。包私有的方法和 受保护的可见性仅对同一包中的类可见 并且通常仅出于测试目的访问它们。一个 JUnit 测试 类与“被测类”(CUT)位于同一个包中,并且 模拟出不方便的引用,通常访问 直接打包私有或受保护的字段。

    检查:http://www.oracle.com/technetwork/articles/java/intondemand-1444614.html

    【讨论】:

    • 谢谢,不知道这个变化。仍然创建本地接口会更好吗?如果无接口视图的功能与本地接口视图相同,那么本地接口的意义何在?
    • 一旦你有了一个远程接口,如果你想在本地使用你的会话bean,你需要指定一个本地接口。如果你不远程公开你的bean,我认为你不需要创建一个本地的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多