Frage

Ich schreibe eine JCA Resource Adapter. Ich bin auch, wie ich gehen und versuchen, das Verbindungsmanagement Teil der JCA-Spezifikation vollständig zu verstehen. Als Gedankenexperiment, so tun, dass der einzige Kunde dieses Adapters ein Swing-Java Application Client auf einer anderen Maschine befinden wird. Man nehme auch an, dass der Ressource-Adapter mit dem „Enterprise Information System“ (EIS) über das Netzwerk als auch kommunizieren.

Als ich die JCA-Spezifikation zu verstehen, wird die Rar-Datei auf dem Anwendungsserver bereitgestellt. Der Anwendungsserver erstellt die Rar-Datei-Implementierung des ManagedConnectionFactory- Schnittstelle. Sie fordert dann eine Verbindung Fabrik zu erzeugen, die das opake Objekt ist, das für den Benutzer zur Verwendung auf JNDI eingesetzt ist, eine Verbindung zu der Ressource zu erhalten. (Im Fall von JDBC, die Verbindungs-Factory ist eine javax.sql.DataSource.)

Es ist eine Anforderung, dass der Verbindungs-Factory einen Verweis auf die Applikationsserver geliefert Connectionmanager behalten, was wiederum erforderlich ist Serializable zu sein. Dies macht Sinn - um für die Verbindung Fabrik in JNDI gespeichert werden, es serialisierbar sein müssen, und damit sie einen Verweis auf die Connectionmanager zu halten, muss die Connectionmanager auch serialisierbar sein. So fein, dieses kleine Objekt Diagramm in der Anwendung des Kunden JNDI-Struktur installiert wird.

Dies ist, wo ich bekommen mulmig starten. Ist der Connectionmanager - das Stück durch den Anwendungsserver geliefert, dem Griff-Verbindungsmanagement sollte, teilen, Pooling, etc .-- ganz gegenwärtig auf dem Client an dieser Stelle? Eines der Arbeitsplätze ist Managed Instanzen und ein Managed ist nicht erforderlich sein Serializable und die Benutzerverbindung Greift es vends ist auch nicht erforderlich sein Serializable zu erstellen. Das legt nahe, mir, dass die ganzen Verbindungspooling Maschinen an das Anwendungs-Client ausgeliefert Großhandel und stopften in seinen JNDI Baum.

bedeutet das alles, dass JCA Wechselwirkungen von der Client-Seite Bypass des serverseitigen Baugruppe des Anwendungsservers? Wo sind die Netzwerkgrenzen in der JCA API?

War es hilfreich?

Lösung

  

bedeutet das alles, dass JCA   Interaktionen von der Client-Seite   Bypass die serverseitige Baugruppe von   der Anwendungsserver? Wo sind die   Netzwerkgrenzen in der JCA API?

AFAIK, ja. Es wird eine lokale JNDI sein und die lokale JNDI lokale Verbindungen zurück. Gleiches gilt, wenn gilt für andere Art von Objekt in der JNDI, eine solche Konfiguration Wert (env-entry). Natürlich, wenn Sie ein EJB nachzuschlagen, die Fabrik liefert einen Proxy für den Remote-Bohne, aber ist die JNDI noch lokale meines Wissens.

Der Kunde bettet einen eigenen Pool. Das bedeutet, dass, wie Sie wies darauf hin, dass die Verbindungen in dem Client erhalten die serverseitige Maschinen entkommen.

Es wird noch schlimmer, wenn wir mit verteilten Transaktionen zu spielen beginnen. Ein Kunde kann eine UserTransaction erhalten zu starten und verteilte Transaktionen auf der Client-Seite zu stoppen (nicht alle App. Server unterstützt dies, obwohl). Der Transaktionskontext wird während Anrufe zu fernen EJB propagieren sein. Eine verteilte Transaktion kann dann Spanne clientseitige Anschlüsse und serverseitige Verbindungen.

Nach der J2EE-Philosophie, ein Anwendungs-Client sollte in der Regel keine Transaktionen verwenden und Verbindung erhält direkt; es sollte nur mit Remote-EJB kommunizieren.

Die Spezifikationen sind wirklich nicht klar, über komplizierteres Szenario und es gibt nicht so viele Informationen um. Die Spezifikation zum Beispiel tun Mandat nicht den Anwendungsserver die UserTransaction an den Client zu belichten.

Was ich schrieb hier gilt für Glassfish zumindest, aber ich würde sich nicht auf eine konsequente Umsetzung solcher Merkmale in allen Anwendungsservern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top