Le 3/19/13 8:07 PM, sebb a écrit :
> On 19 March 2013 15:46, Alan Cabrera <l...@toolazydogs.com> wrote:
>> On Mar 18, 2013, at 11:44 AM, Emmanuel Lécharny <elecha...@gmail.com> wrote:
>>
>>> Le 3/18/13 6:58 PM, Alan Cabrera a écrit :
>>>> On Mar 18, 2013, at 9:57 AM, Emmanuel Lécharny <elecha...@gmail.com> wrote:
>>>>
>>>>> Hi guys,
>>>>>
>>>>> I was wondering if it wouldn't be a good idea to rename the
>>>>> org.apache.mina package to org.apache.mina3 ?
>>>>>
>>>>> That would help those who embed the lib in an application which already
>>>>> has a dependency on MINA2 (and does not use OSGi).
>>>> Are you saying they embed both mina2 and mina3?
>>> That's something you can face, for instance if one embed ApacheDS (MINA
>>> 2) and MINA 1 in some old library.
>>>
>>> I mean, this is something we might have to deal with. I know that we are
>>> taking all our time to get Mina 3 our, so that we are sure every one
>>> will have switched to another NIO lib in the mean time, but still ... ;-)
>> -0
>>
>> I think that adding a version to a package name is a bad practice and it's 
>> being done to support other bad practices.  Plus, there are plenty of tools 
>> that allow package renaming when assembling junk drawer uber-jars.
>>
> The reason for the package rename is a direct consequence of the way
> the Java classloader works.
> A single classloader can only load a single copy of a class.
> If there are multiple different instances of a class on the classpath,
> this causes problems.
>
> The Maven coordinates need to be changed along with the package name
> because Maven uses the coordinates to decide which jars are different
> versions of the same code. It only allows one jar from each different
> groupId/artifactId pair to exist on the same classpath.
>
> Bad practise is *not* changing the package name when breaking binary
> compatibility.
>
> The public API must remain binary compatible or some applications will
> not be able to use the new version.
>
> For example if the application contains a 3rd party jar which relies
> on the old API, it may not be possible to update the jar immediately
> (or at all) to a new version that only relies on the new API.
>
> If there is another 3rd party jar in the same application that uses
> the new API, the only way they can co-exist in the same classloader is
> if the old and new jars have different classnames. The simplest way to
> change the classnames is to change the package name.
>
> There is no way round this for applications using a single
> classloader; it's inherent in the way the Java classloader works.

Well said. Or you have to use OSGi...


-- 
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com 

Reply via email to