我是新來的OSGi和目前正試圖用它來創建模塊化的Web應用程序。 Web應用程序本身是使用Vaadin 6 創建了Vaadin網站這個wiki文章我以下:Creating Modular Vaadin application with OSGI如何在JBoss中使用OSGI服務Vaadin Web應用程序運行的AS內部7
步驟到目前爲止,我所做的: - 對於模塊服務創建OSGi包(簡單的服務,跟蹤其他OSGi模塊又名插件)並將其部署到jboss。 - 創建vaadin應用,只是一個存根。應該
OSGI的服務將被注入到Servlet類,如:
@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);
}
}
現在的問題 - 如何服務可以在這裏注入?目前我只是獲得NULL指針,所以DI不起作用。從上面的文章提到:
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.
據此Glassfish會在內部和自動完成所有的魔法。任何人都知道如何使用JBoss7完成它?
不幸的是沒有找到任何好的(對於新手)解釋如何在OSGI容器內部運行的任何東西可以引用它之外...假設不需要將Web應用程序本身轉換爲OSGI包,以實現什麼我需要。這是真的?
非常感謝。
我其實希望避免所有直接引用的BundleContext和服務跟蹤,找一個乾淨的注射,因此所有的內部是由容器管理。無論如何,我會檢查你的建議並回報。 –