2009年3月19日星期四

WLS_057:如何安装和使用Shared Library?

本文最后一次修改时间:2012-05-13。
开发环境:WebLogic Server 12c开发版。

如果多个Web应用使用一些共同的Jar包,应该把它们放到一个公共的地方,而不要把这些Jar打入每个Web应用。
其缺点如下:
(1)如果Jar包很多,那么每个Web应用的size会比较大。
(2)如果修改了Jar包,那么要重新为每个Web应用打包,并重新发布,不利于管理和维护。
(3)可能会引起CLassCastException异常,比如上一篇文章遇到的情况。
把这些Jar包放到[domain_name]\lib目录下,当然可以解决这个问题,但是这个解决方案还不够“优美”。
因为[domain_name]\lib是存放全局Library的地方,除非所有的应用都会使用到才会放在这里。
如果只是几个Web应用会使用到,一般不建议放在这里。
那么,该如何解决这个问题呢?
WebLogic Server提供了一个Shared Library功能,可以完美的解决这个问题。

我以上一篇文章的实验为例来说明如何安装和使用Shared Library。

1. 安装Shared Library:shoppingcart.jar
首先要修改一下shoppingcart.jar,把shoppingcart.jar解压缩后,创建目录META-INF和MANIFEST.MF文件。
其中MANIFEST.MF内容如下:
Extension-Name: shoppingcartSharedLib
Specification-Version: 1.0
Implementation-Version: 1.0

然后执行如下脚本,重新把java类和目录META-INF打成Jar包:shoppingcart.jar:
jar cvfm shoppingcart.jar META-INF/MANIFEST.MF *
其中目录的完整结构如下图所示。

然后运行如下脚本,把shoppingcart.jar作为Shared library发布到WebLogic Server上:
java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -password welcome1 -deploy -library shoppingcart.jar
发布成功了,在WLS Console中可以看到该Library。


2. 修改shoppingcart.ear,并重新发布
因为在本例中是一个ear包中有多个war包,并且每个war包使用相同的Jar包。
因此修改Application级的META-INF目录下的weblogic-application.xml文件就可以了。
这里主要是引用Shared Library:
<?xml version='1.0' encoding='utf-8'?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<session-descriptor>
<persistent-store-type>memory</persistent-store-type>
<sharing-enabled>true</sharing-enabled>
</session-descriptor>
<library-ref>
<library-name>shoppingcartSharedLib</library-name>
</library-ref>
</weblogic-application>
如果是每个War包引用的Jar包不同,那就要War包中的weblogic.xml(这是我推理得出的,有待验证)。
重新打成ear包后,重新发布。

3. 测试
如果[domain_name]\lib目录下有shoppingcart.jar,请删除掉,因为已经发布了Shared Library,所以不需要在这里再放了。
重新启动WLS后,重新访问应用shoppingcart1和shoppingcart2。
(1)访问http://localhost:7001/shoppingcart1/,添加一些商品。
(2)访问http://localhost:7001/shoppingcart2/,添加另一些商品。
(3)分别在shoppingcart1和shoppingcart2查看Session中的信息,发现显示了所有的商品信。
这说明实验结果和上一篇文章一样,Shared Library起作用了。

以后如果需要修改Jar包,只需要重新发布Jar包,无需重新发布应用。
这真是一个完美的解决方案!

Project 下载:shoppingcart(SharedLibrary).7z

参考文献:
1. https://forums.oracle.com/forums/thread.jspa?threadID=915004
2. http://java.chinaitlab.com/core/39096.html
3. http://geekerdever.wordpress.com/2010/09/07/将ADF应用部署为Shared-Library/

没有评论: