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. 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