【问题标题】:@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 查找,我不会感到惊讶。