I have recently created a maven plugin that generates blueprint.xml from
CDI, JEE and Spring annotations.
https://github.com/cschneider/blueprint-maven-plugin
What makes this different from the blueprint annotations support we
already got in aries?
------------------------------------------------------------------------------------------------------------------------
- The blueprint annotations follow the xml style of binding to an exact
bean id.
The annotations I used by default bind simply by type which is much
simpler to manage and more in line with Spring @Autowired and CDI @Inject.
Still they also allow to bind by name using @Named
- The aries blueprint annotations are processed at runtime but create
xml under the covers. My plugin on the other hand does all the work at
build time.
So at runtime you can install into any existing container running
blueprint - no additional deps needed.
- My plugin uses standard CDI/JEE annotations and where there is no
standard (Services) pax cdi annoations. So people using this style can
transition from and to real CDI quite easily. People with JEE background
also feel at home with this style.
- My plugin also supports some spring annotations like @Autowired,
@Component, @Value. This allows a very fast migration from spring to
blueprint. In fact I used it in a quite big customer project for that case
Sample application
-------------------------
I created an example application that shows how the following features:
- internal wiring
- container managed JPA with transactions
- using and offering OSGi services
https://github.com/cschneider/Karaf-Tutorial/tree/master/tasklist-cdi
Here are the most important classes that show the annotations:
https://github.com/cschneider/Karaf-Tutorial/blob/master/tasklist-cdi/persistence/src/main/java/net/lr/tasklist/persistence/impl/TaskServiceImpl.java
https://github.com/cschneider/Karaf-Tutorial/blob/master/tasklist-cdi/ui/src/main/java/net/lr/tasklist/ui/TaskListServlet.java
https://github.com/cschneider/Karaf-Tutorial/blob/master/tasklist-cdi/persistence/src/main/java/net/lr/tasklist/persistence/impl/InitHelper.java
Here is the generated xml for:
- persistence https://gist.github.com/cschneider/763785e3d4faed89d36b
- ui https://gist.github.com/cschneider/6ef0872919299eb0b774
You can run the example easily in karaf by following the readme.
What is missing ?
-----------------------
Currently I only have support for binding configs from config admin by
using the spring @Value annotation.
Adding a similar non spring annotation would be simple but I am a bit
hesitant to create my own annotations. Does anyone know existing
annotations that would
match?
Future at aries?
---------------------
I started with the plugin on github to get fast results. Now for the
longer term I would like to put it into a community so there are
official releases as well as hopefully contributions by others.
So as blueprint lives at aries this is my first choice.
The plugin is already using Apache License but of course I would have to
refactor it to the aries namings and other coding standards.
So what do you think?
Christian
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
http://www.talend.com