2014-02-12 150 views
5

將許多應用程序部署到Java應用程序服務器時,這些應用程序是否都運行在同一個JVM中,即應用程序服務器啓動時啓動的JVM?Java應用程序服務器和JVM

您是否可以選擇在單獨的JVM中運行每個應用程序?如果是這樣,你爲什麼要這樣做?

回答

3

Java應用服務器在單個JVM上運行,所以在Java應用服務器實例部署的每一個應用程序在同一個虛擬機運行的所有其他應用程序,而每個應用程序都有一個不同的類加載器

+0

謝謝你的迴應薩達姆。有不同的類裝載機會導致問題嗎?如果app1使用app2使用的類,該怎麼辦?在app1之後,app2會嘗試加載這個類嗎? Tomcat知道這個已經加載了,而不是再次嘗試加載它嗎? – Paul

+0

每個應用程序都有自己的共享內存上下文,這是由同一個應用程序訪問,所以app2不知道在app1中加載的類,並沒有訪問它 –

+0

對不起,只是有點困惑。你的意思是說有一個Tomcat管理的共享內存上下文,每個應用程序都有它自己的私有區域,所以不會發生類加載衝突?我之前聽說過類加載問題,但不知道它們是如何發生的。謝謝你的幫助。 – Paul

0

如果應用程序服務器是不是有集羣。

否則它可以在不同的主機和jvm上工作。

+0

但仍然,每個應用程序運行在同一個應用程序服務器的JVM權利?因爲應用程序服務器管理webapp的一些對象生命週期。這也是爲什麼JEE聲明你不能在你的webapp中使用線程,因爲它可能會破壞JEE合約。 – Leo

+0

不一定...您可以不對稱地部署應用程序...每個節點有1個應用程序...此機制用於jee5應用程序批量運行... jee7管理批次 – venergiac

+0

我想了解更多關於此的信息: - )[每天學習一件新事物] – Leo

1

恐怕你不能在不同的JVM上運行,因爲應用程序服務器需要管理的對象的生命週期。這就是JEE的全部內容。另外,這就是爲什麼JEE聲明你不應該在你的應用中使用線程,因爲你希望容器爲你處理併發性。

當然,在集羣環境中,可以有多個JVM,但對於應用服務器+容器仍然是相同的。

相關問題