搶先一步
VMware 提供培訓和認證,為您的進步加油助力。
瞭解更多SpringSource Application Platform 的主要優勢之一是它能夠按需配置依賴項。這樣做有兩方面的好處:它確保了平臺的記憶體佔用儘可能小,並且允許在部署應用程式時無需將所有依賴項封裝在一個龐大的部署單元中(例如 WAR 檔案)。要利用這些功能,您需要了解平臺的 provisioning repository,本部落格旨在提供這方面的說明。
當平臺啟動已部署的應用程式時,其 bundle 會安裝到 Equinox 中。然後平臺會向 Equinox 請求所有 bundle 的未滿足依賴項列表,並嘗試滿足它們。讓我們透過一個簡單的示例場景來分析這個過程。
如果平臺無法從其 repository 滿足某個依賴項,則會生成一條日誌訊息,詳細說明無法滿足的依賴項。有了這些資訊,您就可以使用 SpringSource Enterprise Bundle Repository 來獲取您需要的東西。我們希望 repository 能夠提供儘可能完整的 bundle 集:如果您需要某個依賴項但它不可用,請告知我們。
如上所述,平臺使用其 provisioning repository 的記憶體索引,該索引在啟動期間填充。除此之外,平臺在部署應用程式時還會檢查其對 repository 的檢視是否最新。當您想要安裝帶有新依賴項的應用程式時,只需將依賴項複製到 repository 中相應的位置,然後部署您的應用程式即可。在部署處理過程中,平臺會注意到 repository 已更新並重新整理其檢視。這意味著您無需在每次安裝帶有新依賴項的應用程式時花費時間重新啟動平臺。
平臺在建立其 provisioning 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}"
]
}
任何相對路徑都被平臺解釋為相對於其安裝根目錄,但也支援絕對路徑。搜尋路徑中花括號內的條目只是萬用字元,例如,subsystems 搜尋路徑 repository/bundles/subsystems/{name}/{bundle}.jar 將在 subsystems 目錄的任何直接子目錄中找到名稱以 .jar 結尾的任何檔案。
希望您可以看到,在不同平臺之間共享部分或全部 provisioning repository 是一個微不足道的更改。例如,要讓平臺在其自身的 subsystems 和 ext 目錄中以及檔案系統根目錄中名為 shared-bundles 的目錄中進行搜尋,您只需將以下 JSON (JavaScript Object Notation) 程式碼片段新增到 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 中的 bundle。這可以很容易地更進一步,將所有搜尋路徑配置為指向共享位置,這樣您就根本不需要管理每個平臺的 provisioning repository 了。
我們還打算透過允許平臺配置為在嘗試滿足依賴項時可選地搜尋遠端 repository,來結合平臺按需配置和 SpringSource Enterprise Bundle Repository 的強大功能。如果在遠端 repository 中找到了依賴項,平臺將自動處理其下載和安裝。希望這能讓開發人員的生活更輕鬆,尤其是在應用程式開發的初始階段,因為新依賴項會定期新增。
在我們開發上述增強功能以及平臺本身時,我們很想聽聽您的建議:請隨時在本部落格文章下發表評論、提交 JIRA,或在我們的論壇上發帖。