> > Actually, the question is precisely the reverse - i.e. I should be asking you that about Dynamo. > > Here's JRun's classloader structure: > > System Classloader > | > Server Classloader > / \ > Webapp1 CL Webapp2 CL > > Axis gets loaded by the Server classloader, but the Webapp classloaders are the ones who have the WEB-INF/classes dirs on the classpath. So clearly, all the classes loaded by the Server classloader are available in all the Webapps, but NOT vice versa. And new Axis*().getClass().getClassLoader() will return the Server classloader for us. > > Sooo... your turn. :) How do you think this works in Dynamo such that the current thread's classloader can't find the classes in WEB-INF? In other words - if a new Axis*() works for you, one would think the current WEB-INF (since that's where your axis.jar lives) would be somewhere in the classloader hierarchy starting at the current thread one.... no? > > --Glen >
I admit that my understanding of dynamos internals is not sufficient enough to do anything but guess, but if pressed I would say it is due to the fact that j2ee is just one modality for deploying servlets in dynamo and the classloader heirarchy is deaper in atg's framework. When I debugged this stuff the classname of the classloader I retrieved from the thread context was an instance of an atg.somepackagename.CachingReusableClassloader, whereas the one retrieved from a newly created axis objects was a com.sun.applauncher type classloader implementation. Dynamo's architecture is very copmplicated. j2ee development modalities coexists with their nucleus bean/servlet component framaework (which is very very cool albeit proprietary... fully typed indexed and bound bean properties from jhtml/jsp to nucleus servlet beans etc ). A given dynamo instance can have multiple j2ee containers each with multiple enterprise applications etc. The end result being that the webapp classloader was the only one I could use load new axis classes. Dynamo's unorthadox architecture not withstanding, I did a medium intensity perusal through the various j2ee/ servlet specs and determined that while the semantics of the classloader is discussed, I did not find specific guidance as to how a reference to the web containers classloader should be obtained. and as I previously stated atg is j2ee certified further emphasising that sun is not testing for classloader compliance to a particular implementation specification at this granularity. Do you think I should poke deeper into the specs or talk to sun/atg? or would a discusions of a path forward be more apropriate? I am ok with continuing to patch axis while it nears a more stable release version however I think it would be nice if axis could be made to run unaltered on all certified app servers. I am also curious if this going to be an atg only problem. I would hate to see the need for an appserver interop matrinx in addition too to the soap interop matrix ;-)