J2EE Shared Libraries是Weblogic Server 9.0(下简称WLS9)的一个新特性。通过J2EE Shared Libraries可以将一个J2EE模块共享给其他企业应用(EAR包或EAR包的展开目录)的J2EE模块使用。J2EE Shared Library可以是任何类型的J2EE模块,但推荐设计成企业应用格式。此外还有一种J2EE 1.4的标准共享库方式,称为 Optional Packages。Optional Packages提供和J2EE Libraries类似的方式将一个JAR文件共享给多个应用。区别在于 Optional Packages是基于标准的,但不能被当作J2EE模块使用。optional packages必须通过部署对应的JAR文件方式先被注册到Domain。注册好后可以在任意J2EE模块中通过manifest files来引用这些JAR包。Optional packages和J2EE libraries的区别在于optional packages可以被任何J2EE模块(EAR, JAR, WAR, or RAR 文档)或其对应扩展的目录结构引用。而J2EE libraries只能被企业应用引用。本文通过具体的说明将指导开发者熟悉这两种共享方式,并获得立竿见影的效果。
本文附件exercise包括J2EE Libraries 和 Optional Packages的练习代码,可解压到任意位置。需要预先安装的软件只有WLS9正式版,可以到www.bea.com.cn上免费下载。本练习可在能安装WLS9的任何操作系统上完成,为了方便起见,文中仅以在Windows上为例。首先配置一个WLS Domain,记得用户名和密码要都设为weblogic,端口为7001。然后启动该Domain,并启动相应的Console。最后使用Domain/bin/setDomainEnv.cmd打开一个Prompt窗口,并把目录切换到你解压的文件的位置。这样你就可以按照第五节和六节所述完成练习。假如想快速看一下练习结果,在solution中有已经配置好的两个练习的代码,部署后就可以测试。
共享模块的核心:MANIFEST.MF文件
我们知道在Weblogic上部署的任何J2EE模块的根目录中可以有一个名为META-INF的目录,你可以在一个J2EE模块的META-INF目录下创建一个名为MANIFEST.MF文件,来指定这个J2EE模块的版本。MANIFEST.MF文件是一个纯文本文件,格式大概如下:
Extension-Name: myOptionalPackage
Specification-Version: 0.9
Implementation-Version: 1
Extension-Name:可选。表示该库或包的名字。主调应用调用这个应用时需要匹配这个值。假如你不设置这个值,系统将自动使用部署名。
Specification-Version:可选。定义这个库或包的规格版本。主调应用可以为共享模块随便指定一个规格版本。假如这个规格版本不可用,则主调应用不能被部署。规格参数可以有两种格式。第一种使用主从版本格式,大小版本号用点分割,如"9.0.1.1"。第二种使用文本格式,如 "9011Beta"。假如使用主从版本号格式,主调应用可以配置为共享的模块吻合一个特定版本,或者一个最小版本,或者一个最新的版本额。假如使用文本格式,主调应用必须和共享模块的版本号严格吻合。
Implementation-Version:可选。定义这个库或包代码的执行版本号。必须在已经定义了规格版本的情况下才能定义执行版本。执行版本使用和规格版本相同的格式。
假如你不使用MANIFEST.MF文件或者有些条目没有指定,可以在命令行中通过weblogic.Deploy进行部署的时候由参数来设置。在后面的练习中我们将具体了解如何使用MANIFEST.MF将一个J2EE应用设计为J2EE Libraries或Optional Packages。
J2EE Libraries and Optional Packages比较
Optional packages和J2EE Libraries有如下共同点:
1。在部署的时候都注册到Domain上。
2。都支持可选的执行版本和规格版本字符串。
3。引用J2EE libraries and optional packages的应用可以指定共享文件的版本。
Optional packages和J2EE Libraries有如下区别:
1。Optional package是普通的JAR文件,而 J2EE libraries可以是普通JAR文件,J2EE应用,或独立的J2EE模块。J2EE libraries可以包括有效地J2EE或WLS部署描述符,而optional package JAR中的任何部署描述符都被忽略了。
2。任何J2EE应用或模块可以通过META-INF/MANIFEST.MF引用 optional package。而只有企业应用可以通过weblogic-application.XML引用J2EE library 。
3。Optional packages可以引用其他Optional packages,而J2EE libraries不能引用其他J2EE libraries。
最佳实践
1。假如需要共享J2EE模块给多个企业应用应使用J2EE Libraries。
2。假如要部署独立的J2EE模块作为共享库,应该把模块打包到企业应用中。这样可以防止潜在的URI冲突。因为独立模块库的URI来源于不署名。所以在部署时指定一个部署名,当其他应用引用它时作为URI。