On Thu, May 24, 2012 at 3:18 PM, Afkham Azeez <[email protected]> wrote:
> Nice analysis. Proposed solution looks good. Please implement it & test > for any regression issues. > Ok, will do! Thanks for the feedback! > > On Thu, May 24, 2012 at 2:33 PM, Nirmal Fernando <[email protected]> wrote: > >> Hi All, >> >> Finally I've been able to find the root cause for the $subject and the >> solution. >> >> *Scenario*: >> >> * A tenant change its main sequence to something like following. >> >> <sequence xmlns="http://ws.apache.org/ns/synapse" name="main" >> trace="enable"> >> <in> >> <send> >> <endpoint> >> <address uri=" >> http://appserver.stratoslive.wso2.com/services/t/a.com/SimpleStockQuoteService" >> format="soap11" /> >> </endpoint> >> </send> >> </in> >> <out> >> <send /> >> </out> >> </sequence> >> >> * A client trying to access this tenant's services through a REST call. >> >> *Explanation to the problem:* >> >> * In the product this works like following: >> >> * Since ESB doesn't have any real service in it, what Synapse (RESTUtil) >> does is set its default service property as the axis-service in >> MessageContext in order to inject the request into the main sequence. >> Following code handles that: >> >> if (axisService == null) { >> String defaultSvcName = >> NHttpConfiguration.getInstance().getStringValue( >> "nhttp.default.service", "__SynapseService"); >> axisService = msgContext.getConfigurationContext() >> .getAxisConfiguration().getService(defaultSvcName); >> } >> msgContext.setAxisService(axisService); >> >> * But in the service's case, finding the service should be done >> carefully, since we need to access relevant tenant's main sequence, not >> super admin's. >> >> >> *Proposing Solution*: >> >> * Currently in >> org.wso2.carbon.core.multitenancy.MultitenantMessageReceiver's doNhttpREST >> method, we are processing a REST message coming in from the NHTTP transport. >> * For this method we're passing the "service name". >> if service URL is >> http://esb.cloud-test.wso2.com:8280/services/t/test.com/myproxy : >> service name is "myproxy" >> if service URL is >> http://esb.cloud-test.wso2.com:8280/services/t/test.com : service name >> is "" >> * Hence, I think we could safely assume that if service name is "", the >> request should go to the default service i.e. "__SynapseService" of that >> particular tenant. >> * Thus, we can set the axis-service of the message context of that tenant >> to this default service within MultitenantMessageReceiver's doNhttpREST >> method. >> * The code portion I've added is following: >> >> // handling requests with an empty service part >> if("".equals(servicePart)){ >> // we assume that the request should go to the default service >> >> tenantInMsgCtx.setAxisService(tenantConfigCtx.getAxisConfiguration().getService("__SynapseService")); >> } >> >> >> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ >> If you have any concerns with the above approach please fire them up ASAP. >> >> >> -- >> >> Thanks & regards, >> Nirmal >> >> Software Engineer- Platform Technologies Team, WSO2 Inc. >> Mobile: +94715779733 >> Blog: http://nirmalfdo.blogspot.com/ >> > > > > -- > *Afkham Azeez* > Director of Architecture; WSO2, Inc.; http://wso2.com > Member; Apache Software Foundation; http://www.apache.org/ > * <http://www.apache.org/>** > email: **[email protected]* <[email protected]>* cell: +94 77 3320919 > blog: **http://blog.afkham.org* <http://blog.afkham.org>* > twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez> > * > linked-in: **http://lk.linkedin.com/in/afkhamazeez* > * > * > *Lean . Enterprise . Middleware* > > -- Thanks & regards, Nirmal Software Engineer- Platform Technologies Team, WSO2 Inc. Mobile: +94715779733 Blog: http://nirmalfdo.blogspot.com/
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
