You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by Emmanuel Lecharny <el...@gmail.com> on 2011/05/16 11:32:11 UTC

Some thoughts about extension points and OSGi

Hi guys,

I had tie this week to think a bit more about the current OSGi usage in 
the API, and the need we have to manage extension points correctly in 
the various environments. Here are a brain dump where I will gather what 
we discussed on the mailing list, and what I understood. Feel free to 
comment.

First, let's list the extension points, and the components where those 
extensions are useful :
- controls (API)
- Extended Operations(API)
- Partitions(Server)
- Stored Procedures(Server)
- Interceptors(Server)
- Authenticators (Server)
- Network Layer(API)
- Syntax Checkers(API)
- Normalizers(API)
- Comparators(API)

Note that as the server uses the API, it's likely that the extensions 
managed by the API will be also useful for the server. It's the very 
same for Studio.

We now have to list the different use cases :
1) API used by the server
2) API used by Studio
3) API used by an OSGified application
4) API used by a standard application (not OSGified)

For (1), we will consider that the server will use Felix internally, so 
it will be soon like (3). Right now, as the server is not containing any 
OSGi container, the use case to pick is (4)
In (2), Studio uses Equinox which is an OSGi container. We have to be 
sure that all the extensions point are correctly loaded as bundle.
For (3), it's really like use case (2) : each extension point must be 
loaded as a bundle
For (4), the best is to consider that the extensions points are defined 
at startup, and loaded from the application classpath. That means if we 
want to extend the API, then one should put the associated jar in a 
place it will be visible when the application will be started. That also 
means that hot addition of extensions will not be possible (at least for 
1.0.0)

Now, that raises a few questions :
1) How do we initialize the default extension points ?
A suggestion would be that they are provided in the default version, as 
plain java classes, and loaded using reflection, assuming we have a list 
of those extensions in Maven.
2) How do we fo the same thing if the application has an OSGi container ?
We must have an activator which loads those extensions.


I think I captured the spirit of the various discussion we had with Alex 
and Guillaume in this mail.


-- 
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com