EJB - 家庭和远程接口的原因

时间:2014-04-10 05:58:53

标签: java-ee ejb

我是Java EE的新手,没有获得EJB的接口部分。有人可以帮忙说明为什么我们需要一个会话bean的两个接口(Home和Remote)?一个接口是否足以像在RMI中那样调用远程ejb?

2 个答案:

答案 0 :(得分:1)

home是EJB引用的工厂。在EJB 3.0+中,替换家庭使用JNDI作为工厂。使用房屋有一些好处:

  1. JNDI Context.lookup(甚至EJBContext.lookup)的开销可能远高于home.create()的开销。如果需要创建许多EJB引用(例如,有状态会话bean),那么这种开销可能会很明显。这两种方法的开销可能都很低,对您的应用程序而言无关紧要。
  2. Homes允许在创建有状态会话bean时传递参数。使用JNDI时没有直接的等价物,因此您必须拥有(并记住使用)初始化方法或类似方法。
  3. EJBHome有一个getEJBMetaData,可用于内省EJB。元数据对于通用框架很重要,因为CORBA要求使用PortableRemoteObject.narrow(即,使用home查找字符串,您可以获得一个home,缩小到EJBHome,反射调用create,调用getEJBMeta()。getRemoteInterfaceClass(),以及缩小到目标类型)。没有JNDI的等价物,但这不是必要的,因为EJB 3远程接口不需要依赖于RMI(-IIOP)。
  4. 我有时希望通用的javax.ejb.EJBFactory< T> EJB 3接口存在接口,以解决其中的一些问题。

答案 1 :(得分:0)

回到J2EE时代,我们想到了在应用程序中使用的分布式企业bean。

虽然这仍然有可能,但通常不会使用远程功能。您可以将bean本地放在同一容器中,也可以使用某种Web服务(SOAP或REST)。

这就是为什么在Java EE 6中他们引入了No-Interface视图的原因之一,因为这是大多数情况下的有效方法。您可以实现您的ejb并且根本没有接口。

尽管如此,您仍然可以拥有@Local@Remote界面。如果您打算将bean的功能暴露给外部,那么拥有一个远程接口是有意义的。如果您始终使用远程视图,即使您在本地调用它们,也会不必要地完成整个堆栈。