On Mon, May 11, 2009 at 1:45 PM, Andreas Veithen <andreas.veit...@gmail.com>wrote:
> +1, but we need to agree on the target release for this change. I think this should not go to 1.5 and only apply to axis2 trunk (i.e 1.6). thanks, Amila. > > > 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 > > > -- Amila Suriarachchi WSO2 Inc. blog: http://amilachinthaka.blogspot.com/