Websphere Classloading

10,972

Solution 1

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.

Solution 2

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.

Share:
10,972
Barun
Author by

Barun

Updated on June 04, 2022

Comments

  • Barun
    Barun almost 2 years

    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 suggestion 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?