On Thu, Sep 10, 2009 at 11:10 AM, Supun Kamburugamuva <supu...@gmail.com>wrote:
> > > On Wed, Sep 9, 2009 at 10:27 PM, Hiranya Jayathilaka <hiranya...@gmail.com > > wrote: > >> >> >> On Wed, Sep 9, 2009 at 7:52 PM, Supun Kamburugamuva <supu...@gmail.com>wrote: >> >>> Hi, >>> I think this is the price that we have to pay for enabling >>> dynamic behavior. If the ESB is under huge load and we synchronize these >>> methods it won't scale anyway. >>> >>> Having two threads load the same resource is tolerable if one thread >>> doesn't access the resource while it is initialized halfway way. >>> >>> One suggestion, I think if we can move the >>> >>> initialized = true; line 166 >>> >>> statement in the AbstractEndpoint.java to the bottom of the init method >>> it will be more safer. >>> >> >> What would be safer is to move the above mentioned line of code to the >> bottom and make the method synchronized. The AbstractEndpoint#init method >> 'generally' doesn't get called by multiple threads simultaneously and that's >> probably why it is left un-synchronized at the moment. But with dynamic >> endpoints (and only with dynamic endpoints) there is a chance that this >> method can get called by several threads on the same object. >> >> Devs WDYT? Shall we make this change? Since the method does not get called >> too often by concurrent threads I don't think there would be any performance >> losses here. >> >> > Endpoint.init method is supposed to be called by a single thread and > only once. So I think it is not a good design to make this method > synchronized. I think the correct approach is to handle the synchronization > by the caller depending on the situation. > I don't think I got your point. Could you please explain that a little more? Currently there is a possibility that multiple message context instances may attempt to initialize the same endpoint object at the same time. How can we synchronize at caller level to avoid that? Thanks, Hiranya > Supun.. > > >> Thanks, >> Hiranya >> >> >>> Thanks, >>> Supun.. >>> >>> On Wed, Sep 9, 2009 at 5:48 AM, Hiranya Jayathilaka < >>> hiranya...@gmail.com> wrote: >>> >>>> Hi Devs, >>>> The Axis2MessageContext class uses SynapseConfiguration#getEndpoint and >>>> SynapseConfiguration#getSequence methods to gain access to dynamic >>>> endpoints >>>> and sequences when they are not present in the message context's local >>>> store. However these method calls are not synchronized and from the looks >>>> of >>>> it I feel that if two message contexts try to access the same dynamic >>>> resource at the same time there is a chance that SynapseConfiguration would >>>> perform two remote registry lookups to fetch the same resource. This won't >>>> really cause any erroneous behavior but if the ESB is under a huge load >>>> where each message is trying to load a particular dynamic resource things >>>> may get out of hands. >>>> >>>> So does it make sense to bring in some synchronization into the picture? >>>> Or have I missed something and the above theory is not applicable? >>>> >>>> Thanks >>>> -- >>>> Hiranya Jayathilaka >>>> Software Engineer; >>>> WSO2 Inc.; http://wso2.org >>>> E-mail: hira...@wso2.com; Mobile: +94 77 633 3491 >>>> Blog: http://techfeast-hiranya.blogspot.com >>>> >>> >>> >>> >>> -- >>> Software Engineer, WSO2 Inc >>> http://wso2.org >>> supunk.blogspot.com >>> >>> >>> >> >> >> -- >> Hiranya Jayathilaka >> Software Engineer; >> WSO2 Inc.; http://wso2.org >> E-mail: hira...@wso2.com; Mobile: +94 77 633 3491 >> Blog: http://techfeast-hiranya.blogspot.com >> > > > > -- > Software Engineer, WSO2 Inc > http://wso2.org > supunk.blogspot.com > > > -- Hiranya Jayathilaka Software Engineer; WSO2 Inc.; http://wso2.org E-mail: hira...@wso2.com; Mobile: +94 77 633 3491 Blog: http://techfeast-hiranya.blogspot.com