Ejb-客户端类型及访问方式

时间:2021-03-29 06:26:20

1.    简介

  我们知道Ejb的客户端仅通过业务逻辑Bean所定义的接口来访问业务逻辑,跟具体实现无关。

  当在开发企业Bean之前,首先要做的第一个决定是,EJB要支持什么样的客户端?因为不同的客户端,其访问方式也将不同,对Ejb的注解也将不同。

  Ejb支持的客户端有如下几种类型:

  Ø  本地客户端(客户端与其调用的Ejb对象同一个JVM进程中)

  Ø  远程客户端(客户端与其调用的Ejb对象不在同一个JVM进程中)

  Ø  WebService客户端

  Ejb的访问方式有如下几种类型:

  Ø  Local(本地访问)方式

  Ø  Remote(远程访问)方式

  Ø  WebMethod方式

  客户端类型与访问方式类型的对应关系如下:


  Ejb-客户端类型及访问方式


  其中本地客户端,即可以采用“Local(本地)”访问方式,也可以采用“Remote(远程)”访问方式。;而远程客户端只能采用Remote(远程)”访问方式;WebService客户端只能采用WebMethod访问方式。

  Web service客户端可以访问无状态会话Bean的接口,只有在业务逻辑方法被标识为@WebMethod的时候,web service客户端才可以访问到!下面主要介绍,Remote、Local两种访问方式与“远程客户端”、“本地客户端“。


2.    两种访问方式


  2.1  远程访问(调用)方式(Remote Access)

  当客户端与Ejb不在同一个JVM进程中时(一个进程代表一个独立的内存空间,两个进程之间是不能通过普通的方式进行调用的,可以通过底层网络通信例如,Socket来沟通),就需要远程访问方式。

  需要注意,远程方式,客户端与服务器之间通信的时候,数据(参数、返回值)需要序列化,而且要用传值(Copy一份)的方式进行传输。调用过程如下图:


  Ejb-客户端类型及访问方式


  2.2  本地访问方式(Local Access)

  由于客户端与其调用的Ejb对象同一个JVM进程中,所以客户端与服务器之间通信的时候,直接调用即可,不需要底层的网络通信。所以,数据(参数、返回值)不需要序列化,而且直接用传址(引用)的方式进行传输。调用过程如下:


  Ejb-客户端类型及访问方式


3.    两种客户端


  3.1  本地客户端(Local Client)

  一个本地客户端具有如下特性:

  Ø  它必须与企业Bean运行在同一个JVM。(即,需要与Ejb部署到同一服务器中)

  Ø  它可能是一个web组件或别的企业Bean。

  Ø  为了创建一个能够被本地访问的企业Bean,你必须用@Local注解来定义这些企业Bean。

  Ø  本地客户端,不需要添加EJB3_CLIENT 下的jar包,因为运行时JBoss会自动将这些东西放到客户端的目录下。

  注意:一个企业Bean接口可以同时被定义为@Remote和@Local。

               本地客户端,既可以通过Local方式访问企业Bean,也可以通过Remote方式方法企业Bean。


  3.2  远程客户端(Remote Client)

  一个远程客户端具有如下特性:

  Ø  它可以运行在跟企业Bean不同的机器或不同的JVM进程上

  Ø  它可以是web组件、应用客户端、或其它的企业Bean

  Ø  对远程客户端来说,企业Bean的位置是透明的

  Ø  为了创建一个能够被远程客户端访问的企业Bean,你必须用@Remote注解来定义这些企业Bean。

  注:远程客户端只能通过Remote方式来访问企业Bean。


4.    总结

  因为不同的客户端,其访问方式也将不同。所以,在开发企业Bean之前,首先要做的第一个决定是,EJB要支持什么样的客户端。上面主要介绍了两种客户端、两种客户端访问Ejb的方式。下面是对两者的一个简单对比:


  Ejb-客户端类型及访问方式


  不同的访问方式(Remote、Local、web service),会影响到Bean方法的参数及其返回值。如果是远程调用,客户端操纵的Bean的参数,其实是一份参数值的拷贝。因此,对参数的修改,不会影响到Bean。但是对于本地调用来说,客户端操纵的Bean的参数,就是一个引用,它对参数的修改,将会影响到Bean。所以,不管在哪种情况下,请避免修改参数的值

  因为远程调用的速度比较慢,所以在设计的时候,请尽量使用粗粒度的接口设计。即尽量减少方法的调用,并尽可能在一次方法调用中传输完毕所需要的数据!