我们在Websphere application server 7中部署了一个应用程序,它在不同的环境中部署和运行。但它在一个新的环境中给出了一个方法没有找到异常。深入研究后,我们发现一个特定的类出现在两个jar中,来自“错误的”jar的类被加载到新的环境中。我查看了详细的类加载器视图,其中jars的加载顺序有所不同。
在进一步的调查中,在每个环境中加载jar文件的顺序似乎存在随机差异。
2个问题:
1) WAS类加载策略依赖于哪个因素&有什么建议可以纠正这个问题吗?
2)更一般地,当我们在任何java程序的类路径中指定假设*.jar时,任何JVM如何加载jar?例如,它是按字母顺序排列的,还是根据时间修改的,或者任何类似的文件属性?
发布于 2009-12-16 05:33:42
在WAS下安装web应用程序时,您可以在该应用程序的选项中设置类加载策略(或在服务器/节点级别上全局设置)
如果策略选项是(搜索)“父级优先”/“父级最后”,并且每个应用程序或每个war都有一个类加载器。默认值为"parent first / war“。如果你的web-app提供了它所需要的所有jar,那么你最好将策略设置为"parent last / application“。此外,如果您编辑web.xml以反映更改,请确保设置为“使用二进制配置”,否则它将始终使用其在安装期间存储的内容。
发布于 2009-12-16 05:45:33
Java按照类路径中指定的顺序加载类。因此,如果您的类路径是"c:\ jar1.jar ;c:\ jar2.jar“,并且jar1.jar和jar2.jar包含相同的类,则将始终使用jar1.jar中的类。如果颠倒了顺序,那么将始终使用jar2.jar类。
维基百科解释了类加载器是如何很好地工作的http://en.wikipedia.org/wiki/Java_Classloader
可以通过服务器上的WAS管理控制台在Server > Process Definition > Java Virtual Machine下配置类路径
它还可以针对每个应用程序进行配置。
发布于 2015-12-22 10:57:49
你问的问题太多了。要解决你的问题,有两种选择:
https://stackoverflow.com/questions/1910454
复制相似问题