Ich bin sehr neu in Java EE und versuche, das Konzept der lokalen Schnittstellen und Remote-Schnittstellen zu verstehen.
In den ersten Versionen der EJB-Spezifikation wurden EJBs als Remote-Komponenten "angenommen", und die einzige Möglichkeit, sie aufzurufen, bestand darin, einen Remote-Aufruf unter Verwendung der RMI-Semantik und des damit verbundenen Overheads (Netzwerkaufruf und Objektserialisierung für jeden) durchzuführen Methodenaufruf). EJB-Clients mussten diese Leistungseinbußen auch dann zahlen, wenn sie sich in derselben virtuellen Maschine wie der EJB-Container befanden.
Später stellte Sun fest, dass die meisten Geschäftsanwendungen EJBs tatsächlich nicht auf einer anderen Ebene verteilten, und korrigierte die Spezifikation (in EJB 2.0), indem sie das Konzept lokaler Schnittstellen einführte, sodass Clients, die in derselben virtuellen Maschine mit dem EJB-Container zusammengeschlossen sind, EJBs mithilfe von aufrufen können direkter Methodenaufruf unter vollständiger Umgehung der RMI-Semantik (und des damit verbundenen Overheads).
Mir wurde gesagt, dass einer der großen Vorteile von Java EE darin besteht, dass es einfach zu skalieren ist (was meiner Meinung nach bedeutet, dass Sie verschiedene Komponenten auf verschiedenen Servern bereitstellen können).
Java EE kann skaliert werden, dies bedeutet jedoch nicht unbedingt das Verteilen von Komponenten. Sie können eine Web + EJB-Anwendung in einem Cluster ausführen, ohne die Webschicht und die EJB-Schicht zu trennen.
Sollten Sie Remote-Schnittstellen verwenden, wenn Sie erwarten, dass Ihre Anwendung unterschiedliche Komponenten auf unterschiedlichen Servern enthält? Und lokale Schnittstellen verwenden, wenn sich Ihre Anwendung nur auf einem Server befinden soll?
Ich würde es so formulieren: Verwenden Sie Remote-Schnittstellen, wenn sich der Client nicht in derselben JVM befindet (dies bedeutet nicht, dass nur ein Server / eine JVM verwendet wird).
(...) Verwenden Sie zunächst lokale Schnittstellen und aktualisieren Sie gegebenenfalls schrittweise auf Remote-Schnittstellen.
Ich würde wahrscheinlich mit lokalen Schnittstellen beginnen. Und wie bereits angedeutet, ist das Wechseln zu Remote-Schnittstellen nicht immer obligatorisch (Sie können eine zusammengestellte Struktur gruppieren ).
Ich schlage vor, die unten genannten Ressourcen zu überprüfen (die beiden ersten sind ziemlich alt, aber immer noch relevant, die beiden anderen sind neuer).
Ressourcen