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

J2EE应用部署(三):高级篇 (3)

[ 来源:互网络 | 更新日期:2007-09-29 22:03:31 | 浏览次数:8094]
简介:1 解决方案之一     2
文件。此外,在manifest文件中,Class-Path属性声明必须在一个独立的行上,以便与其他属性声明区分。 

这种扩展机制的功能非常强大。特别地,通过创建一个以解析次序为最终次序的、包含所有类的统一类路径,它能够方便地解决循环引用问题。例如,在下面这个例子中,假设首先被解析的是MyEJB1.jar。MyEJB1.jar引用了: 

Class-Path: jaxp1.jar MyEJB2.jar ..xmlnew.jar  


此时,类装载器将解析MyEJB2.jar。MyEJB2.jar引用了: 

Class-Path: jaxp1.jar MyEJB1.jar  


类装载器最终使用的“应用级类路径”将是: 

Class-Path: jaxp1.jar MyEJB2.jar ..xmlnew.jar MyEJB1.jar  


2.3 依赖库应用实例 

下面这个例子示范了一个企业应用各种可能的类装载情形。它示范了多个EJB模块、多个Web应用,以及在这些应用之间多个共享的依赖库。通过这个例子,我们可以了解应用服务器从不同应用装载各个类的过程。当应用运行时,通过输出不同类的类装载器层次关系,我们可以了解:是否所有的类都通过单个类装载器装入,还是通过不同的类装载器装入;如果通过多个类装载器装入,这些装载器有什么关系。 

这个例子包含两个EJB模块、两个Web应用模块、七个在不同情形下使用的依赖类库。EAR文件的结构如下: 

MyDepend1-container.jar 
MyDepend2-container.jar 
MyWebApp1.war 
MyWebApp2.war 
TestUtil1.jar 
TestUtil2.jar 
TestUtil3.jar 
TestUtil4.jar 
TestUtil5.jar 
TestUtil6.jar 
TestUtil7.jar 
META-INF 
application.xml
 


每一个“MyDepend?-container”JAR文件包含一个EJB。每一个Web应用中包含一个名为TestServlet的Servlet。每一个工具类库包含一个类,这个类有一个方法,它的功能是输出类装载器的层次关系。这个例子测试了EAR文件内许多不同的类装载情形,其中包括: 

当一个EJB用到一个依赖库,且在EJB manifest里面的类路径中引用它时,它是如何装载的? 

当不同EJB模块内的多个EJB共享一个依赖库,且依赖库通过各个EJB的manifest类路径指定时,它是如何装载的? 

当Web应用引用一个依赖库,且通过Web应用模块的manifest路径引用依赖库时,它是如何装载的? 

当Web应用引用一个依赖库,且依赖库保存在Web应用模块的WEB-INFlib目录下时,它是如何装载的? 

当一个EJB模块和一个Web应用都在它们的manifest路径中引用一个依赖库时,依赖库是如何装载的? 

要执行这个例子,请先把MyDepend.ear文件(从本文后面下载源文件)部署到服务器上,然后运行各个Web应用的TestServlet。TestServlet将调用适当的EJB方法,EJB的方法又调用依赖库中类的方法。下面是执行两个Servlet的URL: 

http://<服务器名字>:<端口>/web1/testservlet/
http://<服务器名字>:<端口>/web2/testservlet/
 


下面是Servlet运行时在浏览器上的输出: 


WebLogic Server 6.1控制台输出如下: 

下面是application.xml部署描述器:
 


   &nbs
[1] [2] [3] [4]
Tags:关键字:J2EE应用部署(三):高级篇
责任编辑:glen