我有一個龐大的應用程序和庫的生態系統,目前作爲各種應用程序服務器(例如JBoss AS)中的.jar集合進行部署,我試圖弄清楚一套好的工具來管理依賴關係和生活 - 各種封裝的週期。OSGi和...?我用什麼來控制裝載/卸載/重新裝載包裝?
我認爲包裝的如在(至少)三種可能的狀態是:「卸載」,「未決」和「加載」,寬鬆地定義爲如下:
- 卸載:該包暫時不可用。
- 待定:程序包本身可用,但不是所有的依賴項。因此,目前無法使用。
- 加載:該軟件包可用,並且其所有依賴項都滿足。如果它是一個應用程序,它可以運行 - 如果它是一個庫,它已準備好被另一個包使用。
(也可能有幾個州,如「失敗」對於試圖加載,但沒有一些其他原因比依賴不滿意包等...)
在一包的生命週期,許多事情可能會導致包這三者之間改變狀態:
- 一個包,沒有依賴加載,並且去從卸載到加載。
- 一個包試圖加載,但並非所有的依賴都滿足;它從卸載到待定。
- 包中的狀態突然有其所有依賴關係滿足(因爲其他一些包去了狀態加載),並自動開始加載本身;從轉換到到加載。
- 包被卸載。所有依賴於現在卸載的包的加載的包從加載到等待。
- 程序包已更新爲新版本。所有相關的軟件包會自動重新加載,以訪問更新的版本。
我已經開始使用OSGi定義的依賴關係的工作 - 它與我們的編譯系統以及滾動和生產可靠的相關性信息。但是,如果我將兩個OSGi軟件包A
和B
加載到JBoss中,其中B
依賴於A
,然後卸載A
,看起來B
看起來像愉快地繼續運行。我明白,我可以用一些鉤子來控制低級別的框架事件(框架事件),但是我的蜘蛛感覺是刺痛的,說必須有更好的方法來做到這一點。
是否有一個很好的工具/框架/任何你想要調用它將讚揚OSGi在這些方面?
將此輸入爲評論而非答案,因爲問題中有很多移動部分,我沒有時間全部回答。但是:卸載軟件包不會影響從屬軟件包*,除非您執行刷新操作*。該刷新允許OSGi重新計算軟件包線路,此時具有缺失相關性的軟件包將變得無法解析。這種獨立刷新的原因是解析代價昂貴,因此應該將一系列更新/安裝/卸載組合在一起。 –
至於更高層次的工具,我建議您閱讀有關OSGi R5存儲庫和解析器規範。您應該專注於配置*組的捆綁,並且解析器規範可以幫助您計算出這些組的正確內容。您可以使用[Bndtools](http://bndtools.org)2.1版來試用解析器。 –