Hi devs,

I've been researching what it would take to be able to support the Extension 
Manager use case regarding components isolation and dependency versioning.  I 
won't go over the details of all I've researched (you can ask questions for 
that). I'm just proposing a series of steps and a vision of the future for our 
component model.

If you're interested in the topic I would recommend that you read the Weld 
tutorial on CDI:
docs.jboss.org/weld/reference/1.0.0/en-US/html_single/

Here are the steps I'm willing to work on and implement.

Step 1: timeframe from now: 1 month
* Use JSR330 annotations

Step 2: timeframe from now: 1 month
* Do a POC of integrating xwiki-component with OSGi (as a xwiki-component-osgi 
module). 
- No versioning management yet.
- Need to use a maven osgi plugin to generate Manifest files from the POMs
* Revise further steps based on result from Step 2.

Step 3: timeframe from now: 2 months
* If step 2 is successful add what's needed to the XWiki Component API to 
perform generic lookup: CM.lookup(Class, Properties) where Properties is a set 
of properties registered with the component. It would contain the role hint and 
the version for example. Also add annotations for specifying dependency version 
ranges.

Note: After step 3 we have the prereqs for the Extension Manager done. The 
other steps below are improvements and steps to put us in the standards 
direction.

Step 4: timeframe from now: 6 months-2 years 
* When CDI (JSR299) has taken over the world (ie several DI frameworks migrate 
to it, it becomes a JavaSE de facto standard at least), migrate to it. We need 
2 features not in the spec right now:
- support for dynamic bean registration
- ability to implement CDI over OSGi
* Work with the Weld dev team to add support for those 2 items above. They're 
interested to implement it if we help them and if these 2 items get done 
relatively quickly we could migrate to CDI earlier than the timeframe above
* In the meantime we can monitor it carefully to see its progress and we could 
start migrating to it slowly. Some ideas:
- use the CDI annotations instead of the xwiki-specific ones for the binding 
part
- introduce new concepts that comes from CDI: decorators, interceptors, 
producers
- refactor our observation module to use the CDI event model

Step 5: timeframe for now: 2-4 years
* When JSR294 is approved and final (will require at least JDK 7, so XWiki 
needs to be on JDK7 at least for this, so that's a few years in the future...) 
migrate to CDI over JSR294 over (Jigsaw, OSGi). The good part is that since we 
would be using CDI we won't need to change much in our code to do that.

WDYT?

Thanks
-Vincent

Links:
- Weld/JSR299: docs.jboss.org/weld/reference/1.0.0/en-US/html_single/
- Jigsaw: openjdk.java.net/projects/jigsaw/
- JSR330: 
atinject.googlecode.com/svn/trunk/javadoc/javax/inject/package-summary.html
- JSR294: See description on openjdk.java.net/projects/jigsaw/
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to