2012-07-23 93 views
3

我正在爲我的web應用程序使用struts2,並且我想使用osgi體系結構進行服務和dao層。現在我不想將我的struts2動作包裝爲osgi包,但希望將服務和dao層打包爲包。現在任何人都可以告訴我,我的非osgi動作如何使用osgi包(service和dao層)。我想在web容器中部署我的struts2 web應用程序,以便在這種情況下web容器如何與osgi容器(我的服務和dao部署在哪裏)進行交互。請幫忙 。與osgi捆綁在一起的非osgi

回答

5

你需要在你的web容器和你的OSGi環境之間的所謂的「橋樑」。 費利克斯和Equinox都有這種能力,但對我來說,Felix的實施效果要好得多。

你基本上想要做的是:

  • 添加上下文偵聽到您的ServletContext
  • 開始ServletContext的時候開始的OSGi,停止時ServletContext中被摧毀。
  • 通過註冊其作爲服務
  • 存儲在ServletContext OSGi框架對象通過註冊它作爲一個屬性傳遞ServletContext的OSGi的上下文。

所以從OSGi的訪問Web上下文:檢索ServletContext的服務,並從那裏走。

從webcontext訪問OSGi:從ServletContext屬性中檢索OSGi框架並從那裏去。

檢查Felix Documentation,也是我對GitHub

+0

可以請給我一些鏈接到我可以遵循的教程嗎?這將是非常有幫助的 – user1147070 2012-07-24 10:46:46

+0

不是真的,felix bridge文檔是我能找到的。這不是一個真正的教程,但它確實解釋了它的工作原理。遺憾的是,它並不能幫助你獲得一個功能性應用程序,它只能讓你知道你有一個正在運行的OSGi框架,這個框架不能做太多。從那裏開始,唯一可以做的就是顯式安裝新的bundle(使用BundleContext.installBundle)。這隻適用於小型項目。 – 2012-07-24 16:19:35

+0

我在示例中做了什麼(在FrameworkService2類中)是通過編程方式遍歷WEB-INF/bundles目錄中的所有jar文件,並將它們安裝到框架中,因此您可以通過簡單的方式添加包。 – 2012-07-24 16:21:16

-1

做出了表率,而回這確是行不通的。爲什麼你認爲將一半的應用程序移到OSGi應該是一個好主意?要麼你應該把它全部或全部移走。

您可能能夠將struts圖層部署到war文件中並從中訪問OSGi服務。我認爲這在處女座和阿帕奇卡拉夫是可能的。它意味着加強與OSGi結構的戰爭。例如在Karaf中,你可以使用一個wab文件,這是一個帶有Manifest的war文件。