@EJB注释与JNDI查找

时间:2012-10-01 21:32:28

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

使用JNDI比使用@EJB注释注入无状态会话bean更好吗?

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

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

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

3 个答案:

答案 0 :(得分:4)

  

是否有任何情况下使用JNDI比注入一个更好   使用@EJB注释的无状态会话bean?

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

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

如果要查找的名称是常量且可以注入,请更喜欢@EJB注释:

  • 让测试更轻松
  • 找出本地/全球JNDI名称的麻烦少

答案 1 :(得分:3)

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

我绝对会选择@EJB。它更容易阅读(更少出错的代码),更易于维护(您不关心bean的JNDI命名空间位置)并且更容易测试(在执行单元测试时不需要切断令人讨厌的查找代码)。 / p>

在谈论性能原因时 - 我并非百分百肯定,但如果发生应用服务器实际上在您使用注释时在幕后进行JNDI查找,我不会感到惊讶。

答案 2 :(得分:1)

  

使用JNDI比使用@EJB注释注入无状态会话bean更好吗?

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