On Aug 27, 2007, at 11:26 AM, Jeff Genender wrote:

David,

So perhaps I am missing something and you could help clarify this. You say "It's by no means obvious to me that treating this as a problem with the coding of our classloaders is appropriate." Yet in your 1, 2, and 3
options, you seem to be saying its basically a problem with
classloading.  Is it our classloaders, or is it Spring's (or other)?

Sorry I'm not being clear.
1>> problem with cxf that no amount of changing our classloader code or configuration will fix. The same problem would occur in tomcat if you tried to use a spring version incompatible with cxf.

2>> our classloader works as long as you provide spring in the web app for use by the web app. We could optionally enhance our classloader so a user would not need spring added to hidden-classes for the web app.

3>> For ease in making sure the classes from our copy of spring are normally loaded in the same classloader no matter who is using them, we might consider have a spring configuration with just the spring classes in it. This would be more useful if the optional enhancement suggested in (2) was made.

So I don't see any way the code in our classloaders is wrong. We might be able to make some things more convenient, and one of those things would involve a new feature in our classloaders.

I know there's a good chance I'm still writing incomprehensibly, so don't be shy if this still doesn't make sense :-)

thanks
david jencks


Jeff

David Jencks wrote:

Cool down a minute and think about this. What happens in tomcat if you
want to use cxf + an incompatible version of spring in your app?  You
bundle cxf + springA + springB into your web-app and then what happens?

IMO we are talking about trying to get geronimo to generically solve a problem that tomcat forces its users to deal with on an per-app basis.

It's by no means obvious to me that treating this as a problem with the coding of our classloaders is appropriate. Here are some possibilities
I can think of off the top of my head:

1. cxf generates some code  for each web service client/service that
directly use spring classes. In this case there is AFAIK no way for an app to use a different spring version since these generated classes are going to be loaded in the application classloader and they need access
to cxf's copy of spring classes.  If this is what is going on I hope
it's possible for cxf to stop doing this.

2. If putting spring in the apps hidden-classes works and allows the app to use a different spring version, then evidently (1) isn't a problem. In this case if we automatically add spring to hidden-classes of every app we would be preventing all apps from using our copy of spring which seems undesirable to me. hidden-classes currently means "don't import
these classes from parents".  We could look into also having a "don't
export these classes to children" filter in our classloader.

3. With just the "don't export" filter proposed in (2), people adding
the spring jars to their dependency list would be getting spring loaded in a different classloader for their app and for cxf. This might not be
desirable.  We could make a spring configuration to provide a single
classloader to load spring in that cxf and apps could depend on.

thanks
david jencks




I believe it's the latter. In which case, you're not giving me an
apples-to-apples comparison, IMO.


Well...lets agree to disagree.  The bottom line is we are castrating
other projects because we have messed up classloaders. That, IMNSHO, has nothing to do with apples-to-apples comparison and we are creating a
treatment to the problem rather than a panacea.

Do as you may, but call my issue with how we are handling this a
dissenting voice.  I am not in agreement with this action.

--kevan


Reply via email to