什么是 EJB 中的本地/远程和无接口视图?
我试图理解 EJB 中的目的是什么,以及为什么我们需要不同的客户端视图。有人可以尝试解释吗?
我试图理解 EJB 中的目的是什么,以及为什么我们需要不同的客户端视图。有人可以尝试解释吗?
远程客户端视图
当您的 EJB 及其客户端将位于分布式环境中时 - 这意味着 EJB 和客户端将驻留在单独的 Java 虚拟机上。示例 :托管在 WebSphere Application Server 上的 EJB 和使用托管在 Tomcat 服务器上的 EJB API 的 Servlet。
本地客户端视图
仅当保证其他企业 Bean 或客户端仅在单个 JVM 中寻址该 Bean 时。例如,EJB 以及部署在同一 WebSphere 服务器上的 Servlet。
无接口视图
与本地客户端视图几乎相同,但存在差异。在这种情况下,实现客户端视图接口不需要 Bean 类。Bean 类的所有公共方法都自动向调用方公开。无接口视图始终通过注入或 JNDI 查找获取 EJB 引用 - 就像本地或远程视图一样;但是,EJB 引用的 Java 类型是 Bean 类类型,而不是本地接口的类型。这是作为 Java EE6 的一部分引入的便利。
本地客户端视图和无接口视图的区别
在没有接口视图的情况下,客户端和目标 Bean 必须打包在同一应用程序 (EAR) 中。在本地视图的情况下,客户端可以打包在独立于企业应用程序的应用程序中。因此,这在细粒度组件方面提供了更大的灵活性。
您可以使用本地客户端视图与无接口视图,具体取决于您的 API 使用方案。无界面视图很可能在未来的规范中获得灵活的功能。
原因
从历史上看,无论从历史上还是其他方式,希望使用EJB服务的客户都应该在容器上“查找”Bean(具有某些初始上下文)。这是因为所有调用都是通过容器提供的特殊 EJB 引用(代理)进行的。这允许容器提供所有附加的Bean服务,例如池化,容器管理的事务等。因此,客户端不能使用运算符显式实例化 EJB。客户端视图通过客户端有权访问的某些接口提供。服务器端的代理实现就是基于这些接口完成的。定义了不同的客户端视图来适应上面提到的不同部署方案。new
根据 EJB 3.1 规范的 3.2.2 节:
只有打包在与提供本地客户机视图的企业客户机相同的应用程序中的本地客户机才需要支持通过本地客户机视图访问企业 Bean。此规范的兼容实现可以选择性地支持从打包在不同应用程序中的本地客户机访问企业 Bean 的本地客户机视图。应用程序间访问本地客户端视图的配置要求是特定于供应商的,不在此规范的范围之内。依赖于对本地客户端视图的应用程序间访问的应用程序是不可移植的。
无接口视图只是一个方便的功能,它允许 Bean 公开本地客户端视图,而无需声明单独的接口。