帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE应用部署(一):基础篇
作者:佚名 发布时间:2005-04-02 来源:不详
  提纲:                                                                       
  一、基础知识                                                                 
  1.1 J2EE应用的构成                                                   
  1.2 封装和部署操作的任务                                                 
  1.3 不能封装到EAR文件的组件                                           
  二、类装载模式                                                               
  2.1 在EJB 2.0之前                                                 
  2.2 在EJB 2.0之后                                                 
  正文:                                                                       
  一、基础知识                                                                 
  1.1 J2EE应用的构成                                                   
  J2EE应用由以下两种资源构成:                                             
  一个或者多个J2EE组件                                                     
  一个J2EE应用部署描述器(Deployment Descriptor)     
  当多个异种的J2EE组件
过程中,有许多事情必须考
需要相互调用时,我们必须创建
虑,其中包括:
一个J2EE应用。在创建J2EE应用的

  有哪些类型的组件可以封装到J2EE应用里?                                   
  创建J2EE应用的过程中,人们担负的各种职责。                               
  当前J2EE封装技术的局限之处。                                             
  为满足J2EE组件交互的需要,不同的供应商所采取的类装载策略。               
  J2EE规范区分了两类资
EAR是Enterprise Applicat
单个模块里面,以便一起部
源:可以在容器之内运行的资源
ion ARchive的缩写,EAR文件用
署并装入到服务器上。
,可以封装到EAR文件内的资源。
来把一个或者多个J2EE组件封装到

  J2EE规范阐明了运行时
系统内的组件提供一种基础
供的封装结构。下图描述了
容器和部署模块之间的区别。运
服务。部署模块是一种为那些最
J2EE容器的结构:
行时容器是请求级的截取机制,为
终将在运行时容器内执行的组件提

  

  其中:                                                                       
  EJB容器                                                                   
  EJB容器用来容纳业务逻辑,并为业
JTA、JavaMail、JAXP、JDBC和连接器(C
务逻辑截取请求。EJB容器支持EJB访问JMS、JAAS、
onnector)。
  Web容器                                                                   
  Web容器截取通过HTTP、FTP、SMTP或
页面提供的资源与EJB容器提供的资源相
其他协议发送的请求。Web应用容器为Servlet和JSP
同。
  应用客户端容器                                                               
  客户端应用是独立的Ja
行的JVM不同)。应用客户
va应用,它们在远程的独立JVM
端容器为这些应用截取请求。
上运行(与Web容器和EJB容器所运

  运行在应用客户端容器上的程序非常
由JVM控制,而是由一个容器(也就是应
类似于带有main()方法的Java程序,不过,程序不再
用客户端容器)控制。
  在应用客户端容器内运
源。
行的程序能够访问远程应用服务

器上的JAXP、JDBC、JMS和JAAS资

  Applet容器                                                             
  Applet容器是一个特殊
提供任何对其他资源(比如
向应用服务器请求资源(而
的容器,它为在浏览器内运行的
JDBC或JMS)的访问。在Applet
不是把请求发送给容器,然后由
Java程序截取请求。Applet容器不
容器内运行的Applet必须自己直接
容器发送请求给应用服务器)。
  对于Applet如何与EJB
的规定。对于那些想要直接
务器提供某种形式的HTTP隧
容器进行通信,EJB规范没有作
使用EJB的Applet,J2EE规范要
道,支持Applet直接使用EJB。
出任何规定,但J2EE规范有这方面
求它们使用HTTP隧道。许多应用服

  可以封装到J2EE EAR文件里面的组件
规定EAR文件至少必须包含哪些内容,EAR
与包含容器的组件之间不存在直接的关联。J2EE没有
文件可以由任意数量的以下组件构成:

  EJB应用JAR文件                                                         

  EJB应用JAR文件包含一个或者多个EJB组件。                             

  Web应用WAR文件                                                         

  一个WAR文件包含一个Web应用。EAR
用必须有一个唯一的部署上下文。EAR文
文件可以包含多个Web应用,EAR文件中的每个Web应
件的部署机制允许指定这类不同的上下文。

  应用客户端JAR文件                                                         

  应用客户端JAR文件包
专用的部署描述器,其构成
含一个准备在应用客户端容器内
方式和EJB JAR文件的构成方式
运行的独立Java应用,还包含一个
相似。

  应用客户端JAR文件除
、JAXP、JAAS和EJB客户所
了包含运行独立客户程序所需要
需要的客户端库。
的类之外,还包含访问JDBC、JMS


  资源适配器RAR文件                                                         

  资源适配器RAR文件包含了实现企业
适配器所需要的Java类和本地库。
信息系统JCA(Java Connector Architecture)资源


  资源适配器不在容器内
桥接软件执行。
执行。相反,它们应该作为应用

服务器和外部企业信息系统之间的


  这些组件都在J2EE EAR
,J2EE EAR文件通过定制的
文件之外分别地开发和打包,且
部署描述器,把一个或者多个这
分别拥有自己的部署描述器。然后
种组件装配成一个统一的包。

  1.2 封装和部署操作的任务                                                 

  在EJB、Web应用或其他组件的构造、
J2EE规范为开发者在创建企业应用过程中
)。尽管角色的数量众多,但它们不外乎
划分,单独的个人、小组或组织很可能扮
常见的角色包括:
部署和使用过程中,不同的人担负着不同的职责。
的职责定义了范围广泛的平台角色(Platform Role
是一种为了更好地规划和运行一个应用而设计的逻辑
演多个角色。在构造、部署使用EAR文件的过程中,


  J2EE产品提供者                                                           

  负责实现J2EE平台,包
器的供应商。
括在规范中定义的所有J2EE API

和其他功能。比如,J2EE应用服务


  应用组件提供者                                                               

  负责提供J2EE组件,例如EJB应用或W
者的特征,比如文档编写者、JSP页面编
eb应用。J2EE规范中的许多角色都具有应用组件提供
写者、资源适配器开发者等。

  应用组装者                                                                   

  负责把一个或者多个J2
建J2EE应用部署描述器,说
组装者要用到J2EE产品提供
EE组件打包成EAR文件,构造出J
明应用依赖的各种外部资源,比
者和工具提供者提供的工具。
2EE应用。应用组装者还要负责创
如类库、安全角色等。通常,应用


  工具提供者                                                                   

  提供自动化J2EE应用创
的工具,自动创建EAR文件
建、打包、部署过程的工具,例
的工具。
如为EAR文件自动生成部署描述器


  部署者                                                                       

  负责把Web应用和EJB应用部署到服务
户端包,但可能要负责为这些组件进行额
一部分,部署企业应用时却不必考虑。它
那样经过一个“激活”过程。资源适配器
J2EE EAR文件,但它们不在J2EE容器环境
它们的激活不需要J2EE部署者的特别干预
不部署到应用服务器上。客户端程序独立
器环境上。部署者不负责部署资源适配器包和应用客
外的配置。这些组件虽然被打包成为J2EE EAR文件的
们是J2EE应用的一部分,但不必象Web应用和EJB容器
包是置入合法JCA实现的简单库,虽然它们被打包进
下运行。因此,由于资源适配器包不包含J2EE容器,
。应用客户端程序在J2EE容器的环境下运行,但它们
运行,部署者不负责为这些程序配置容器环境。

  系统管理员                                                                   

  负责为应用服务器和J2
EE应用配置网络和运行环境,负
责监视和维护J2EE应用的运行。

  在本文的讨论过程中,我们主要的角色是应用组装者和部署者。                     

  1.3 不能封装到EAR文件的组件                                           

  大多数基于Web的J2EE应用只由Web和
。然而,EAR文件缺乏封装复杂J2EE应用
们无法在EAR文件中声明:
EJB应用构成,EAR文件能够满足封装应用的基本需求
的能力,比如,J2EE经常要用到下面这类组件,但它

  JDBC DataSource对象。                                          
  JMS ConnectionFactory和Destination对象。     
  JMX(Java Management Extension)的MBean。   
  在应用服务器之内运行的一些JMS消
MessageConsumer。
费者,例如作为ServerSession一部分运行的

  当应用被部署或卸载时
规范中定义,但供应商一般
触发运行的一些类(这些类是供
都提供它们)。
应商提供的私有扩展,没有在J2EE

  当前,这些组件必须由
这些组件的应用也将日益增
也变得日益重要。
系统管理员通过专用管理接口手
加,为了支持应用的整体移植性

工配置和部署。随着时间的推移,
,让EAR文件支持这些组件的封装

  二、类装载模式                                                               
  当一个类被引用时,Java虚拟机(JV
机制把类装入内存,这个从源文件装入Ja
或其他媒体装入,它们可以驻留在任何地
形成一种层次结构。由子类装载器装入的
;由父类装载器装入的类不能看到由任意
署有着重要关系,因为应用服务器可能采
M)必须装入被引用的类。JVM利用一个标准的类装入
va类的机制称为类装载器。Java类可以从磁盘、网络
方。多个类装载器可以按照父-子关系链接在一起,
类能够看到(能够使用)由任意父类装载器装入的类
子类装载器装入的类。类装载器、EAR文件与应用部
用专用的类装载器部署应用模块。
  如果在一个系统中,Web应用需要访
由于这意味着不同模块之间的依赖关系,
考虑不同的结构方案。
问某个EJB,它就必须能够装入它所需要的那些类。
为了解决依赖问题,应用服务器必须为EAR类装载器

  独立的应用程序部署在
一个EJB应用,每个应用的
看到另一个类装载器装入的
它自己的类装载器中。这意味着
类将分别装入各自的、级别相同
类。如果Web应用想要使用那些
,如果分别地部署一个Web应用和
的类装入器,Web应用内的类不能
分开部署的EJB,就会出现问题。
  在EAR文件出现之前,
形式,再次封装同一EJB JA
正常地运行。显然,这是一
文件不仅是一种方便的封装
应用访问其他应用的类。
许多开发者先部署EJB,然后以W
R文件。这样,同一类文件必须
种应当避免的情形。EAR文件的
格式,而且它还提供了一种特殊

eb应用WEB-INFlib目录一部分的
放入两个不同的地方,才能让应用
引入就是为了解决这个问题。EAR
的类装载模式,允许EAR文件内的

  J2EE 1.3规范没有具体
器供应商有着很大的自由。
规定EAR类装载器应该如何运作
实现EAR类装载器之前,供应商
。在决定类装入方式时,应用服务
必须决定:
  EAR文件中所有应用的
载器装入?
所有类由单一的类装载器装入,

还是不同应用的文件由不同的类装

  在EAR文件中的不同应
依赖于log4j.jar,那么,
应用,从而维持适当的可见
用之间,是否存在类装载器的父
是否应该由父类装载器装入log4
性关系?
-子关系?例如,如果两个EJB应用
j.jar,由子类装载器装入两个EJB

  如果类装载器之间存在层次关系,那么这种层次关系允许扩展到什么程度?           
  多个EJB之间存在固有的关系,但Web
应用的不同,以便保持Web应用的完整性
应用没有。那么,EJB应用的装载方式是否应该和Web

  2.1 在EJB 2.0之前                                                 
  在EJB 2.0 Public Fin
如果JSP页面和Servlet要使
公共类和Stub类。这里所谓
,作为一个有着依赖关系的
种装入Home接口、远程接口
al Draft 2之前,供应商在选择
用某个EJB,那么它们只需能够
的公共类包括异常类、参数类等
包装入。在这种模式下,供应商
和Stub类的方式。
类装载模式方面有着很大的自由。
装入EJB的Home接口、远程接口、
,它们应该放入一个依赖JAR文件
必须为依赖于EJB的Web应用选择一

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

  在这个模型中,每一个EAR应用将由
用都由EAR类装载器的定制子类装载器装
类都由EAR类装载器装入,包括所有公用
装入,它将自动地可供所有由子类装载器
一个定制的EAR类装载器实例装入,EJB应用和Web应
入。在EAR文件中,所有准备给一个以上应用共享的
依赖库和资源适配器包。如果一个类由EAR类装载器
装入的类使用。
  所有EJB应用都由单一
器。即使存在多个不同的EJ
JVM之内不同应用之间进行
的EJB类装载器装入,这个EJB类
B JAR文件,它们也都由同一类
的EJB到EJB的调用。
装载器是EAR类装载器的子类装载
装载器装入。这一机制有利于同一

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

  Web应用要使用在同一E
现类。由于EJB和Web应用的
到必需的类文件。然而,We
Web应用能够使用EJB的类文
然后把它们“导出”给EAR
公用接口和Stub实现文件就
用所有EJB时需要用到的类
AR文件内部署的EJB,必须能够
类装载器属于平等的关系(不是
b应用类装载器和EJB应用类装载
件,EJB类装载器获取各个EJB的
类装载器,在EAR类装载器中它
是客户程序调用EJB时要用到的

看到这些EJB的外部接口和Stub实
父-子关系),Web应用不能直接看
器有着相同的父类装载器。为了让
公用接口和它们的Stub实现文件,
们可以被EAR中的所有应用访问。
类。这样,Web应用就能够装入使

  依赖工具库可能在不同
的WEB-INFlib目录下列出
该库的内容,因此该库不必
库的JAR文件。其他Web应用
位置装入,具体由指定这些库的
了一个依赖库,则该库只和这个
由EAR类装载器装入。在这种情
如果也要使用该库,则必须在它
位置决定。如果一个Web应用在它
Web应用有关,其他应用无需访问
况下,Web应用类装载器将装入该
自己的WEB-INFlib目录下提供。
  如果依赖库由EJB和Web应用共享,则
声明为EJB所依赖的库,使得依赖库中的
用的异常类、Web应用可见的定制输入参
common.jar,但并非一定得如此命名。
它必须由EAR类装载器装入。EAR类装载器将装入所有
类具有合适的可见性。这就允许EJB开发者把所有公
数类、EJB封装到一个依赖库里面。这个库常常称作

  与EJB和Web应用一起在
EAR文件内封装的资源适配器包
将自动由EAR类装入器装入。
  2.2 在EJB 2.0之后                                                 
  EJB 2.0规范引入了本地引用这一概
的方式访问并存的客户程序和EJB组件。
的变化。
念,它允许通过“传递引用”(而不是“传递值”)
本地引用这一概念使EAR类装载问题发生了值得注意

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

  在这个模型中,Web应
它们作为EJB客户程序所需
装载器中装入。从整体结构
任何文件导出给EAR类装载
用类装载器是EJB类装载器的子
要的文件。不过,为实现隔离,
来看,新的模型更简洁、更容易
器。
孙。这使得所有Web应用能够访问
每一个Web应用仍在一个定制的类
理解,它不再要求EJB类装载器把

  J2EE规范没有明确规定Web应用的依
WEB-INFlib指定,很显然它应该保持隔
通过其他方式指定了一个工具类是Web应
是应该导出给EAR类装载器?J2EE没有对
赖库应该如何装载。如果一个工具类库通过
离,只能由Web应用的类装载器装入它;然而,如果
用的依赖库,它应该由Web应用的类装载器装入,还
这一点作出具体规定。
  对于被指定为Web应用依赖库的工具
EAR类装载器级装入它们,WeLogic Serve
WebLogic Server 6.1改变了原来的办法
有意义的,因为Web应用的隔离总是可以
类库,Silverstream应用服务器和J2EE参考实现在
r 6.0在Web应用类装载器中装入它们。但是,
,支持在EAR级别上装入Web应用依赖库。这种改变是
通过把工具类库放入WEB-INFlib目录实现。
  在下一篇文章中,我们将从实践的角度了解J2EE应用的封装和部署过程。         

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·J2EE开发n层应用  (2005-04-02)
 ·J2EE概述  (2005-04-02)
 ·从商业角度分析J2EE与WINDOWS DN  (2005-04-02)
 ·XML和J2EE的完美结合  (2005-04-02)
 ·J2EE的安全认证机制  (2005-04-02)
 ·J2EE配置指南  (2005-04-02)
 ·J2EE中的设计模式  (2005-04-02)
 ·J2EE表现层设计思考  (2005-04-02)
 ·开发完整J2EE解决方案的八个步骤  (2005-04-02)
 ·J2EE平台架构上开发CRM的技术过程  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统