我试图理解我们在EJB中需要不同客户端视图的目的和原因。有人可以试着解释一下吗?
答案 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访问的便利功能 公开本地客户端视图,而不必声明单独的 接口