棘手的Classpath问题

时间:2015-03-03 22:29:57

标签: java jar classpath weblogic-10.x

在现有的应用程序上运行,它作为一个庞大的耳朵文件在Weblogic上运行。

我的组织编写了自定义代码,以及供应商编写的代码,当weblogic启动时,所有代码都在一个类路径上运行。

我们的一些自定义代码使用spring 1.2,在最新版本的供应商代码中,他们使用spring3。因此,除非我们能够为每个组件提供所需的弹簧版本以便运行,否则我们无法完全发挥作用。但由于它们都使用了启动weblogic的类路径,因此spring1.2或spring 3.0将首先取决于类路径中的顺序。

我被困了吗?遗漏了什么?我从来没有在这个级别处理类路径。

由于

1 个答案:

答案 0 :(得分:1)

  

类加载器在加载类时使用委托模型。类加载器实现首先检查其缓存,以查看是否已加载所请求的类。此类验证可提高性能,因为它使用了缓存的内存副本,而不是从磁盘重复加载类。如果在其缓存中找不到该类,则当前的类加载器会向其父级询问该类。仅当父级无法加载类时,类加载器才会尝试加载该类。如果父类和子类加载器中都存在类,则加载父版本。遵循此委派模型以避免加载相同表单的多个副本。同一个类的多个副本可能导致ClassCastException。

认为在weblogic.xml中设置以下内容可能有帮助

prefer-web-inf-classes元素

weblogic.xml Web应用程序部署描述符包含 prefer-web-inf-classes 元素(元素的子元素)。默认情况下,此元素设置为False。将此元素设置为True会颠覆类加载器委派模型,以便加载Web应用程序中的类定义,而不是更高级别类加载器中的类定义。这允许Web应用程序使用其自己版本的第三方类,该类也可能是WebLogic Server的一部分。请参阅“weblogic.xml部署描述符元素”。*

使用此功能时,必须注意不要将从Web应用程序的类定义创建的实例与从服务器定义创建的发布混合。如果混合了这样的实例,则会产生ClassCastException。

请参阅以下网址

Oracle Weblogic Server