在WebLogic 10.0上,我使用WLS的“共享J2EE库”(http://download.oracle.com/docs/cd/E11035_01/wls100/programming/libraries.html)功能对一些需要在多个耳朵中访问的jar进行分组。这些jar驻留在系统类路径上,我尝试将它们从那里移到共享库中。
我的问题是:
所以看起来在启动时引用会生效,但在运行时WLS会以某种方式忘记这一点(我在这里需要一些魔术吗?)。
我也可以做到这一点:
展开目录格式的共享lib ear的结构:
MANIFEST.MF包含:
..
Extension-Name:theSharedLib
规格 - 版本:1.0
实施 - 版本:1.0.0
..
application.xml包含基本元素(一个dummyejb ejb模块)。
引用应用的结构:
其中,它有META-INF / weblogic-application.xml,包含:
<?xml version =“1.0”?>
< WebLogic的应用程序>
<库-REF>
<库名称>&theSharedLib LT; /库名称>
<规范版本> 1.0< /规范版本>
<实施版本> 1.0.0< /实现版本>
<精确匹配>真< /精确匹配>
< /库-REF>
< / WebLogic的应用程序>
可能是什么问题?我应该在共享库或引用应用程序中做任何其他事情,以便(1)正确地引用列表,最重要的是(2)在应用程序之间共享jar?
我假设lib中的共享jar是使用共享库中的每个应用程序使用相同的类加载器加载的,其行为与sys类路径行为非常相似。你能否确认一下?
谢谢!
答案 0 :(得分:1)
感谢您提供的信息。实际上这就是我发现的:
1)如果引用应用程序在部署时失败,引用应用程序的列表将从Web控制台中消失(奇怪 - 可能有更深层次的原因,但现在这一点非常一致)。
2)不幸的是,共享库中的类是由不同引用应用程序的类加载器加载的,因此这样就无法共享例如用于应用程序间通信目的的接口类。
答案 1 :(得分:0)
我认为共享库(它是一个EAR)的MANIFEST.MF应该包含一个引用lib中JAR的Class-Path
条目(这告诉类加载器在哪里查找类)。像这样:
Class-Path: lib/foo.jar lib/bar.jar lib/foobar.jar