2009-10-15 36 views
4

我一直在調查OSGi爲我公司的軟件,但最近已被推薦看看Impala。根據其網頁,Impala是「基於Spring框架的基於Java的Web應用程序的動態模塊框架」。Impala和OSGi之間的選擇

乍看之下,看看這blog post的差異,我可以看到的主要差異是Impala比OSGi更簡單,不管理第三方組件的版本控制,並且使用得遠遠不夠(I在Stack Overflow上沒有看到任何關於它的問題)。

我想知道對Impala和OSGi有直接經驗的人(即那些比閱讀博客帖子和在線文檔更深入地調查過的人)是否對這兩者之間的實際差異有更深入的瞭解和/或建議關於每種類型的項目可能更適合或更不適合。

編輯:Springsource Slices納入比較也可能很有趣,儘管它還是一個早期的原型。一目瞭然,它似乎只能在DM服務器上運行。

回答

6

在我眼裏,沒有比較。 OSGi是一個成熟的框架,已經存在了10年,是實現當今大多數Java容器的基礎。 OSGi的採用越來越多,有書籍可供使用,是的,人們在Stack Overflow上談論它!

Impala甚至沒有發佈穩定版本,似乎是一個1人項目,儘管他現在正在尋求更多開發人員。

所以,這取決於你的標準。如果您是出於興趣調查技術,那麼我認爲沒有任何問題用Impala編寫。如果你正在尋找公司未來的產品,那麼我認爲這將是專業疏忽。

10

Impala的模塊化方法在控制模塊之間的共享方面非常薄弱。問題在於Impala仍遵循舊式的J2EE風格的分層加載方法。

任何人都可以編寫一個模塊系統來限制跨模塊的類的可見性。困難的部分是如何重新引入模塊之間的依賴關係,以便另一個模塊可以看到來自一個模塊的特定類和接口。在OSGi中,我們通過導出和導入包來實現這一點,所以我們有一個非等級依賴關係圖。

在Impala中,如果您想查看其他模塊中的類,那麼您的模塊必須是該模塊的子代或後代。也就是說,模塊只能看到他們自己的類和他們祖先的類。現在,如果您想與兄弟模塊共享某些類(例如,您使用的庫),則必須將該庫移動到共享祖先的類路徑中。在最壞的情況下,你必須把它移到根模塊。現在該庫對所有其他模塊都可見,無論他們是否需要它!事實上,如果另一個模塊想要使用不同版本的庫,他們將不會這樣做。

如果您只是在每個使用該庫的地方都有該庫的副本,那麼您就無法使用該庫的模塊相互通信。當他們嘗試在彼此之間傳遞對象時,他們將得到ClassCastExceptions。

如果兩個Web應用程序需要使用相同的庫,則J2EE中存在類似的問題。通常,J2EE開發人員只是複製庫,但是這會產生無法相互通信的「筒倉」應用程序。這根本不是構建模塊化軟件的方法。

史蒂文的觀點似乎也是中肯的。據我所知,除了作者之外,沒有人使用Impala。