2010-04-01 57 views
1

比方說,我希望讓我的開發人員將他們war文件上傳到Web應用程序(不是應用程序服務器本身)對我們的內聯網運行,是Web應用程序將隨後運行這些戰爭,如果他們單獨部署在我們的J2EE容器中的應用程序。是否有可能在沒有單獨的J2EE容器部署的情況下虛擬化war文件執行?

換句話說,我們實際上並沒有部署wars作爲容器單獨的應用程序 - 它們只運行並排側這一個Web應用程序,其作用類似於一個J2EE容器內

這可能嗎?

類似於war虛擬化應用程序?

回答

0

您可以開始創建ClassLoader,展開.war,加載類並將請求發送到您的應用程序到正確的子Web應用程序。這看起來像重新發明輪子(考慮到應用服務器已經這樣做),並且可能非常複雜。

另一方面,這與portlets的工作方式看起來非常相似。 Portlet打包成.war文件,然後由門戶使用。例如,在Liferay門戶中,您可以從liferay門戶(而不是應用程序服務器本身)上載Portlet .war。然後,Liferay將把上傳的.war文件放在應用的自動部署目錄中。服務器,然後將像普通的Web應用程序一樣部署。然後是從入口向正確的Portlet Web應用程序發送請求的Portlet橋,等等。這可能值得仔細看看。

我不知道你的要求,但我會明確地嘗試保持簡單,因爲這樣的東西可能會變得非常複雜。但是,你可以:

  • 讓用戶從您的應用程序上傳.war
  • 操縱.warweb.xml,以確保背景是一樣的東西/ParentApp/ChildApp
  • 保存修改.war到自動部署文件夾,讓應用程序。服務器部署它

這將提供您可以從您的父級webapp部署子webapp的錯覺。

+0

這很好。你真的瞭解你的東西。非常感謝。 – Smith 2010-04-02 06:01:14

0

你有什麼特別的原因讓你需要他們去跑另一場戰爭的背景嗎?聽起來就像你需要做什麼來實現你的目標 - 如果你在戰爭中運行它可能是不可能的 - 構建一場戰爭,然後採取他們上傳的戰爭,並使用API​​部署Web服務器的戰爭暴露部署戰爭,從而讓它作爲頂級的網絡應用程序運行。我不認爲有任何其他的方式來做到這一點。

相關問題