On thinking further about this, I have a couple more questions/concerns

- I think Jeremy has a very good point that has not been directly answered. If we do not allow potential compatibility issues by running multiple versions in the same VM, then doesn't that mean we are not going to be willing to incorporate third-party components like from Jakarta Commons?

I think this is a real problem, and I think a stance like this would not be looked upon positively from the rest of the Apache community.

- It seems to me that the environments in which mixed versions in the same VM occur are:

* app servers, which already deal with this through multiple classloaders

* home-built servers in which case we can expect the user to be expert enough to know how to affect the order in which jars are loaded

- I agree with Jeremy that dealing with shared resources is a well-known problem and although mistakes can happen good app providers know how to deal with this. Is it our responsibility to munge our code and paint ourselves into a corner regarding use of shared components to deal with app providers who don't know how to work with this?

Thanks,

David


Jeremy Boynes wrote:
Daniel John Debrunner wrote:

Jeremy Boynes wrote:


David W. Van Couvering wrote:



Can't you have the situation where common 10.2 and common 10.3 are
both included in the classpath (by accident, as Dan brings up)? Wouldn't you end up with order dependencies then?



I feel my scenario keeps being misrepresented by the choice of terms
used to decribe it. Using 'accident' makes it sounds as though it's not
an important problem to deal with, as seen in Jeremy's reponse here:


To what extent do we need to cater for accidents?



The end user didn't accidently install two applications, they chose to
and didn't realise/know that one used client at version 10.2 and one
used engine at version 10.3. In many cases the use of Derby engine is
hidden by the application developer.


I actually thought "accident" was appropriate here :-) The collision in Derby versions is "an unexpected and undesirable event, especially one resulting in damage or harm"[1] arising from the installation of two applications.

I would assign fault here to the application providers who are not allowing for other applications using a common shared resource - the system or user classpath; it's like if they both insisted in being installed in the same directory.

I would also say that most application providers are aware of this problem (usually from some unfortunate prior experience) and take explicit control of the classpath using mechanisms described elsewhere. Their end-users are unaffected by this scenario.

So whilst there is high impact from your scenario, it applies to end-users who install multiple applications that do not exhibit classpath discipline and which happen to use different versions of Derby client and engine (but not two different engine versions or two different client versions). And never mind that these users may be affected by any other libraries these applications use.

Rather than address this ourselves (and just for Derby) by convoluted code-rewrites and avoidance of third party libraries we should encourage the application providers avoid this entirely by exhibiting discipline when using shared resources. We can even point them at something like:
http://classworlds.codehaus.org/

--
Jeremy

[1] http://dictionary.reference.com/search?q=accident
begin:vcard
fn:David W Van Couvering
n:Van Couvering;David W
org:Sun Microsystems, Inc.;Database Technology Group
email;internet:[EMAIL PROTECTED]
title:Senior Staff Software Engineer
tel;work:510-550-6819
tel;cell:510-684-7281
x-mozilla-html:TRUE
version:2.1
end:vcard

Reply via email to