2012-04-20 114 views
7

我需要重用最初爲Eclipse RCP應用程序(即裝入Eclipse插件/ OSGi包)開發的代碼。將OSGi嵌入到OSGi的servlet容器或servlet容器中?

讀了很多博客文章,文章,維基等我結束了在該點之後,我知道:

  1. OSGi框架(Equinox在我的情況)可以嵌入在一個servlet容器(Tomcat 7在我的情況下)
  2. 或者Tomcat可以嵌入到OSGi框架中。

Equinox建議第二個選項更容易。但對於生產他們推薦1.我不確定爲什麼。在哪種情況下,爲什麼更好?

我是一個非常豐富的Tomcat用戶,將嵌入的Tomcat在春分改變重管理呢?或者換句話說,嵌入Equinox的Tomcat會有什麼不同?

回答

5

首先,代碼除了清單之外是否還有任何OSGi/Equinox依賴項?如果不是,它應該在普通的Tomcat中工作得很好。

我的理解是,將Tomcat嵌入Equinox將會改變對它的管理。您的文件夾佈局,包括server.xml和catalina.sh將消失。相反,您可能會通過配置管理員來管理Equinox應用程序。

其次還有兩種用於OSGi的servlet編程和部署模型。首先是HttpService,在其中以編程方式註冊您的servlet和資源(您也可以通過擴展點完成此操作)。在這種情況下,您的應用程序只是一個捆綁包的集合。但是你不能使用過濾器。第二個是Web應用程序包(WAB),它是一個OSG化的WAR。

+2

我完全忘了,如果你正在尋找進入春分運行Tomcat你可能會想看看[Eclipse的處女座(http://www.eclipse.org/virgo/),而不是親自構建。 – 2012-04-23 05:44:44

4

Apache Sling的maven-launchpad-plugin可以生成一個嵌入OSGi框架(Apache Felix作爲標準,不確定是否支持其他框架)和您定義的一組bundle的war文件。可以用來在Tomcat中運行OSGi應用程序。

5

我們一直在做,使用碼頭從非的OSGi OSGi規範在春分相當複雜的Web應用程序的遷移。我已經瞭解了一些可能會以某種方式推動您的決定的事情: - 如果您選擇使用OSGi作爲運行應用的框架,例如選項#2,你的應用程序消耗的所有東西都必須是OSGi包。商業圖書館的任何外部或第三方。如果你使用大量的開源代碼,那麼很容易找到捆綁包。或者如果你找不到捆綁包,你可以使用BNDTools自行綁定它們。儘管如此,這種方法可能會耗費時間來找出所有適當的依賴關係,並且可能的類加載器問題需要繞過OSGi - 將OSGi嵌入到Tomcat中的方法,這看起來似乎更安全和更簡單。雖然我不確定在這種情況下你會從WAB中獲益。

的WABS有趣的好處BTW之一是,你可以很容易的WebApp之間共享代碼,因爲它們被部署爲包,你可以簡單地通過它們導出/導入包。今天非OSGi部署不太可能的東西。