I was talking about RFC-138 which discusses Framework Hooks. There are several 
new hooks being proposed there. This is available as OSGi 4.3 early draft 2.

Why embedded containers are out? I have not been part of the spec discussions, 
but most likely they could not fulfill all requirements (in RFC-138) with that 
approach.

>From experience, nested frameworks do work, but if anything in the parent 
>changes, you still need to restart all child containers. Furthermore, there is 
>very little in terms of tooling available for managing nested containers. We 
>tried the approach in ACE for a while, and did not continue with it because of 
>that last fact.

Greetings, Marcel


On 15 Dec 2010, at 11:09 , Bram de Kruijff wrote:

> Hi again,
> 
> I just had a look into the service hooks available in R4.2
> (http://www.osgi.org/javadoc/r4v42/org/osgi/framework/hooks/service/FindHook.html).
> At this point I do not see how these could be used to solve our
> problem. Most notably the FindHook provides a way of intercepting and
> manipulting the results of a service lookup, but there is no way to
> determine if it was a tenant aware service that initiated the
> lookup...
> 
>  public class TenantAwareFindHook implements FindHook {
>      public void find(BundleContext bundleContext, String className,
> String filter, boolean allServices,
>          Collection /* <? extends ServiceReference> */serviceReferences) {
>          // I know which BundleContext does the lookup, but I have no
> way of determining whether
>          // there is a tenant associated with it.
>      }
>  }
> 
> 
> @All any thoughts?
> 
> @Marcel a while back you said that embedded containers where out and
> hooks are in. Can you elaborate on why not to embed and what direction
> the hooks are going. Are they working on new ones in the spec? Do you
> have some links?
> 
> Regards,
> Bram
> 
> On Tue, Dec 14, 2010 at 7:33 PM, Bram de Kruijff <bdekruijff at gmail.com> 
> wrote:
>> Hi All,
>> 
>> just wanna report I committed a poc for the multi (nested) container
>> scenario into my sandbox. The poc (see readme below) shows a tenant
>> aware useradmin (with multitenant storage) at the platform level. The
>> tenantmanager (also a tenant aware) spawns a nested container for each
>> tenant and publishes only(!) the relevant useradmin for that admin
>> into this container along with a global logservice and some bundles
>> that are 'tenant specific'.
>> 
>> Pros:
>> * relatively easy as-full-as-you-want isolation a tenants
>> * a nice 'tenant lifecycle' and layer of indirection for manageability
>> * tenant aware code only at platform layer. app developer need not worry
>> * ...?
>> 
>> Cons:
>> * heavy(?) I got OOM at 500 tenant with 256M memory in poc setup
>> * portable to other OSGi impl (?) Should be but needs factory.
>> * ...?
>> 
>> Obviously this is just a first poc and needs a lot more testing but in
>> the meanwhile  I'd like to hear your thoughts, pros and cons.  I'd
>> also like to create a poc using framework hooks to so we can properly
>> evaluate the two solutions.
>> 
>> 
>> Regards,
>> Bram
>> 
>> 
>> --------------------------------
>> PoC for nested Tenant Management
>> --------------------------------
>> 
>> basic design:
>> 
>> 
>> * TenantManager is a tenant aware service that
>>        1) spawns a new osgi container for each tenant registered
>>        2) delegates platform packages to the tenant container
>>        3) proxies (only relevant!) services (log/useradmin) to the tenant
>>        4) monitors container to take action (eg refresh)
>>        5) TODO: publishes tenant services in parent container (eg a REST 
>> service?)
>> 
>> * This UserAdmin FS storage is now tenant aware that
>>        1) create a storage dir per tenant (based on id)
>>        2) leverages PAX user admin through extender pattern
>> 
>> -> useradmin per tenant
>> -> application dev model in tact
>> 
>> 
>> 
>> implementation notes/todos:
>> 
>> * set of delegated packages is static (should be extendable)
>> * list proxied services is static (should be extendable)
>> * currently deploys four bundles into each tenant container
>>        - Apache Felix Dependency Manager;
>>        - Apache Felix Dependency Manager Shell
>>        - Apache Felix Shell Service
>>        - Apache Felix Remote Shell
>>        - Amdatu UserAdmin Commands
>> * currently proxies global logservice into each tenant container
>> * currently proxies relevant useradmin into tenant container
>> * JVM with Xmx=256 went OOM at about 500 tenants
>> 
>> 
>> 1) Starting this up:
>>        * Copy the amdatu-tm folder into devserver layout
>>        * Copy startup from this folder to devserver root
>>        * startup
>> 
>> 
>> 2) inside parent container
>> 
>>  -> tmcreate 245
>>  tmcreate <tenantId> <tenantName>
>>  -> tmcreate 245 jan
>>  -> tmlist
>>  '123'   - 11
>>  '245'   - jan
>>  -> tmdelete 123
>>  Tenant deleted: 123
>> 
>> note: use integers for tenantid as it is used to register a remote
>> shell on that port
>> note: refresh in the parent container will restart all tenants
>> 
>> 3) Inside tenant container
>> 
>>  * telnet 127.0.0.1 245
>> 
>>  Felix Remote Shell Console:
>>  ============================
>> 
>>  -> ps
>>  START LEVEL 1
>>     ID   State         Level  Name
>>  [   0] [Active     ] [    0] System Bundle (3.0.6)
>>  [   1] [Resolved   ] [    1] Apache Felix Dependency Manager 
>> (3.0.0.SNAPSHOT)
>>  [   2] [Active     ] [    1] Apache Felix Dependency Manager Shell
>> (3.0.0.SNAPSHOT)
>>  [   3] [Active     ] [    1] Apache Felix Shell Service (1.4.2)
>>  [   4] [Active     ] [    1] Apache Felix Remote Shell (1.1.2)
>>  [   5] [Active     ] [    1] Amdatu UserAdmin Commands (0.1.0.SNAPSHOT)
>> 
>>  -> uacreate 123
>>  User created: 123
>>  -> ualist
>>  '123
>>  -> uadelete 123
>>  User deleted: 123
>>  ->
>> 
>> 
>> 
>> On Fri, Dec 10, 2010 at 3:25 PM, Bram de Kruijff <bdekruijff at gmail.com> 
>> wrote:
>>> Hi Ivo,
>>> 
>>> Good points, thanks. Please feel free to add things on the wiki. I'm on
>>> mobile atm so just two quicks notes:
>>> 
>>> I would not call the management server the provisioning server as
>>> provisioning is only part of its responsibilities. On the other hand I do
>>> like the notion of "provisioning a tenant onto a node"!
>>> 
>>> The data sharing use case I would aproach as a data (web) service. Either
>>> owned by one or even 3rd party. This removes the data sharing at the
>>> platform level requirement, which I fear would be a swamp of complexity. At
>>> the same time it opens up the data for reuse for any consumer on the web, so
>>> its much more RESTfull.
>>> 
>>> Enjoy the weekend!
>>> Regards,
>>> Bram
>>> 
>>> On Dec 10, 2010 2:57 PM, "Ivo Ladage-van Doorn"
>>> <Ivo.Ladage-vanDoorn at gxsoftware.com> wrote:
>>>> Hi Bram,
>>>> 
>>>> I think this is a good starting point for the multi-tenancy discussion.
>>>> And of course I have some remarks/additions:
>>>> 
>>>> Configuration, Management - I would think that the application should
>>>> support configuration per tenant. For example, if one tenant decides to
>>>> reduce the session timeout to 5 minutes, it should not affect the other
>>>> tenants. Some configuration on the other hand might be shared among all
>>>> tenants hosted by the same application and if so, should be read-only to
>>>> them as changing it would affect other tenants.
>>>> Regarding management; I think tenant management should be separated from
>>>> the Amdatu runtime and managed by the provisioning server. The provisioning
>>>> server needs to be tenant aware, as it should decide what tenants run on
>>>> what nodes and if tenants run in isolates OSGi containers and/or VMs
>>>> (dependent on their contract for example; gold contract = isolated 
>>>> container
>>>> and VM). As a consequence a Tenant in the Amdatu runtime is read-only; it 
>>>> is
>>>> managed by the provisioning server (which may, and probably will, run on 
>>>> the
>>>> Amdatu platform).
>>>> 
>>>> Sharing information - Some tenants will want to share content. Think of
>>>> big publishers with multiple magazines. Each magazine would be a tenant, 
>>>> but
>>>> they still want to share articles with each other. There could even be
>>>> authorization involved; one tenant adds articles while other tenants can
>>>> only read them and incorporate them into their website, but not change 
>>>> them.
>>>> 
>>>> Licensing - Multiple tenants hosted by the same application may have
>>>> different licenses. Dependent on their license, some
>>>> services/functionality/content will or will not be available to them.
>>>> 
>>>> Logging - I think logging should be separated, as each tenant would want
>>>> to see only log entries that are relevant to them. More importantly, log
>>>> files may contain information that are absolutely forbidden to be seen by
>>>> others (as we experienced with some customers; we were not even allowed to
>>>> read log files at all, they first has to be censured)
>>>> 
>>>> 
>>>> Regards, Ivo
>>>> 
>>>> -----Original Message-----
>>>> From: amdatu-developers-bounces at amdatu.org
>>>> [mailto:amdatu-developers-bounces at amdatu.org] On Behalf Of Bram de 
>>>> Kruijff
>>>> Sent: vrijdag 10 december 2010 13:22
>>>> To: amdatu-developers at amdatu.org
>>>> Subject: [Amdatu-developers] Multi-tenancy (and more) design
>>>> 
>>>> Hi all,
>>>> 
>>>> I just created a mechanisms section under architecture on the wiki and
>>>> have put down an initial analysis on multi-tenancy. IMHO we must
>>>> address these concerns asap and I would appreciate you feedback and
>>>> contributions :)
>>>> 
>>>> Regards,
>>>> Bram
>>>> 
>>>> ps. http://www.amdatu.org/confluence/display/Amdatu/Principle+Mechanisms
>>>> ps. Working on a proof of concept for embedded containers. In a
>>>> sandbox near you soon.
>>>> _______________________________________________
>>>> Amdatu-developers mailing list
>>>> Amdatu-developers at amdatu.org
>>>> http://lists.amdatu.org/mailman/listinfo/amdatu-developers
>>>> 
>>>> _______________________________________________
>>>> Amdatu-developers mailing list
>>>> Amdatu-developers at amdatu.org
>>>> http://lists.amdatu.org/mailman/listinfo/amdatu-developers
>>> 
>> 
> 
> _______________________________________________
> Amdatu-developers mailing list
> Amdatu-developers at amdatu.org
> http://lists.amdatu.org/mailman/listinfo/amdatu-developers
> 


Reply via email to