2012-03-29 12 views
0

Ich habe durch die Aktualisierung jeder Webapp META-INF/context.xml zwischen getrennten Webapps Erfahrung Nachsendeanträge hatte crossContext = „true“ enthalten.Tomcat Cross-Service-Anfrage Weiterleitung?

Allerdings habe ich eine Situation, jetzt, wo ich Webapps in dem gleichen Laufe tomcat eingesetzt habe, aber in völlig getrennten Bereichen. Auszuarbeiten, in server.xml des Kater:

  • app1 verwendet Dienst mit dem Namen „app1Svc“ mit seinen eigenen Steckern (damit auf separate Ports ausgeführt wird), so deshalb seine eigene Motor, Realm, und Host.
  • app2 hat eine ähnliche Einrichtung, mit einem distince Dienst namens „app2Svc“ mit seinen eigenen Stecker, etc.

Wenn ich diese webapps im gleichen Host laufen, kann ich zwischen den beiden über ihre Kontextanfragen versenden .xmls crossContext = "true" und Abrufen des relevanten Servlet-Kontextes zum Weiterleiten der Anfrage an (gemäß Tomcat not able to get ServletContext of another webapp).

Dies ist jedoch möglich, zwischen zwei webapps zu versenden, die im Wesentlichen auf separaten Ports laufen müssen (ohne vor tomcat httpd, etc. zu jagen Putting)?

Antwort

0

nicht in nativer Weise, die wahrscheinlich gut ist.

können Sie dann Zugriff auf HTTP-Anfragen von einem zum anderen durch die Erzeugung. Zu diesem Zweck müssen Sie jede von ihnen einige Funktionen über http (vielleicht RESTfully) offenlegen. Um die Anfragen zu stellen, können Sie Apache HTTP-Komponenten verwenden, oder einfach URL.openConnection(). Sie müssen lediglich die URL (+ Port) anderer Apps für die Anwendung angeben, damit sie die Aufrufe vornehmen können.

+0

Ich nehme an, dass funktionieren würde, es sei denn das bedeutet, dass ich besetzt zwei Zuhörer Threads würde eine einzige Anforderung zu bedienen, die nicht sehr optimal ist. Dies würde auch alle Anfrageattribute verlieren, die bereits auf der Anfrage eingestellt sind (was bei der Standardweiterleitung nicht der Fall ist, glaube ich). – drobert

+0

ja, Sie müssten alles manuell übertragen. – Bozho

+0

Können Sie Dienste beider Servlets über RMI verfügbar machen? Dies kann für die Kommunikation zwischen Diensten effizienter sein als eine vollständige HTTP-Anforderung, wenn Sie sich in einem lokalen LAN befinden. Wenn Sie sich in derselben JVM befinden, haben Sie andere Möglichkeiten, wie JNDI, oder - wenn Sie Ihren Server programmatisch starten - stellen Sie Ihre eigene JVM-weite Registrierung von Diensten zur Verfügung. –