This blog article discusses how to address class loading issues with the Oracle SOA Infra. It's prime "raison d'etre" being a memory dump of something I don't do often, but may spend significant time in finding out how to do it again.
Some time ago I lost valuable time because some
library being deployed twice, once in the wrong place ([SOA_HOME]/lib
folder) and once in the right place
([SOA_HOME]/soa/modules/oracle.soa.ext_11.1.1). In this particular case
the first
was wrong because the library was using classes that were only loaded
when the SOA infrastructure was initialized.
I had created a composite that relied upon some code
from the jar, which I knew should be there, but every time it was called it gave me a NoSuchMethodError. A
nasty problem because deployment of the jar file
was not done by me, but instead by some Operations department that I
could only contact indirectly, and any request could easily take a day
to get resolved. Of course I blamed these stupid people from Operations
that did not even know how to deploy a jar file
properly, and undoubtedly Operations was blaming this idiot calling himself a developer but did not know how to code straight. Polite as we both are, we did
not say so to each other of course. Me giving you this anecdote only to
point out one of disadvantages of not doing DevOps ;-)
But then came the WebLogic Classloader Analysis
Tool (or CAT for short) to the rescue. With that I was able to determine that my jar was
loaded from both the lib folder as well as the oracle.soa_ext_11.1.1 but
as the first one has preference over the seconds
one, my composite always went to the old lib, even though Operations did deploy the latest version to the proper location, So somewhere early in the process Operations did deploy it in the wrong location (ha!), but
then again at the time I probably did not give
them proper instructions about its location either (hmm...).
There already is enough information to be found about the Classloader Analysis Tool, including this one,
so I just will stick to explaining how I found out to find out what is being loaded from the lib folder of the SOA Server and what from the oracle.soa_ext_11.1.1 folder.
To go to CAT use a URL like this;
http://[server]:[port]/wls-cat. Make sure you go to the SOA Server, and
not the Admin Server (unless that is one and the same). Any class
loaded by the SOA infra you can find from soa-infra -> soa-infra
-> View: detailed -> Classloader Tree. The jars from the lib
folder are loaded by the java.net.URLClassLoader whereas the SOA infra
itself (including the external jars) are loaded by the
weblogic.utils.classloaders.GenericClassLoader.
No comments:
Post a Comment