Frage zu JNDI / RMI

Status
Nicht offen für weitere Antworten.

Grizzly

Top Contributor
Ich beschäftige mich gerade mit JNDI und RMI. Aber irgendwie ist mir JNDI noch nicht ganz klar.

Soweit ich das verstanden habe, kann ich über JNDI ein Objekt oder eine Referenz auf ein Objekt (wobei die Referenz auch ein Objekt ist 😉 ) in einem Namensdienst (bspw. DNS, LDAP oder das Dateisystem) hinterlegen und von dort auch wieder abrufen. Wenn ich das Objekt abrufe und dessen Werte ändere, werden diese nicht Änderungen nicht in das Objekt, das im Namensdienst hinterlegt ist, aufgenommen. Alle Operationen auf das Objekt werden im Programm und nicht im Namensdienst aufgerufen. Will ich die neuen Werte des Objekts im Namensdienst speichern, muss ich das geänderte Objekte im Namensdienst rebinden.

Über RMI kann ich das registrierte Objekt ändern. Dabei werden sämtliche Methoden direkt auf dem Rechner ausgeführt, der das Objekt bereitstellt.

Ein Kommunikation ist also nur über RMI möglich, über JNDI nicht (außer man rebinden das Objekt ständig, wobei hier das Transaktionsmanagement bzw. die Synchronisation komplett fehlt).

Habe ich das so richtig verstanden?
 
soweit ganz richtig, aber:

es gibt eigentlich KEINE Analogie zwischen

RMI (entfernter Methodenaufruf auf ein Objekt am "Server")

JNDI (objekte suchen per "namen" in hierarchischer "struktur")

Die beiden Technologien haben nichts miteinander zu tun und völlig verschiedene Anwendungsgebiete, ausser dass man JNDI verwenden kann, um an RMI-Ressourcen heranzukommen

Denk einfach an JNDI=LDAP, das ist optimiert für ständiges Lesen (schreiboperationen sind eher selten 🙂
 
Mir ging es mehr darum, das man mit RMI Attribute von entfernten Objekten ändern kann, über JNDI nicht (beim DNS kann ich ja normalerweise auch nicht das Mapping zwischen einem Namen und einer IP-Adresse ändern).
 
kannst du so nicht verallgemeinern (jndi ist nur ein "lookup")

Beispielsweise erhälts du in der EJB-Welt deine Enterprise Beans immer über JNDI-Lookups, diese kannst du aber (z.B. bei statefull session beans oder entity beans) sehr wohl "verändern"

Es ist eben dann so, dass du in diesem Fall via JNDI einfach ein sog. handle auf ein "echtes manipulierbares serverseitiges objekt" zurückbekommst

du verwechselt da wohl ein bisschen den "Eintrag im JNDI Directory" (den man im allgemeinen nicht so oft verändern muss, oft ist das sogar read-only) und dem Objekt, das man durch einen Lookup erhält. Der JNDI Baum selbst ist kein Datenspeicher bzw. soll nicht als socher genutzt werden.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben