2011-07-24 40 views
4

我正在使用Tomcat 7作爲servlet容器,並且我有兩個war文件(Eclipse中的兩個項目)。問題是,我想在兩個已部署的war文件之間共享類。 但據我所知,這對於Tomcat/Servlet規範來說是不可能的。兩個已部署的Web應用程序似乎都是相互隔離的。所以我從JBoss上讀了一個新手,作爲一個應用程序服務器,我可以在其中部署ear文件(這樣我可以將多個war文件放入其中),然後我可以在它們之間共享類?在Tomcat中的war文件之間共享Java類?

所以我的問題:你是否同意我的說法,是否可以用JBoss來做到這一點?我是否必須進行更改,或者我是否可以輕鬆地將它們放在耳朵文件中,然後使用JBoss進行部署並且它可以工作?

最好的問候,蒂姆。

+0

我是新手與JBoss應用服務器進行。所以不知道JBoss是否可行。但是,你可以在tomcat中共享jar。您需要配置catalina.properties「shared.loader」屬性。但是,是的,你不能在Tomcat中分享來自兩場不同戰爭的課程。 – Kowser

+0

但在JBoss中,我可以共享來自兩個不同戰爭的課程? – Tim

+0

是的,看我的答案。 – home

回答

3

有兩個簡單的選項。兩者都要求您在單獨的項目(JAR)中定義共享類,我們稱之爲共享。現在,當涉及到部署你有2種選擇:

  1. 副本SHARED.jar到Tomcat的lib文件夾,即可大功告成。
  2. 參考SHARED.jar在您的WebApp中,當從eclipse導出您的WAR時,工具將創建JAR,將其放入WebApp的WEB-INF/lib文件夾並創建WAR(請參閱屏幕截圖)。

如果使用選項#1,理解在WebApp類加載器(Tomcat系統類加載器)之間共享相同的類很重要,所以只有在想共享狀態不同的WebApps(例如Singletons)。

BTW:該屏幕截圖使用Eclipse 3.6 + WTP ...

enter image description here

+0

嗯,不知道...你需要Tomcat的解決方案,而不是JBoss,對吧? – home

+0

如果Tomcat有可能,這可以。但是如果我有兩場戰爭,那麼我必須使用JBoss,它會起作用嗎?然後我不知道像JBoss這樣的完整的應用服務器和像Tomcat這樣的servlet容器之間的區別,結合這個問題。我認爲在一個耳朵文件中,我可以放幾個罐子和戰爭,他們將作爲一個大應用程序在JBoss中運行,而在Tomcat中,我無法做到這一點。 – Tim

+0

的確,在Tomcat中,你必須部署幾個WAR。它完全受支持,因此您可以在一個Tomcat實例(JVM)中運行10個WAR。 – home