+1, but we need to agree on the target release for this change.

Andreas

On Mon, May 11, 2009 at 09:57, keith chapman <keithgchap...@gmail.com> wrote:
> Shall we go ahead with this change then?
>
> Thanks,
> Keith.
>
> On Wed, May 6, 2009 at 7:11 PM, Amila Suriarachchi
> <amilasuriarach...@gmail.com> wrote:
>>
>>
>> On Wed, May 6, 2009 at 4:33 PM, Glen Daniels <g...@thoughtcraft.com>
>> wrote:
>>>
>>> Amila Suriarachchi wrote:
>>> >     Hm - it seems like you didn't actually get my point.  We CAN'T
>>> >     return the
>>> >     actual allServices map because that would be breaking the
>>> > abstraction
>>> >     boundary provided by the class.
>>> >
>>> > As I remember this change was done to avoid concurrent modifications to
>>> > service map[1].
>>>
>>> Right - before this change we were doing something actively bad/wrong,
>>> i.e.
>>> returning the internal map.  After the change we were returning a cloned
>>> copy
>>> of the map (though not using clone() for some reason), which is good in
>>> that
>>> it prevented people from misusing it.
>>>
>>> > At that time services map was a HashMap and could not fix the issue by
>>> > changing it to a ConcurrentHashMap since API method returns a HashMap.
>>> >
>>> > Currently anyone can get a copy of internal map (I think we can not use
>>> > clone() method since internal implementation is ConcurrentHashMap and
>>> > we
>>> > need to return a HashMap). And if they want to add or remove service
>>> > they have to use addService and removeService respectively.
>>> >
>>> > Keith, if you really need the internal map IMHO best way is to add a
>>> > new
>>> > API method.
>>>
>>> Ah, no.  The "best way" is NOT TO OFFER ACCESS TO THE INTERNAL MAP.
>>>
>>> Keith's suggestion is to change the API so that it returns a Map - this
>>> would
>>> be much more correct since it increases the level of abstraction for the
>>> method, and would therefore let us, the implementors, freely decide how
>>> this
>>> should work internally.  Right now we have problems because someone made
>>> this
>>> method overly specific, and this is what we should fix.  (I was incorrect
>>> earlier when I said this wouldn't break people, btw - I was thinking
>>> about
>>> stuff like getServices().get("MyService"), but of course "HashMap foo =
>>> getServices()" would fail.  I still think we should fix it.)
>>>
>>> My comment is that we should not only return a Map, we should change the
>>> implementation to make sure the Map is immutable, and make sure the
>>> JavaDoc
>>> explains what is going on.
>>
>> +1. Here the real problem is this API contains a hashMap instead of Map.
>>
>> What I got from the Keiths' first mail is that he need the API change to
>> return the internal map without copying. I suggested to add a new method if
>> he really need it so that only he use that method. I agree with you that
>> this is not a good change.
>>
>> thanks,
>> Amila.
>>>
>>>
>>> Make sense?
>>>
>>> --Glen
>>
>>
>>
>> --
>> Amila Suriarachchi
>> WSO2 Inc.
>> blog: http://amilachinthaka.blogspot.com/
>
>
>
> --
> Keith Chapman
> Senior Software Engineer
> WSO2 Inc.
> Oxygenating the Web Service Platform.
> http://wso2.org/
>
> blog: http://www.keith-chapman.org
>

Reply via email to