用本地引用提高ejb访问效率
ejb 1.0和1.1规范只定义了一种在ejb组件中引用另一组件的方法,即通过bean的远程接口。如果两个bean都在同一个容器之内,则这种网络开销是不必要的。为解决这个问题,ejb 2.0规范定义了一种新的ejb引用类型,即本地引用。
一、两种引用类型
为了从其他ejb组件访问某个bean,容器提供了一种特殊的机制。这种机制允许一个bean提供者通过称为ejb引用的“逻辑名字”引用另一个ejb的home。ejb容器利用应用的部署描述器为ejb构造环境,而这些引用在部署描述器中作为特殊的项目声明。在部署描述器中,部署者把组件代码中要用到的ejb引用绑定到其他被引用ejb的home。
如前所述,在ejb 2.0规范出现之前,在一个ejb中引用其他bean只有一种方法,即通过远程接口,它要求进行跨越网络的远程过程调用。如果某个事务由多个bean协作完成,通过网络进行多个对象的汇集和释放将是一项相当繁重的工作。
ejb 2.0规范新增了一种本地接口类型,允许在同一容器之内的bean直接互相引用,避免了远程接口的网络开销。本地接口是一种标准的java接口,而不是从rmi继承得到。ejb组件的定义可以包含本地接口或远程接口,或者两者都定义。
本地引用的指定方式和传统的远程引用一样,即在部署描述器中指定。事实上,本地引用的部署描述元素与远程引用的描述元素完全对应。
下面的代码片断是一个典型的远程引用:
<ejb-ref>
<ejb-ref-name>ejb/productejb-ref-name>
<ejb-ref-type>entityejb-ref-type>
<ejb-link>../products/product.jar#productejb-link>
ejb-ref>
下面的代码片断是同一bean的本地引用:
<ejb-local-ref>
<ejb-ref-name>ejb/productejb-ref-name>
<ejb-ref-type>entityejb-ref-type>
<ejb-link>../products/product.jar#productejb-link>
ejb-local-ref>
下表简要说明了各个元素的用途:
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器