2011-09-11 118 views

回答

6

OSGi和Java Beans之間的主要區別在於類加載器的工作方式。在標準的.jar文件或EJB中,rt.jar文件或EJB等效文件維護類路徑。此外,如果您使用容器來部署應用程序,則可能會有多個導致問題的類路徑維護機制。因此,例如,當您創建一個.war文件時,通常會創建一個包含所有.war's .jar依賴項的lib目錄。如果您的應用程序中只有一個war或.jar,則不會太糟糕。但想象一下使用100個EJB包含apache-commons的大型企業部署!你最終會得到100個運行在同一個容器中的apache-commons實例,這些實例會吸收資源。

在OSGi中,您將每個.jar文件(我們稱之爲bundle cuz,現在是OSGi)放入OSGi容器中。每個.jar文件公開(導出)希望其他軟件包使用的軟件包,並標識軟件包的版本。此外,每個捆綁包還明確聲明(導入)它需要從其他捆綁包運行的包。然後,OSGi容器將管理所有這些導出並將它們匹配到適當的導入。現在,您可以爲每個想要提供的EJB提供apache-commons。您已經取消了/ lib目錄,現在您的應用程序佔用的資源更少。

在您的問題中,您詢問了組件體系結構和模塊化體系結構之間的區別。模塊化是指將每個捆綁包設置爲自己的部署單元並允許其與其他捆綁包進行交談而不是將它們全部組合成一個大型.jar文件的過程。