How about overriding the getAxisConfig() method in your admin service, to
get the CarbonContext from ThreadLoacal ?
Im not sure how its going to affect other use-cases though.

--Pradeep


On Thu, Mar 21, 2013 at 1:02 PM, Vijayaratha Vijayasingam
<[email protected]>wrote:

> Hi Pradeep/Azeez;
>
> Our scenario is,
>
> We login the publisher as a tenant and when we deploy the API to gateway,
> we call an AdminService. Before deploying to the gateway,we login the
> AdminService with the supertenant's credentials. So, now the AdminService
> login happens as supertenant and when we deploy the API, we want to make
> that in the TenantSpace. For that ,we pass tenant domain as a parameter to
> the AdminService and setting tenant domain like here[1]. After that when we
> try to retrive the SynapseConfiguration, we call  another adminService[2]
> which gets SynapseConfiguration from Axis2Configuration. The second
> AdminService extends the AbstarctAdmin service and in the AbstarctAdmin
> service, here is how we create the Axis2configuration;[3]
> In the 3rd step, we don't consider the "ThreadLocalCarbonContext()" and it
> gives the Supertenant's synapse configuartion.
>
> How should we fix this?
> Thanks
> -Ratha
>
>
> [1]    if (tenantDomain != null && !("").equals(tenantDomain) &&
>
> !tenantDomain.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) {
>                 PrivilegedCarbonContext.startTenantFlow();
>
> PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain,
> true);
>             }
>
>           finally {
>             PrivilegedCarbonContext.endTenantFlow();
>             }
>
>  *[2] return (SynapseConfiguration) getAxisConfig().getParameter(
>                 SynapseConstants.SYNAPSE_CONFIG).getValue();
>
> [3]
> getConfigContext().getAxisConfiguration();
>
> protected ConfigurationContext getConfigContext() {
>         checkAdminService();
>         if(configurationContext != null) {
>             return configurationContext;
>         }
>         MessageContext msgContext =
> MessageContext.getCurrentMessageContext();
>         if (msgContext != null) {
>             ConfigurationContext mainConfigContext =
> msgContext.getConfigurationContext();
>
>             // If a tenant has been set, then try to get the
> ConfigurationContext of that tenant
>             PrivilegedCarbonContext carbonContext =
> PrivilegedCarbonContext.
>                     getCurrentContext(msgContext);
>             String domain = carbonContext.getTenantDomain();
>             if (domain != null &&
> !MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equals(domain)) {
>                 return
> TenantAxisUtils.getTenantConfigurationContext(domain, mainConfigContext);
>             } else if(carbonContext.getTenantId() ==
> MultitenantConstants.SUPER_TENANT_ID) {
>                 return mainConfigContext;
>             } else {
>                 throw new UnsupportedOperationException("Tenant domain
> unidentified. " +
>                         "Upstream code needs to identify & set the tenant
> domain & tenant ID. " +
>                         " The TenantDomain SOAP header could be set by the
> clients or " +
>                         "tenant authentication should be carried out.");
>             }
>         } else {
>             return
> CarbonConfigurationContextFactory.getConfigurationContext();
>         }
>     }
>
> *
>
> On 21 March 2013 11:15, Pradeep Fernando <[email protected]> wrote:
>
>> Hi Ratha,
>>
>> Can you please explain what your are trying to do. Seems like you are
>> starting a tenant flow in one of your Admin service calls... why is that ?
>>
>> And after creating a tenant flow, the preferred way is to
>> getThreadLocalCarbonContext.
>>
>>
>>
>>
>> On Thu, Mar 21, 2013 at 1:17 AM, Vijayaratha Vijayasingam <
>> [email protected]> wrote:
>>
>>> Hi all;
>>> Im getting following issue [1] when i try to set a tenant domain for a
>>> particular tenant.
>>>
>>> My code is like this ;
>>>
>>> *PrivilegedCarbonContext.startTenantFlow();
>>> PrivilegedCarbonContext.getCurrentContext().setTenantDomain(tenantDomain,
>>> true);
>>> finally{
>>>    PrivilegedCarbonContext.endTenantFlow();*
>>> }
>>>
>>> Can anyone point me the issue?
>>>
>>> thanks,
>>>
>>> [1]
>>>         at java.lang.Thread.run(Thread.java:662)
>>> Caused by: org.apache.axis2.AxisFault: Error while adding new API
>>>         at
>>> org.wso2.carbon.apimgt.impl.utils.RESTAPIAdminClient.addApi(RESTAPIAdminClient.java:52)
>>>         at
>>> org.wso2.carbon.apimgt.impl.APIProviderImpl.publishToGateway(APIProviderImpl.java:739)
>>>         ... 53 more
>>> Caused by: org.apache.axis2.AxisFault: Cannot create tenant
>>> ConfigurationContext for tenant ratha.com
>>>         at
>>> org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)
>>>         at
>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:367)
>>>         at
>>> org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:413)
>>>         at
>>> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:224)
>>>         at
>>> org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
>>>         at
>>> org.wso2.carbon.rest.api.stub.RestApiAdminStub.addApiForTenant(RestApiAdminStub.java:371)
>>>         at
>>> org.wso2.carbon.apimgt.impl.utils.RESTAPIAdminClient.addApi(RESTAPIAdminClient.java:47)
>>>
>>> _______________________________________________
>>> Dev mailing list
>>> [email protected]
>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>
>>>
>>
>>
>> --
>> *Pradeep Fernando*
>> Member, Management Committee - Platform & Cloud Technologies
>> Senior Software Engineer;WSO2 Inc.; http://wso2.com
>>
>> blog: http://pradeepfernando.blogspot.com
>> m: +94776603662
>>
>
>


-- 
*Pradeep Fernando*
Member, Management Committee - Platform & Cloud Technologies
Senior Software Engineer;WSO2 Inc.; http://wso2.com

blog: http://pradeepfernando.blogspot.com
m: +94776603662
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to