# Programm in der RMIRegistry anmelden und benutzen (RMI)



## LocoCroco (25. Jan 2008)

Also hallo erst einmal! 
Ich hab ein kleines Problem das mir keine Ruhe lässt! Ich muss für die Schule eine Jahresarbeit machen und hab mich dazu entschieden einen kleinen Messenger auf RMI-Basis zu programmieren. 

Es geht um folgendes:

Wenn ich etwas über das Programm verschicken will, benötige ich eine Variable des Typs meines Interfaces. Verschicke ich nun eine Nachricht muss der Variablenname dem Namen entsprechen mit dem ich das andere Programm in der RMIRegistry angemeldet habe. Soviel zu dem drum herum!

Das Problem:

Ich habe eine List in der alle Benutzer des Programmes sind. Mit einem Doppelklick auf auf einen Eintrag soll ein Fenster geöffnet werden der als Client dient und Nachrichten sendet und empfängt. Ich will natürlich nur eine Klasse (!!!!) schreiben, das heißt sie muss allgemeingültig sein!!! Das heißt wiederum ich muss die Variable meines Interfaces dynamisch benennen können?! Geht das oder gibt es da RMI spezifische Lösungen?

Kleines Beispiel:

>class Connector{

....
                        Interface a=new InterfaceImpl(); //erstellen des Objekts des Interface

			Naming.rebind("rmi://localhost:1099/ShortService",a); // anmelden in der RMIRegistry das Unterstrichene ist der Name mit dem das Programm in der RMIRegistry angemeldet wird

....
}

>class Client{

....

                        Interface a=(Interface)Naming.lookup("rmi://localhost:1099/ShortService"); // hier wird nachgeschaut ob es ShortService in der RMIRegistry überhaupt gibt

a.send("hello world"); // hier wird an ShortService gesendet
...
}

Also ich könnt natürlich für jeden User einen neuen Client schreiben aber das ist absolut nicht das was ich mir vorstelle!!! Ich hoffe ich habe alles einigermaßen verständlich erklärt wenn nicht einfach noch einmal nachfragen! 

Ich danke euch schon im voraus!

Mfg Raffi


----------



## tuxedo (25. Jan 2008)

Nö, also ich habs nicht verstanden. BTW: Das Forum bietet Code-Tags ...

Vor allem ist nicht rausgekommen _was_ du _senden_ willst (RMI macht ja nur aufrufe), und wieso das von Client zu Client anders sein soll?!

Nebenbei hat dein Beispiel den Fehler, dass du "ShortService" registrierst, aber "InterfaceService" anforderst...

- Alex


----------



## LocoCroco (25. Jan 2008)

Aaaaalso ich hab mir die Frage grad selber beantwortet  war schon etwas peinlich!!

Aber trotzdem:

Also ich will einen String verschicken, das hat auch wunderbar funktioniert. Das eigentlich Problem war eher meine Begriffsstutzigkeit^^ hab nochmal alles durchgelesen was ich gefunden hab und irgendwann ist mir aufgegangen das der Variablenname gar nicht entscheidend ist ist sonder die Methode Naming.lookup() alles regelt. Diese Methode braucht die Adresse der RMIRegistry und den -> "*Namen*" <- unter dem das andere Programm angemeldet ist. Somit wäre dieses Problem gelöst funktioniert wunderbar!

self owned


----------



## tuxedo (25. Jan 2008)

Also lags tatsächlich daran dass du am Server "ShortService" in der Registry angemeldet hast, und am Client nicht den "ShortService" bei der Registry erfragt hast sondern "InterfaceService" ???

Wenn Client und Server zusammenarbeiten sollen, dann sollten sie sich auch auf einen gemeinsamen RMI-Service-Namen einigen ...

- Alex


----------



## LocoCroco (25. Jan 2008)

Ich hab die ganze Zeit voll falsch gedacht ... und somit bemerke ich gerade das ich RMI immer noch nicht wirklich verstanden habe ... argh
Das kann noch was werden^^

Danke für deine Antwort alex0801


----------

