Websphere类加载

时间:2009-12-15 21:16:40

标签: web-applications jvm websphere classloader

我们在Websphere应用服务器7中部署了一个应用程序。它在各种环境中部署并运行。但它在一个新的环境中给出了一种未找到异常的方法。在深入挖掘时,我们发现2个罐子中存在一个特定的类,而来自“错误”罐子的类在新的环境中被加载。我浏览了详细的类加载器视图,加载罐的顺序不同。

在进一步调查中,每个环境中加载jar文件的顺序似乎存在随机差异。

2个问题:

1)WAS类加载策略取决于哪个因素&有任何纠正问题的建议吗?

2)更常见的是,当我们在任何java程序的类路径中指定假设* .jar时,任何JVM如何加载jar?它是按字母顺序还是根据时间修改或任何此类文件属性?

3 个答案:

答案 0 :(得分:8)

在WAS下安装Web应用程序时,您可以在该应用程序的选项中设置类加载策略(或在服务器/节点级别上全局设置)

如果政策选项是(搜索)“父亲优先”/“父亲最后”和每个应用程序或每次战争一个类加载器。默认为“父亲优先/战争”。如果您的网络应用程序附带了所有罐子,那么您需要将策略设置为“父级最后/应用程序”。此外,如果您编辑web.xml以反映更改,请务必设置“使用二进制配置”,否则它将始终使用安装期间存储的内容。

答案 1 :(得分:1)

Java按照类路径中指定的顺序加载类。因此,如果您的类路径是“c:\ jar1.jar; c:\ jar2.jar”并且jar1.jar和jar2.jar包含相同的类,则将始终使用jar1.jar中的类。如果订单被颠倒,那么将始终使用jar2.jar类。

维基百科解释了类加载器的工作原理http://en.wikipedia.org/wiki/Java_Classloader

可以通过服务器>下服务器上的WAS管理控制台配置类路径。过程定义> Java虚拟机

也可以根据应用进行配置。

答案 2 :(得分:0)

你问的是非常重要的问题。要解决您的问题,有两个选项:

  1. 转到PARENT LAST,并将所需的任何JAR版本添加到类路径
  2. 留在PARENT FIRST,但降级您的应用程序附带的JAR以匹配WAS提供的任何内容。