2014-02-14 43 views
0

我的意思是某些方面,例如通過不同類加載程序隔離不同版本的相同工件,如.Net允許通過不同AppDomain隔離程序集。OSGI是否解決了Java中AppDomain的缺失?

+1

您的問題目前需要知道.Net AppDomains和OSGi。這種技能組合很少。我對OSGi有很多瞭解,但對.Net很少,所以如果你描述了Java中缺少AppDomain的特定功能,那麼我可以告訴你OSGi是否合適。 –

回答

1

我不這麼認爲。 OSGi是一種在結構上定義和實施應用程序不同部分之間的邊界和依賴關係的方法。

它不是一個應用程序容器,其中不同的應用程序可以或多或少不知道彼此,比如像Tomcat這樣的servlet容器。

有兩種解決方案,例如Apache Karaf,它基本上是基於OSGi的應用程序容器。在這些容器中,每個應用程序都有自己的OSGi環境。

+0

等等,卡拉夫還沒有實現OSGi子系統,是嗎?那麼在什麼情況下,Karaf提供了對核心OSGi提供的「應用程序」的額外隔離? –

+0

我認爲卡拉夫3.0與其最新版本的白羊座可以做到這一點(但還沒有嘗試過)。我的意思是你可以部署獨立的osgi子實例,也就是說,如果我錯了,就糾正我,類似於.Net AppDomains。 –

+0

我不這麼認爲。我相信(但可能是錯誤的),.NET中的AppDomains不僅包含模塊加載隔離,還包括內存隔離,CPU使用等。由於JVM的限制,OSGi中沒有這樣的東西。 –

0

@弗蘭克

「阿帕奇Karaf,這基本上是一個基於OSGi應用程序容器,在這些容器中的每個應用程序都有自己的OSGi環境。」

我不這麼認爲。在Karaf(或ServiceMix)中部署OSGi組件時,無法指定特定的應用程序。例如比如:osgi:install componentX.jar應用程序1

所以看起來好像沒有應用程序邊界。所有部署在同一個SMX或Karaf實例中的OSGi模塊可以互相看到並導入彼此的功能。

對於SMX,這是一個ESB,這很爛....

任何人都可以證實這一點?

另外...一些OSGi模塊只是庫,一些是應用程序(例如,聽一個端口做某事)。

我認爲一切都在1個JVM上運行...

有人請確認這也...

AppDomain的是別的東西。 OSGi不提供這個概念。我們需要它嗎?

+0

卡拉夫有一個'實例'和'特徵'的概念,它提供了邊界。與AppDomain不同。我不確定每個實例都有它自己的JVM。 – atam

相關問題