您的位置:jsp学习站首页 >> JAVA类 >> JAVA基础 >> J2EE应用部署(一):基础篇

J2EE应用部署(一):基础篇 (4)

[ 来源:互网络 | 更新日期:2007-09-01 02:34:27 | 浏览次数:9235]
简介:1 J2EE应用的构成       1
能够装入EJB的Home接口、远程接口、公共类和Stub类。这里所谓的公共类包括异常类、参数类等,它们应该放入一个依赖JAR文件,作为一个有着依赖关系的包装入。在这种模式下,供应商必须为依赖于EJB的Web应用选择一种装入Home接口、远程接口和Stub类的方式。 

下面是这种类装载模式的一个简单实现(客户端应用在另一个虚拟机之内运行,与所有其他组件隔离,因此下面的模型不包含客户端应用的类装入过程。): 

在这个模型中,每一个EAR应用将由一个定制的EAR类装载器实例装入,EJB应用和Web应用都由EAR类装载器的定制子类装载器装入。在EAR文件中,所有准备给一个以上应用共享的类都由EAR类装载器装入,包括所有公用依赖库和资源适配器包。如果一个类由EAR类装载器装入,它将自动地可供所有由子类装载器装入的类使用。 

所有EJB应用都由单一的EJB类装载器装入,这个EJB类装载器是EAR类装载器的子类装载器。即使存在多个不同的EJB JAR文件,它们也都由同一类装载器装入。这一机制有利于同一JVM之内不同应用之间进行的EJB到EJB的调用。 

每一个Web应用都在不同的类装载器中装入,保持类之间的隔离。这是因为,如果每一个Web应用有一个名为index.jsp的文件,则从该JSP页面生成的Servlet会有同样的类名字。由于每一个Web应用应该能够装入该Servlet的自己的版本,因此所有Web应用必须在各自的类装载器中隔离起来。 

Web应用要使用在同一EAR文件内部署的EJB,必须能够看到这些EJB的外部接口和Stub实现类。由于EJB和Web应用的类装载器属于平等的关系(不是父-子关系),Web应用不能直接看到必需的类文件。然而,Web应用类装载器和EJB应用类装载器有着相同的父类装载器。为了让Web应用能够使用EJB的类文件,EJB类装载器获取各个EJB的公用接口和它们的Stub实现文件,然后把它们“导出”给EAR类装载器,在EAR类装载器中它们可以被EAR中的所有应用访问。公用接口和Stub实现文件就是客户程序调用EJB时要用到的类。这样,Web应用就能够装入使用所有EJB时需要用到的类。 

依赖工具库可能在不同位置装入,具体由指定这些库的位置决定。如果一个Web应用在它的WEB-INFlib目录下列出了一个依赖库,则该库只和这个Web应用有关,其他应用无需访问该库的内容,因此该库不必由EAR类装载器装入。在这种情况下,Web应用类装载器将装入该库的JAR文件。其他Web应用如果也要使用该库,则必须在它自己的WEB-INFlib目录下提供。 

如果依赖库由EJB和Web应用共享,则它必须由EAR类装载器装入。EAR类装载器将装入所有声明为EJB所依赖的库,使得依赖库中的类具有合适的可见性。这就允许EJB开发者把所有公用的异常类、Web应用可见的定制输入参数类、EJB封装到一个依赖库里面。这个库常常称作common.jar,但并非一定得如此命名。 

与EJB和Web应用一起在EAR文件内封装的资源适配器包将自动由EAR类装入器装入。 

2.2 在EJB 2.0之后 

EJB 2.0规范引入了本地引用这一概念,它允许通过“传递引用”(而不是“传递值”)的方式访问并存的客户程序和EJB组件。本地引用这一概念使EAR类装载问题发生了值得注意的变化。 

当EJB客户程序通过“传递引用”方式执行调用时,仅仅能够访问EJB的公用接口和Stub实现类是不够的。客户程序必须拥有一个EJB容器实现类的直接引用。在本地引用方式下,EJB的客户程序需要比以前更多的信息,这意味着在EJB 2.0之前使用的类装载模式已不再有效。为解决这个问题,EJB客户程序的类装载器必须是EJB类装载器的子孙,如下图所示: 

在这个模型中,Web应用类装载器是EJB
[1] [2] [3] [4] [5]
Tags:关键字:J2EE应用部署(一):基础篇
责任编辑:glen