Okey great.

On Thu, Aug 11, 2016 at 11:43 AM, Maheeka Jayasuriya <[email protected]>
wrote:

> Hi Kishanthan,
>
> Yes I tested by providing a random TenantID which were not available in
> the ESB pack earlier (screenshot attached). We are building the docker
> image from a vanilla ESB pack and hence there won't be any other tenants in
> the pack.
>
> ​
>  Screen Shot 2016-08-11 at 11.42.29 AM.png
> <https://drive.google.com/a/wso2.com/file/d/0B_Ml_gi-3jYrbHpobXM3NFhsQlk/view?usp=drive_web>
> ​
>
> Thanks,
> Maheeka
>
> Maheeka Jayasuriya
> Senior Software Engineer
> Mobile : +94777750661
>
> On Thu, Aug 11, 2016 at 11:36 AM, Kishanthan Thangarajah <
> [email protected]> wrote:
>
>> No, I may be wrong. This approach will work if the given tenant-id is not
>> taken already at the table level.
>>
>> On Thu, Aug 11, 2016 at 11:32 AM, Kishanthan Thangarajah <
>> [email protected]> wrote:
>>
>>>
>>>
>>> On Thu, Aug 11, 2016 at 7:56 AM, Maheeka Jayasuriya <[email protected]>
>>> wrote:
>>>
>>>> Hi Devs,
>>>>
>>>>
>>>> We need to start an ESB in a docker container, with a capp deployed in
>>>> tenant space. So in order to have the tenant space already created and to
>>>> get the tenant initialized when the container is serving requests, we have
>>>> tried out the following approach manually which works.
>>>>
>>>>
>>>>    1.
>>>>
>>>>    Have the capp copied to [ESB_HOME]/repository/tenants/[tenantId]/
>>>>    when building the docker image. This tenantId may not be incremental and
>>>>    could be any number
>>>>    2.
>>>>
>>>>    Run the docker and wait for ESB to start
>>>>    3.
>>>>
>>>>    Invoke the TenantMgtAdminService’s addTenant method specifying the
>>>>    ‘tenantId’ and  other tenant details (username, password, etc)
>>>>    4.
>>>>
>>>>    Invoke an API that is available in the copied capp (1) to
>>>>    initialize the tenant
>>>>
>>>>
>>>> Basically, we need to have the tenant space created during ESB server
>>>> startup. Tenant could be initialized later for the first request. Therefore
>>>> we started writing an OSGI declarative component which waits for
>>>> TenantMgtServiceComponent and calls the TenantMgtAdminService to create the
>>>> tenant. The capps will be already copied to the tenant space when building
>>>> the docker image. Following is what we have tried so far.
>>>>
>>>>
>>>>    1.
>>>>
>>>>    When trying to write a new OSGI component, say
>>>>    TenantInitializerComponent, we wanted to add a TenantMgtServiceComponent
>>>>    registered OSGI service as dependency. But there were no OSGI services
>>>>    available in either of any tenant management components. Due to this we
>>>>    were not able to get the TenantInitializerComponent activated.
>>>>    2.
>>>>
>>>>    Since there were no OSGI services of TenantMgtServiceComponent
>>>>    available, we tried by adding the dependencies of 
>>>> TenantMgtServiceComponent
>>>>    to TenantInitializerComponent as below.
>>>>
>>>> * @scr.reference name="org.wso2.carbon.tenant.mgt.listener.service"
>>>>
>>>> *                interface="org.wso2.carbon.stratos.common.lis
>>>> teners.TenantMgtListener"
>>>>
>>>> *                cardinality="1..n" policy="dynamic"
>>>>
>>>> *                bind="setTenantMgtListenerService"
>>>>
>>>> *                unbind="unsetTenantMgtListenerService"
>>>>
>>>> * @scr.reference name="default.tenant.billing.service"
>>>>
>>>> *                interface="org.wso2.carbon.stratos.common.Ten
>>>> antBillingService"
>>>>
>>>> *                cardinality="0..1" policy="dynamic"
>>>>
>>>> *                bind="setTenantBillingService"
>>>>
>>>> *                unbind="unsetTenantBillingService"
>>>>
>>>> TenantMgtListener is available in ESB and therefore set the cardinality
>>>> to 1..n. TenantBillingService is not available in ESB and hence cardinality
>>>> is 0..1.
>>>>
>>>> Following is the implementation in the TenantInitializerComponent’s
>>>> activate method.
>>>>
>>>> TenantMgtAdminService tenantMgtAdminService = new
>>>> TenantMgtAdminService();
>>>>
>>>> TenantInfoBean tenantInfoBean = new TenantInfoBean();
>>>>
>>>> tenantInfoBean.setActive(true);
>>>>
>>>> tenantInfoBean.setAdmin("admin");
>>>>
>>>> tenantInfoBean.setAdminPassword("admin123");
>>>>
>>>> tenantInfoBean.setFirstname("Maheeka");
>>>>
>>>> tenantInfoBean.setLastname("Maheeka");
>>>>
>>>> tenantInfoBean.setEmail("[email protected]");
>>>>
>>>> tenantInfoBean.setTenantDomain("maheeka.com");
>>>>
>>>> tenantInfoBean.setSuccessKey("");
>>>>
>>>> tenantInfoBean.setTenantId(250);
>>>>
>>>
>>> This may not work because, the tenant id is generated and returned by
>>> the tenant persister once a new tenant is persisted properly in DB. The
>>> tenant id is basically the row id in the table.
>>>
>>> Did you test this?
>>>
>>>
>>> tenantInfoBean.setUsagePlan("Demo");
>>>>
>>>> try {
>>>>
>>>>   tenantMgtAdminService.addTenant(tenantInfoBean);
>>>>
>>>>   log.info("Tenant added successfully");
>>>>
>>>> } catch (Exception e) {
>>>>
>>>>   log.error(“Error adding tenant", e);
>>>>
>>>> }
>>>>
>>>>
>>>> However, “tenantMgtAdminService.addTenant(tenantInfoBean)” will invoke 
>>>> TenantMgtServiceComponent
>>>> which is not activated by this time and thus throws a NPE.
>>>>
>>>>
>>>>    1.
>>>>
>>>>    Next thing we tried was using the ServerStartupObserver as
>>>>    dependency to TenantInitializerComponent. However even this time
>>>>    TenantMgtServiceComponent is not activated by the time
>>>>    TenantInitializerComponent tries to activate. According to [1], seems 
>>>> like
>>>>    ServerStartupObserver only waits till the transports are started.
>>>>    2.
>>>>
>>>>    If we write a BundleListener [3], we could wait for the
>>>>    TenantMgtServiceComponent to be active and perform addTenant. Since this
>>>>    captures all bundle statuses this might not be an effective approach.
>>>>    3.
>>>>
>>>>    Finally, took a look at StartupFinalizerServiceComponent. This
>>>>    seems to register a service after all the components are initialized as
>>>>    org.apache.axis2.engine.ListenerManager. I was able to successfully
>>>>    create the tenant by adding a reference to this service as below.
>>>>
>>>> * @scr.reference name="listener.manager"
>>>>
>>>> *                            interface="org.apache.axis2.engin
>>>> e.ListenerManager"
>>>>
>>>> *                            cardinality="1..1" policy="dynamic"
>>>>
>>>> *                            bind="setListenerManager"
>>>>
>>>> *                            unbind="unsetListenerManager"
>>>>
>>>>
>>>> Adding reference to org.apache.axis2.engine.ListenerManager seems to
>>>> solve the problem. However, need to verify whether there are any other
>>>> better ways to solve this problem. Or shall we proceed with this approach?
>>>> Appreciate your feedback on this.
>>>>
>>>>
>>>> Thanks Kalpa and Jayanga for helping out on the details.
>>>>
>>>> [1] https://docs.wso2.com/display/Carbon447/Server+Startup+Observer
>>>>
>>>> [2] https://github.com/wso2/carbon-kernel/blob/4.4.x/core/org.ws
>>>> o2.carbon.core/src/main/java/org/wso2/carbon/core/internal/S
>>>> tartupFinalizerServiceComponent.java#L199
>>>>
>>>> [3] http://eclipsesource.com/blogs/2013/01/23/how-to-track-lifec
>>>> ycle-changes-of-osgi-bundles/
>>>>
>>>> Thanks,
>>>>
>>>> Maheeka Jayasuriya
>>>> Senior Software Engineer
>>>> Mobile : +94777750661
>>>>
>>>
>>>
>>>
>>> --
>>> *Kishanthan Thangarajah*
>>> Technical Lead,
>>> Platform Technologies Team,
>>> WSO2, Inc.
>>> lean.enterprise.middleware
>>>
>>> Mobile - +94773426635
>>> Blog - *http://kishanthan.wordpress.com
>>> <http://kishanthan.wordpress.com>*
>>> Twitter - *http://twitter.com/kishanthan
>>> <http://twitter.com/kishanthan>*
>>>
>>
>>
>>
>> --
>> *Kishanthan Thangarajah*
>> Technical Lead,
>> Platform Technologies Team,
>> WSO2, Inc.
>> lean.enterprise.middleware
>>
>> Mobile - +94773426635
>> Blog - *http://kishanthan.wordpress.com
>> <http://kishanthan.wordpress.com>*
>> Twitter - *http://twitter.com/kishanthan <http://twitter.com/kishanthan>*
>>
>
>


-- 
*Kishanthan Thangarajah*
Technical Lead,
Platform Technologies Team,
WSO2, Inc.
lean.enterprise.middleware

Mobile - +94773426635
Blog - *http://kishanthan.wordpress.com <http://kishanthan.wordpress.com>*
Twitter - *http://twitter.com/kishanthan <http://twitter.com/kishanthan>*
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to