开发者

Websphere Classloading

We have an application deployed in Websphere application server 7. Its deployed and functioning in various environments. But it gave a method not found exception in one new env. On digging deeper we found that a particular class was present in 2 jars and the class from the "wrong" jar was getting loaded in the new env. i went through the detailed class loader view and the sequence of the loading of jars were different in it.

On further investigation there seemed to be random variance in the order in which the jar files were loaded in each env.

2 questions:

1) On which factor does the WAS class loading policy depend & any su开发者_StackOverflowggestion for rectifying the problem?

2) More generally when we specify supposing *.jar in the classpath for any java program how does any JVM load the jars? Like is it alphabetical or according to time modified or any such file property?


When installing web-apps under WAS, you can set the classloading policy in the options for that application (or globally on server/node level)

If the policy options are (search) "parent first" / "parent last" and one class loader per application or per war. The default is "parent first / war". If your web-app comes with all jars it needs you'll be better off with the policy set to "parent last / application". Also if you edit your web.xml to reflect changes, be sure to set "use binary configuration" otherwise it will always use what it stored during install.


Java loads classes in the order they are specified in the classpath. So if your classpath is "c:\jar1.jar;c:\jar2.jar" and jar1.jar and jar2.jar contain the same class, the class from jar1.jar will always be used. If the order was reversed, then the jar2.jar class would always be used.

Wikipedia explains how Class Loaders work pretty well http://en.wikipedia.org/wiki/Java_Classloader

The classpath can be configured through the WAS Admin Console on the Server under Server > Process Definition > Java Virtual Machine

It can also be configured per application.


You're asking very big questions. To solve your problem there're 2 options:

  1. go for PARENT LAST, and add whatever version of JARs you need to the classpath
  2. stay with PARENT FIRST, but downgrade JARs shipped with your app to match whatever WAS provides.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜