2013-01-18 3 views
0

Je ne connais pas encore OSGI et j'essaie actuellement de l'utiliser pour créer une application web modulaire. application Web elle-même est créée à l'aide Vaadin 6. Je suit cet article WIKI sur le site Web Vaadin: Creating Modular Vaadin application with OSGIComment utiliser le service OSGI dans l'application Web Vaadin s'exécutant dans Jboss AS 7

étapes que j'ai ai fait jusqu'à présent: - créé bundle OSGI pour le service module (service simple qui suit d'autres modules OSGi aka plugins) et l'a déployé sur jboss. - créé l'application vaadin, juste un bout.

service OSGi censé être injecté à la classe Servlet, comme:

@WebServlet(urlPatterns="/*") 
public static class Servlet extends AbstractApplicationServlet { 

@Resource(mappedName="vaadin-moduleService") 
ModuleService moduleService; 

@Override 
protected Class<? extends Application> getApplicationClass() { 
    return ModuleDemoApp.class; 
} 

@Override 
protected Application getNewApplication(HttpServletRequest request) throws ServletException { 
    return new ModuleDemoApp(moduleService); 
} 
} 

Maintenant, la question - comment ce service peut être injecté ici? Actuellement, je ne reçois que le pointeur NULL, donc DI ne fonctionne pas. De l'article mentionné ci-dessus:

Note, that the servlet has a moduleService field annotated with the 
@Resource annotation. One of the interesting features of GlassFish 3 
is that it is possible to inject references to OSGi services into all 
container managed Java beans, even though they are not actually 
running in the OSGi container themselves. Thus, in this case, GlassFish 
will find the module service we define in the previous section and inject it. 

Selon ce Glassfish fera toute la magie interne et automatiquement. Quelqu'un sait-il comment le faire en utilisant JBoss7?

Malheureusement, nous n'avons trouvé aucune bonne explication sur la façon dont tout ce qui fonctionne à l'intérieur du conteneur OSGI peut être référencé en dehors de celui-ci ... Supposons que la conversion de l'application Web elle-même en bundle OSGI n'est pas nécessaire J'ai besoin. Est-ce vrai?

Merci beaucoup.

Répondre

0

Le documentation indique que le composant JavaEE peut obtenir l'injection de BundleContext en tant que @Resource. Si cela fonctionne, vous pouvez suivre votre service de module via un ServiceTracker.

J'ai vu un autre exemple d'utilisation de Vaadin avec OSGi here.

+0

En fait, j'espérais éviter toutes les références directes à bundlecontext et à service tracker, en cherchant une injection propre afin que tous les internes soient gérés par le conteneur. Quoi qu'il en soit, je vais vérifier votre suggestion et faire un rapport. –