2013-07-31 66 views
1

我有一個建立在頂層OSGi和Karaf服務器上的項目。對於依賴注入,我們使用的是Aries藍圖。 該項目的主體部分是一個Apache Camel路由和集成的東西,但現在我需要創建一些維護Web界面。 所以我嘗試了JSF - PrimeFaces的實現。我能夠創建一些演示,它可以在Karaf下的OSGi中工作,沒關係。將藍圖OSGi服務注入到JSF/PrimeFaces bean中

現在我想知道是否可以在這裏使用Blueprint來引用一些已經存在的OSGi服務,並將服務注入到JSF Bean中,這樣我們就可以從已經編寫的代碼中受益。

你能幫助我嗎?

回答

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

用戶/密碼:guest/guest

在您註冊自定義el-resolver後,將會評估所有el表達式其方式是在藍圖容器內搜索組件實例的id-s。如果你說在faces-config.xml中有一個值爲#{myComponent}的bean屬性,它將在BlueprintContainer內部被搜索到。