【问题标题】:@EJB annotation vs JNDI lookup@EJB 注释与 JNDI 查找
【发布时间】:2012-09-22 18:48:51
【问题描述】:

在任何情况下使用 JNDI 比使用 @EJB 注释注入无状态会话 bean 更好吗?

我们将 JSF 1.2 与 Sun Application Server 9.0_01 一起使用。

我们的团队正在讨论在托管 Bean 中使用 SLSB 时哪种方法更好。

我已阅读以下问题,但想知道是否存在首选查找的情况。

【问题讨论】:

    标签: jakarta-ee dependency-injection ejb ejb-3.0 jsf-1.2


    【解决方案1】:

    有没有什么情况下使用 JNDI 比注入 使用@EJB 注释的无状态会话bean?

    没有更好的情况——但有必要的情况:

    • 在编译时不知道要查找的名称时(我认为这是糟糕的设计,但这是另一个问题)
    • 当注释不受支持时,例如在常规的非托管助手类和其他少数情况下(我们可以再次争论在这些类中依赖 EJB 是好还是坏)。

    如果要查找的名称是常量并且可以注入,则首选@EJB 注释:

    • 让测试更容易
    • 找出本地/全局 JNDI 名称的麻烦更少

    【讨论】:

      【解决方案2】:

      JNDI 查找在 SFSB 的情况下可能很重要(确保始终访问相同的实例),但在 SLSB 的情况下,我不知道 JNDI 会以任何方式“更好”的任何情况。

      我肯定会选择@EJB。它更易于阅读(不易出错的代码)、更易于维护(您不关心 bean 的 JNDI 命名空间位置)并且更易于测试(在执行单元测试时无需切断讨厌的查找代码)。

      在谈论性能原因时 - 我不是 100% 肯定,但如果在您使用注释时应用程序服务器实际上正在后台执行 JNDI 查找,我不会感到惊讶。

      【讨论】:

        【解决方案3】:

        是否存在使用 JNDI 比使用 @EJB 注释注入无状态会话 bean 更好的情况?

        此问题和相关答案中描述了需要 JNDI 查找 SLSB 的具体情况:JPA Inheritance and EJB polymorphism。本质上,当 SLSB 的 类名 在运行时确定时。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-21
          • 2014-05-08
          • 2013-02-02
          相关资源
          最近更新 更多