# Frage zu JNDI / RMI



## Grizzly (16. Nov 2004)

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 _rebind_en.

Ü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 _rebind_en das Objekt ständig, wobei hier das Transaktionsmanagement bzw. die Synchronisation komplett fehlt).

Habe ich das so richtig verstanden?


----------



## Bleiglanz (16. Nov 2004)

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


----------



## Grizzly (16. Nov 2004)

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).


----------



## Bleiglanz (16. Nov 2004)

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.


----------



## Grizzly (16. Nov 2004)

Okay, ich denke, ich hab's jetzt. Danke.


----------

