【EJB】客户端类型

前言

==

客户端通过无界面视图或通过业务接口访问企业bean。企业bean的无界面视图将企业bean实现类的公共方法公开给客户端。使用企业bean的无界面视图的客户端可能会调用企业bean实现类中的任何公共方法或实现类的任何超类。业务接口是包含企业bean的业务方法的标准Java编程语言接口。

叙述

==

企业bean的客户端通过依赖注入,使用Java编程语言注释或JNDI查找来获得对企业bean实例的引用,使用Java命名和目录接口语法来查找企业bean实例。

依赖注入是获取企业bean引用的最简单方法。在JavaEE服务器托管的环境中运行的客户端,JavaServer Faces Web应用程序,JAX-RS Web服务,其他企业bean或Java EE应用程序客户端支持使用javax.ejb.EJB注释的依赖注入。

在Java EE服务器管理的环境之外运行的应用程序(例如Java SE应用程序)必须执行显式查找。JNDI支持用于标识Java EE组件的全局语法来简化这种显式查找。

本地客户端


本地客户端如下特点。

(1)它必须与其访问的企业bean在同一个应用程序中运行。

(2)它可以是一个Web组件或另一个企业bean。

(3)对本地客户来说,它所访问的企业bean的位置是不透明的。

企业bean的无界面视图是本地视图。企业bean实现类的公共方法暴露给访问企业bean的无接口视图的本地客户端。使用无界面视图的企业bean不实现业务接口。

本地业务接口定义了bean的业务和生命周期方法。如果bean的业务接口没有使用@Local 或者@Remote进行装饰,并且如果bean类没有使用@Local或者@Remote 指定接口 ,则业务接口默认为本地接口。

使用无接口视图访问本地企业Bean

通过依赖注入或JNDI查找来实现对公开本地非接口视图的企业bean的客户端访问。

(1)要通过依赖注入获取企业bean的无界面视图的引用,请使用javax.ejb.EJB注释并指定企业bean的实现类:

@EJB

Example Bean example Bean;

(2)要通过JNDI查找来获取企业bean的无界面视图的引用,请使用javax.naming.InitialContext接口的 lookup方法:

Example Bean example Bean = (Example Bean)

InitialContext.lookup (“java: module/Example Bean”);

客户端不使用new操作员来获取使用无界面视图的企业bean的新实例。

访问实现业务接口的本地企业Bean

实现本地业务接口的企业bean的客户端访问通过依赖注入或JNDI查找来完成。

(1)要通过依赖注入来获取对企业bean的本地业务接口的引用,请使用javax.ejb.EJB注释并指定企业bean的本地业务接口名称:

@EJB

Example example;

(2)要通过JNDI查找来获取对企业bean的本地业务接口的引用,请使用javax.naming.InitialContext 接口的lookup方法:

Example Local example = (Example Local)

InitialContext.lookup (“java: module/Example Local”);

远程客户端


企业bean的远程客户端具有以下特征。

(1)它可以在不同的机器上运行,也可以在它所访问的企业bean上运行不同的JVM。(不需要在不同的JVM上运行。)

(2)它可以是一个Web组件,一个应用程序客户端或另一个企业bean。

(3)对于远程客户端来说,企业bean的位置是透明的。

(4)企业bean必须实现一个业务接口。也就是说,远程客户端可能无法通过无界面视图访问企业bean。

要创建允许远程访问的企业bean,您必须

(1)用@Remote注释来装饰企业bean的业务接口 :

@Remote

public interface InterfaceName { … }

(2)或者用@Remote指定业务接口或接口来修饰bean类:

@Remote(InterfaceName.class)

public class BeanName implements InterfaceName { … }

远程接口定义了特定于bean的业务和生命周期方法。例如,名为bean的远程接口 BankAccountBean可能具有名为depositand的业务方法credit。图35-1显示了接口如何控制客户端的企业bean视图。

对实现远程业务接口的企业bean的客户端访问通过依赖注入或JNDI查找来完成。

(1)要通过依赖注入javax.ejb.EJB 获取企业bean的远程业务接口的引用,请使用注释并指定企业bean的远程业务接口名称:

@EJB Example example;

(2)要通过JNDI查找来获取对企业bean的远程业务接口的引用,请使用javax.naming.InitialContext 接口的lookup方法:

ExampleRemote example = (ExampleRemote)

InitialContext.lookup(“java:global/myApp/ExampleRemote”);

Web服务客户端


Web服务客户端可以通过两种方式访问Java EE应用程序。首先,客户端可以访问使用JAX-WS创建的Web服务。其次,Web服务客户端可以调用无状态会话Bean的业务方法。消息bean不能被Web服务客户端访问。

只要它使用正确的协议(SOAP,HTTP,WSDL),任何Web服务客户端都可以访问无状态会话Bean,无论客户端是否使用Java编程语言编写。客户端甚至不知道什么技术实现了服务:无状态会话bean,JAX-WS或其他一些技术。另外,企业bean和web组件可以是web服务的客户端。这种灵活性使您能够将Java EE应用程序与Web服务集成。

Web服务客户端通过Bean的Web服务端点实现类访问无状态会话Bean。默认情况下,bean类中的所有公共方法都可以被Web服务客户端访问。该
@WebMethod注释可以用来定制的Web服务方法的行为。如果@WebMethod注释被用来装饰bean类的方法,那么只有装饰的方法才会@WebMethod暴露给Web服务客户端。

访问方式

在设计Java EE应用程序时,我们需要决定企业bean允许的客户端访问类型:远程,本地或Web服务。

是否允许本地或远程访问取决于以下因素。

(1)相关Bean类的紧密或松散耦合:

紧密耦合的Bean类相互依赖。例如,如果处理销售订单的会话bean调用一个将确认消息发送给客户的会话bean,则这些bean紧密耦合。紧密结合的Bean类是本地访问的理想选择。因为它们作为一个逻辑单元组合在一起,它们通常经常互相呼叫,并且可以从本地访问可能提高的性能中受益。

(2)客户端类型:

如果应用程序客户端访问企业bean,则应允许远程访问。在生产环境中,这些客户端几乎总是在运行GlassFish服务器的机器上运行。如果企业bean的客户端是Web组件或其他企业bean,则访问类型取决于您想要如何分发组件。

(3)组件分布:

Java EE应用程序是可扩展的,因为它们的服务器端组件可以分布在多个机器上。例如,在分布式应用程序中,运行Web组件的服务器可能不是它们所访问的企业bean所在的服务器。在这种分布式的情况下,企业bean应该允许远程访问。

(4)性能:

由于网络延迟等因素,远程呼叫可能比本地呼叫慢。另一方面,如果您在不同服务器之间分发组件,则可以提高应用程序的整体性能。这两种说法都是概括性的; 性能可能因不同的操作环境而异。不过,你应该记住你的应用程序设计如何影响性能。

如果您不确定企业bean应具有哪种类型的访问权限,请选择远程访问。这个决定给你更多的灵活性。将来,您可以分发组件来满足您应用程序日益增长的需求。

尽管这种情况并不常见,但企业bean可以允许远程访问和本地访问。如果是这种情况,那么无论是bean的业务接口必须被明确指定为一个业务接口,通过装饰@Remote或@Local注解,或者bean类必须明确指定业务接口通过使用@Remote和@Local注释。相同的业务接口不能同时是本地和远程业务接口。

小结

如果您不确定企业bean应具有哪种类型的访问权限,请选择远程访问。这个决定给你更多的灵活性。将来,您可以分发组件来满足您应用程序日益增长的需求。
尽管这种情况并不常见,但企业bean可以允许远程访问和本地访问。如果是这种情况,那么无论是bean的业务接口必须被明确指定为一个业务接口,通过装饰@Remote或@Local注解,或者bean类必须明确指定业务接口通过使用@Remote和@Local注释。相同的业务接口不能同时是本地和远程业务接口。

最后

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取
我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-fAUIe05b-1719592322372)]

[外链图片转存中…(img-MjHDPH1H-1719592322373)]

[外链图片转存中…(img-MHIeXTTT-1719592322374)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值