簡體   English   中英

從遠程位置動態加載jar

[英]Dynamically loading jars from remote location

是否有針對以下情況的框架或某些解決方案。

我說Tomcat服務器上運行着一個Web應用程序。 啟動我的應用程序時,我想下載一些完全不同的jar。 像外部連結服務器之類的東西。 在這些罐子里,是我所有需要注入春天的業務邏輯。

我為什么要這樣? 我的應用程序安裝在許多不同的位置。 為了在所有安裝中輕松獲得最新版本的代碼,我只想更新1個位置,並且所有應用程序在重新啟動后都會更新。

您的應用程序將需要使用自定義的ClassLoader來執行此操作。

好消息是您不必自己編寫:您可以使用Java內置的java.net.URLClassLoader 壞消息是您必須將其連接到Tomcat,這可能需要一些代碼。

這是未經測試的建議:

  1. 編寫擴展Tomcat的WebappClassLoaderClassLoader
  2. 添加一個URLClassLoader成員,並在構造函數中對其進行初始化(或諸如start()類的LifecycleListener事件之一)中
  3. 覆蓋所有方法以調用具有相同簽名的超類的方法,並在您正在使用的URLClassLoader中調用相同的方法。 您查詢super.whateverurlClassLoader.whatever的順序由您決定:閱讀servlet規范以確定您想做的事情
  4. 通過在Web應用程序的META-INF/context.xml文件中定義<Loader>來安裝自定義ClassLoader

如果您需要上述任何方面的幫助,請轉到Tomcat用戶的郵件列表

編輯2014-11-04

請注意,我認為使用URLClassLoader進行此類操作非常脆弱,容易出錯,並且可能是一個壞主意。 相反,請修復您的部署過程,以便更輕松地跨集群更新Web應用程序。 您可以將Tomcat的“農場Web部署程序”用於此類任務,或使用其他解決方案。 但是在網絡上加載類可能會使您的生活復雜化,並在某些情況下導致某些奇怪的不可再現的行為。

通常,這是在部署過程中使用rsync腳本或類似的腳本將部署工件分發到集群中完成的。

您也許可以配置Tomcat提供的WebappClassLoader以從遠程位置加載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM