我们在Websphere应用服务器7中部署了一个应用程序。它在各种环境中部署并运行。但它在一个新的环境中给出了一种未找到异常的方法。在深入挖掘时,我们发现2个罐子中存在一个特定的类,而来自“错误”罐子的类在新的环境中被加载。我浏览了详细的类加载器视图,加载罐的顺序不同。
在进一步调查中,每个环境中加载jar文件的顺序似乎存在随机差异。
2个问题:
1)WAS类加载策略取决于哪个因素&有任何纠正问题的建议吗?
2)更常见的是,当我们在任何java程序的类路径中指定假设* .jar时,任何JVM如何加载jar?它是按字母顺序还是根据时间修改或任何此类文件属性?
答案 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)
你问的是非常重要的问题。要解决您的问题,有两个选项: