2014-02-12 10 views
5

Wenn Sie viele Anwendungen auf einem Java-Anwendungsserver bereitstellen, werden diese Anwendungen alle in derselben JVM ausgeführt, d. H. In der JVM, die beim Start des Anwendungsservers gestartet wird?Java-Anwendungsserver und JVM

Haben Sie die Möglichkeit, jede dieser Anwendungen in einer separaten JVM auszuführen? Wenn ja, warum willst du das machen?

Antwort

3

Java-Anwendungsserver ausgeführt wird in einer einzigen JVM, so dass jede App unter Java Application Server-Instanz bereitgestellt läuft in der gleichen VM wie jede andere Anwendung, während jede App eine andere Klassenlader hat

+0

Vielen Dank für Ihre Antwort Saddam. Hat das Problem mit verschiedenen Klassenladern Probleme? Was passiert, wenn App1 eine Klasse verwendet, die app2 verwendet? Wird App2 versuchen, diese Klasse nach App1 zu laden? Weiß Tomcat, dass das bereits geladen ist und versuche es nicht erneut zu laden? – Paul

+0

Jede App hat ihren eigenen gemeinsamen Speicherkontext, auf den die gleiche App zugreift, also kennt app2 nicht die in app1 geladenen Klassen und hat keinen Zugriff darauf –

+0

Sorry, nur ein bisschen verwirrt. Meinst du, es gibt einen Shared-Memory-Kontext, den Tomcat verwaltet, und jede App bekommt ihren eigenen privaten Bereich, so dass keine Konflikte beim Laden von Klassen auftreten können? Ich habe schon vorher von ClassLoading-Problemen gehört, bin mir aber nicht sicher, wie sie auftreten. Danke für Ihre Hilfe. – Paul

0

Ja, wenn der Anwendungsserver nicht ist gruppiert.

Sonst könnte es auf anderen Host-Rechner und jvm funktionieren.

+0

aber immer noch läuft jede app in der gleichen JVM des appserver richtig? Weil der Anwendungsserver einige Objektlebenszyklen der Webapp verwaltet. Aus diesem Grund gibt JEE an, dass Sie keine Threads in Ihrer Webanwendung verwenden dürfen, da dies den JEE-Vertrag brechen könnte. – Leo

+0

Nicht unbedingt ... Sie können die App asymmetrisch bereitstellen ... 1 App pro Knoten ... Dieser Mechanismus wird für jee5 App verwendet, die Stapel läuft ... Jee7 verwaltet Stapel – venergiac

+0

Ich möchte mehr darüber wissen: -) [Lernen eine neue Sache jeden Tag] – Leo

1

Ich fürchte, Sie nicht in verschiedenen JVMs ausgeführt werden kann, weil die appserver die Objekte Lebenszyklus zu verwalten haben. Darum geht es bei JEE. Aus diesem Grund gibt JEE an, dass Sie in Ihrer App keine Threads verwenden sollten, da der Container die Gleichzeitigkeit für Sie übernehmen soll.

Natürlich können Sie in einer Clusterumgebung mehrere JVMs haben, aber immer noch die gleichen für den App Server + Container sein.