EJB中的本地/远程和无接口视图是什么?

时间:2011-10-11 17:18:16

标签: java java-ee ejb

我试图理解我们在EJB中需要不同客户端视图的目的和原因。有人可以试着解释一下吗?

2 个答案:

答案 0 :(得分:119)

远程客户端视图

当您的EJB及其客户端处于分布式环境中时 - 意味着EJB和客户端将驻留在单独的Java虚拟机上。示例:托管在WebSphere Application Server上的EJB和使用托管在Tomcat服务器上的EJB API的Servlet。

本地客户端视图

仅当保证其他企业bean或客户端仅在单个JVM中寻址bean时。示例,EJB以及部署在同一WebSphere服务器上的Servlet。

无界面视图

与本地客户端视图几乎相同,但存在差异。在这种情况下,您的bean类不需要实现客户端视图接口。 bean类的所有公共方法都会自动向调用者公开。无接口视图总是通过注入或JNDI查找获取EJB引用 - 就像本地或远程视图一样;但是,EJB类型的EJB引用是bean类类型而不是本地接口的类型。这是作为Java EE6的一部分引入的一种便利。

本地客户端视图与无界面视图之间的区别

如果是非接口视图,则客户端和目标bean必须打包在同一个应用程序(EAR)中。在本地视图的情况下,客户端可以打包在与企业应用程序不同的应用程序中。因此,这为细粒化组件提供了更大的灵活性。

您可以使用本地客户端视图与无接口视图,具体取决于您的API使用方案。非接口视图很可能在未来的规范中接收灵活的功能。

原因

在历史上或其他方面,希望使用EJB服务的客户端应该“查找”容器上的bean(具有某些初始上下文)。这是因为所有调用都是通过容器提供的特殊EJB引用(代理)完成的。这允许容器提供所有其他bean服务,例如池化,容器管理的事务等。因此,客户端无法使用new运算符显式实例化EJB。客户端视图通过客户端可以访问的某些接口提供。服务器端的代理实现基于这些接口完成。如上所述,定义了不同的客户端视图以适应不同的部署方案。

答案 1 :(得分:3)

根据EJB 3.1规范的第3.2.2节:

  

仅通过本地客户端视图访问企业bean   需要支持包含在其中的本地客户端   应用程序作为提供本地客户端的企业bean   视图。可选地,该规范的兼容实现   支持从a访问企业bean的本地客户端视图   本地客户端打包在不同的应用程序中配置   应用程序间访问本地客户端视图的要求是   供应商特定的,超出了本规范的范围。   应用程序依赖于对本地客户端的应用程序间访问   视图是不可移植的。

     

无界面视图只是一个允许bean访问的便利功能   公开本地客户端视图,而不必声明单独的   接口