2012-07-05 35 views
4

我是一個新手,閱讀WABs,但希望清除基本區別 - 我的意思是使用嵌入在tomcat中的osgi並製作WAR與製作WAB?WAB和WAR之間的差異

什麼時候應該考慮每個選項?

1)嵌入的Tomcat OSGI

2)在tomcat OSGI

3)採用WAB

+0

還有第四種選擇:讓你的OSGi服務提供一個servlet服務'<提供接口=「javax.servlet.Servlet」/>'將它們註冊到你的OSGi容器的HTTP服務中。這是普通的OSGi,不需要WAR/WAB工件。 – maasg

+0

@maasg,「白板」模式不適用於所有OSGi HttpService實現。它只支持少數而不是標準。但是,這是一個很好的模式。 – Gunnar

回答

7

的OSGi嵌入容器(不僅是Tomcat的!)很可能當你唯一的選擇被強制爲傳統的JavaEE WAR部署模型,即IT部門操作容器,並且只能將WAR文件部署到該部署模型。這將在Web應用程序中引導整個OSGi框架,並允許在Web應用程序內進行模塊化開發。然後,Web應用程序將被組合爲一組OSGi包。它也可用於將現有的舊版Web應用程序遷移/傳輸到OSGi模塊中。但是,這將是具有挑戰性的。

我想將第二種方法(OSGi中的Tomcat)稱爲純OSGi方法。 Tomcat或任何其他Servlet容器(例如Jetty)可以在OSGi框架中作爲一個包(或一組包)來部署。 OSGi框架是容器。您沒有完全分離Web應用程序了。可以相交。一些軟件包/模塊可能會實現Web功能,而其他軟件可能不能。核心功能(核心軟件包)可以被其他網絡軟件包重複使用。

第三個選項是OSGi新規範工作的結果。基本上,它是一個帶有OSGi包清單的Web應用程序。因此,整個Web應用程序可以作爲單個OSGi包在任何具有WAB支持的框架上部署。從技術上講,該包可能會作爲Web應用程序部署到Servlet容器。但它可以訪問BundleContext。這允許Web應用程序與運行在相同框架中的其他包或Web應用程序進行交互操作。

+2

很好的答案。請注意,工件可以是WAR *和* WAB,因此可以部署到OSGi和傳統容器。這可能有助於遷移。 –

相關問題