0

私は OSGI を初めて使用し、現在それを使用してモジュラー Web アプリケーションを作成しようとしています。Web アプリケーション自体は、Vaadin 6 を使用して作成されます。Vaadin Web サイトの次の WIKI 記事に従います。Creating Modular Vaadin application with OSGI

これまでに行った手順: - モジュール サービス (プラグインとも呼ばれる他の osgi モジュールを追跡する単純なサービス) 用の OSGI バンドルを作成し、jboss にデプロイしました。- 作成された vaadin アプリケーション、単なるスタブ。

OSGI サービスは、次のようにサーブレット クラスに注入されるはずです。

@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 コンテナー内で実行されているものを外部で参照する方法について、(初心者向けの) 適切な説明が見つかりませんでした。これは本当ですか?

どうもありがとう。

4

1 に答える 1

0

ドキュメントには、JavaEE コンポーネントが BundleContext を として注入できると記載されています@Resource。それが機能する場合は、ServiceTracker を介してモジュール サービスを追跡できます。

Vaadin を OSGi と一緒に使用する別の例をここで見ました。

于 2013-01-23T10:14:51.373 に答える