2014-11-04 76 views
1

以下場景是否有框架或某種解決方案?從遠程位置動態加載罐子

我有一個運行於Tomcat服務器上的webapp。當啓動我的應用程序時,我想下載一些位於完全不同的地方的罐子。像外部連接服務器或其他東西。在那些罐子裏,我所有的商業邏輯都需要在春天注入。

爲什麼我想要這樣的東西?我的應用程序安裝在很多不同的位置。要在所有安裝中輕鬆獲得最新版本的代碼,我只想更新1個位置,並且所有應用程序在重新啓動後都會更新。

+1

可能dup? http://stackoverflow.com/questions/22569710/how-can-i-automatically-deploy-a-war-from-nexus-to-tomcat – PaulProgrammer 2014-11-04 17:10:51

回答

1

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

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

這是一個未經考驗的建議:

  1. ClassLoader擴展Tomcat的WebappClassLoader
  2. 添加URLClassLoader成員,並在構造函數(或類似start()LifecycleListener事件之一)
  3. 覆蓋初始化所有方法都調用相同簽名的超類方法,並在您使用的URLClassLoader中調用相同的方法。該順序您諮詢或者super.whateverurlClassLoader.whatever是由你:閱讀Servlet規範以確定要如何在你的web應用的META-INF/context.xml文件中定義<Loader>做事
  4. 安裝您的自定義ClassLoader

如果您需要上述任何幫助,請撥打Tomcat users' mailing list

編輯2014年11月4日

注意,我認爲使用URLClassLoader做這種事情是脆弱的,容易出錯,而且可能是一個壞主意。相反,請修復部署過程,以便跨羣集更新Web應用程序更容易。您可以使用Tomcat的「農場網絡部署者」來完成這些任務,或者使用其他解決方案。但是通過網絡加載課程可能會讓你的生活複雜化,並在某些情況下導致一些奇怪的不可重複行爲。

0

通常,這是在使用rsync腳本進行部署期間完成的,以便將部署工件分發到羣集。

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