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
>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to