J2EE应用部署(一):基础篇 (3)
[ 来源:互网络 | 更新日期:2007-09-01 02:34:27 | 浏览次数:9235]
简介:1 J2EE应用的构成 1
大多数基于Web的J2EE应用只由Web和EJB应用构成,EAR文件能够满足封装应用的基本需求。然而,EAR文件缺乏封装复杂J2EE应用的能力,比如,J2EE经常要用到下面这类组件,但它们无法在EAR文件中声明:
JDBC DataSource对象。
JMS ConnectionFactory和Destination对象。
JMX(Java Management Extension)的MBean。
在应用服务器之内运行的一些JMS消费者,例如作为ServerSession一部分运行的MessageConsumer。
当应用被部署或卸载时触发运行的一些类(这些类是供应商提供的私有扩展,没有在J2EE规范中定义,但供应商一般都提供它们)。
当前,这些组件必须由系统管理员通过专用管理接口手工配置和部署。随着时间的推移,这些组件的应用也将日益增加,为了支持应用的整体移植性,让EAR文件支持这些组件的封装也变得日益重要。
二、类装载模式
当一个类被引用时,Java虚拟机(JVM)必须装入被引用的类。JVM利用一个标准的类装入机制把类装入内存,这个从源文件装入Java类的机制称为类装载器。Java类可以从磁盘、网络或其他媒体装入,它们可以驻留在任何地方。多个类装载器可以按照父-子关系链接在一起,形成一种层次结构。由子类装载器装入的类能够看到(能够使用)由任意父类装载器装入的类;由父类装载器装入的类不能看到由任意子类装载器装入的类。类装载器、EAR文件与应用部署有着重要关系,因为应用服务器可能采用专用的类装载器部署应用模块。
如果在一个系统中,Web应用需要访问某个EJB,它就必须能够装入它所需要的那些类。由于这意味着不同模块之间的依赖关系,为了解决依赖问题,应用服务器必须为EAR类装载器考虑不同的结构方案。
独立的应用程序部署在它自己的类装载器中。这意味着,如果分别地部署一个Web应用和一个EJB应用,每个应用的类将分别装入各自的、级别相同的类装入器,Web应用内的类不能看到另一个类装载器装入的类。如果Web应用想要使用那些分开部署的EJB,就会出现问题。
在EAR文件出现之前,许多开发者先部署EJB,然后以Web应用WEB-INFlib目录一部分的形式,再次封装同一EJB JAR文件。这样,同一类文件必须放入两个不同的地方,才能让应用正常地运行。显然,这是一种应当避免的情形。EAR文件的引入就是为了解决这个问题。EAR文件不仅是一种方便的封装格式,而且它还提供了一种特殊的类装载模式,允许EAR文件内的应用访问其他应用的类。
J2EE 1.3规范没有具体规定EAR类装载器应该如何运作。在决定类装入方式时,应用服务器供应商有着很大的自由。实现EAR类装载器之前,供应商必须决定:
EAR文件中所有应用的所有类由单一的类装载器装入,还是不同应用的文件由不同的类装载器装入?
在EAR文件中的不同应用之间,是否存在类装载器的父-子关系?例如,如果两个EJB应用依赖于log4j.jar,那么,是否应该由父类装载器装入log4j.jar,由子类装载器装入两个EJB应用,从而维持适当的可见性关系?
如果类装载器之间存在层次关系,那么这种层次关系允许扩展到什么程度?
多个EJB之间存在固有的关系,但Web应用没有。那么,EJB应用的装载方式是否应该和Web应用的不同,以便保持Web应用的完整性?
2.1 在EJB 2.0之前
在EJB 2.0 Public Final Draft 2之前,供应商在选择类装载模式方面有着很大的自由。如果JSP页面和Servlet要使用某个EJB,那么它们只需


您的位置:
