J2EE应用部署(三):高级篇 (3)
[ 来源:互网络 | 更新日期:2007-09-29 22:03:31 | 浏览次数:8094]
简介:1 解决方案之一 2
这种扩展机制的功能非常强大。特别地,通过创建一个以解析次序为最终次序的、包含所有类的统一类路径,它能够方便地解决循环引用问题。例如,在下面这个例子中,假设首先被解析的是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


您的位置:
