2014-10-01 48 views
0

我开始学习EJB技术。我的问题受到YouTube指南的启发:https://www.youtube.com/watch?v=NM61Xt7SGmk。这是有点长,所以我会尽量告诉它短:使用EJB时​​可以混合使用DI和JNDI查找吗?

有引入了EJB的工作方式有两种:

  1. 手动创建的javax.naming.InitialContext对象,并在此之后,获得EJB使用。用于获取EJB实例的lookup(String jndiPath)方法。
  2. 使用依赖注入:使用@EJB之类的注释,并让容器来管理所有这些EJB引用。

如果某人在一个应用程序(.ear或.war)中不一致地使用上述两种方法会怎么样?手动创建上下文(在1.点中)以及由容器创建的上下文(在2.点中)是否是相同的上下文?它是否会导致不必要的重复EJB实例?它会起作用吗?

回答

0

回答你的问题的第一部分。

许多大型项目有时会发现自己使用这两种机制。这通常发生在:

  1. 应用程序需要访问远程ejbs(可能运行在不同的服务器上)。应用程序将不得不通过InitialContext进行手动查找当应用程序定义自己的ejbs时,它将简单地使用EJB注入。但是,在这里进行手动查找同样是允许的。唯一的原因是它不必要,当你可以让容器为你做。
  2. EJB规范允许无状态EJB池,以便每个请求可以由不同的ejb bean实例处理。如果在你的问题中你的意思是不同的情况,情况可能如此。但是还要注意,注入的对象可能(并且大部分是)实际bean实现的代理。对于单例bean,容器在执行上下文中保证一个bean的单个实例,因此无论你是手动查找还是ejb注入,它都会给你相同的bean。
  3. 有状态的ejbs有状态和客户端会话必须维护。如果您处于同一客户端会话中,手动查找或注入会提供相同的实例(可能此部分需要更多说明)

所以要回答问题的最后部分,不会有任何重复。

相关问题