1

トップOSGiおよびKarafサーバー上に構築されたプロジェクトがあります。依存性注入には、Aries Blueprint を使用しています。プロジェクトの主要部分は Apache Camel のルートと統合ですが、今はメンテナンス Web インターフェイスを作成する必要があります。そこで、JSF - PrimeFaces の実装を試してみます。Karaf の下の OSGi で動作するデモを作成できました。問題ありません。

ここでブループリントを使用して既存の OSGi サービスを参照し、そのサービスを JSF Bean に注入することが可能かどうかを知りたいと思います。

助けてくれませんか?

4

1 に答える 1

1

これを次の方法で解決しました。

  • 次のようなリスナーを作成しました。
    • 同じバンドルにアタッチされた BlueprintContainer サービスを追跡する ServiceTracker を作成します
    • servicetracker を ServletContext 属性に入れます
  • この ServiceTracker を使用する ELResolver を作成し、利用可能な BlueprintContainer がある場合は、その getComponentInstance を使用して値を取得します
  • リスナーは、アプリケーションの初期化中に servicetracer を開き、アプリケーションの破棄中に閉じます

リスナー クラス: https://source.everit.biz/svn/everit-util/trunk/core/src/main/java/org/everit/util/core/servlet/ServiceLoaderListener.java

EL リゾルバー クラス: https://source.everit.biz/svn/everit-util/trunk/core/src/main/java/org/everit/util/core/el/OsgiELResolver.java

ユーザー/パス: ゲスト/ゲスト

カスタム el-resolver を登録すると、すべての el-expression が、コンポーネント インスタンスの ID が blueprint コンテナー内で検索される方法で評価されます。faces-config.xml に値 #{myComponent} を持つ bean-property があると言う場合、それは BlueprintContainer 内で検索されます。

于 2013-07-31T11:47:13.630 に答える