領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多SpringSource Application Platform 的主要優勢之一是其按需供應依賴項的能力。這有兩個好處:它確保平臺記憶體佔用儘可能小,並且允許應用程式在不將所有依賴項封裝在單一部署單元(例如 WAR 檔案)中的情況下進行部署。要利用這些功能,您需要了解平臺的供應儲存庫,而這篇博文將提供這些資訊。
如您所見,有三個主要目錄:bundles、installed 和 libraries。installed 用於平臺內部使用,所以我們將重點關注 bundles 和 libraries 目錄。每個目錄包含多個子目錄,用於分隔不同型別的依賴項。當平臺啟動已部署的應用程式時,其捆綁包將被安裝到 Equinox 中。然後,平臺會向 Equinox 請求一個包含所有捆綁包未滿足依賴項的列表,並嘗試滿足它們。讓我們透過一個簡單的場景來分析這個過程。
如果平臺無法從其儲存庫中滿足某個依賴項,則會生成一條日誌訊息,詳細說明無法滿足的依賴項。有了這些資訊,您可以使用 SpringSource Enterprise Bundle Repository 來獲取所需內容。我們希望該儲存庫提供儘可能完整的捆綁包集:如果您需要某個依賴項而它不可用,請 告知我們。
如上所述,平臺使用一個記憶體中的供應儲存庫索引,該索引在啟動時被填充。此外,平臺在每次部署應用程式時還會檢查其儲存庫檢視是否最新。當您想安裝帶有新依賴項的應用程式時,只需將依賴項複製到儲存庫中的相應位置,然後部署您的應用程式。在部署處理過程中,平臺會注意到儲存庫已更新,並會重新整理其檢視。這意味著您無需花費時間重新啟動平臺即可安裝帶有新依賴項的應用程式。
平臺在建立其供應儲存庫時掃描的位置可以在 config/platform.config 檔案中進行配置。預設配置(在沒有特定配置的情況下使用)是:
"provisioning" : {
"searchPaths": [
"repository/bundles/subsystems/{name}/{bundle}.jar",
"repository/bundles/ext/{bundle}",
"repository/bundles/usr/{bundle}",
"repository/libraries/ext/{library}",
"repository/libraries/usr/{library}"
]
}
平臺將任何相對路徑解釋為相對於其安裝根目錄,並且也支援絕對路徑。花括號內的搜尋路徑中的條目只是萬用字元,例如,子系統搜尋路徑 repository/bundles/subsystems/{name}/{bundle}.jar 將在 subsystems 目錄的任何直接子目錄中找到以 .jar 結尾的任何檔案。
希望您能看到,共享部分或全部供應儲存庫在平臺之間是一個微不足道的更改。例如,要讓平臺在檔案系統的根目錄下的一個名為 shared-bundles 的目錄以及它自己的 subsystems 和 ext 目錄中進行搜尋,您只需將以下 JSON(JavaScript 物件表示法)片段新增到 platform.config 檔案中即可。
"provisioning" : {
"searchPaths": [
"repository/bundles/subsystems/{name}/{bundle}.jar",
"repository/bundles/ext/{bundle}",
"/shared-bundles/{bundle}",
"repository/libraries/ext/{library}",
"repository/libraries/usr/{library}"
]
}
透過使用此配置配置兩個或多個平臺例項,可以使它們共享 /shared-bundles 中的捆綁包。透過將所有搜尋路徑配置為指向共享位置,可以輕鬆地將此進一步發展,這樣您就不必管理每個平臺的供應儲存庫了。
我們還打算透過允許平臺配置為在嘗試滿足依賴項時選擇性地搜尋遠端儲存庫,來結合平臺按需供應和 SpringSource Enterprise Bundle Repository 的強大功能。如果在遠端儲存庫中找到依賴項,平臺將自動處理其下載和安裝。希望這將使開發者的生活變得輕鬆,尤其是在應用程式開發的早期階段,因為新依賴項會定期新增。
我們非常希望聽到您對我們正在開發的上述增強功能和平臺本身的建議:請隨時評論這篇博文、 提出 JIRA 或在我們的 論壇 上發帖。