# RMI-Server



## tom_cruise (2. Apr 2007)

Hallo,
Ich habe ein RMI –Plugin(net.genady.rmi_2.0.6) auf Eclipse installiert, damit ich RMI-Applikationen leicht entwickeln und ausführen kann. Nun um RMI-Applikationen ausführen zu können, muss ich einen java.rmi.server.codebase und eine  java.security.policy Datei  setzen. Könnte jemand mir bitte helfen eine security policy file,oder einen java.rmi.server.codebase zu erzeugen bzw zu erstellen?
 Im voraus vielen Dank.


----------



## L-ectron-X (2. Apr 2007)

Zunächst mal gehört RMI nicht in den Bereich J2EE, ich habs deshalb in das richtige Unterforum verschoben.

Eine Policy-Datei erzeugst du mit einem einfachen Texteditor.
Für die kompletten Zugriffsrechte erzeugst du eine Datei namens z.B. *rmi.policy* mit folgendem Inhalt:

```
grant {
   permission java.security.AllPermission;
};
```
Die Datei legst du im Verzeichnis deines RMI-Servers ab.

Der Aufruf deines RMI-Servers auf der Systemkonsole sieht dann folgendermaßen aus:

```
java -Djava.security.policy=rmi.policy -Djava.rmi.codebase=http://localhost/ -jar RMI-Server.jar
```

Dieser Aufruf kann auch in eine Batch- oder Shell-Datei gelegt werden.
Für den Fall, dass innerhalb deines Programms nicht die RMI-Registry gestartet wird, kann das in einer Batchdatei auch gleich mit erledigt werden.
Für localhost kann auch eine Domain oder IP eines Rechner eingegeben werden. Auf jeden Fall muss an dem dort angegebenen Rechner der RMI-Server laufen.


----------



## Gast (3. Apr 2007)

hänge seit Tagen auch an solch einem Problem. Allerdings geht es nicht um Eclipse, sondern darum, dass ich ständig beim Aufruf des Client-Progs eine java.rmi.NotBoundException bekomme.

allerdings hatte ich

```
grant {
 permission java.netSocketPermission "*:*","accept,connect,listen,resolve";
};
```

in meine policy geschrieben


----------



## Gast (3. Apr 2007)

ps: Es muß doch bei der codebase der eigentliche servername bzw. die IP, über die er angesprochen wird mit dem gesamtem Pfad vom Root-verzeichnis des Web-Servers aus , mit rein?
Also http://192.168.0.2/java/rmi 

meine Aufrufe lauten dann so: java ... -Djava.rmi.server.codebase =http://192.168.0.2:80/java/rmi ExampleApp

Könnte das mein Fehler sein bzw. ist das falsch oder veraltet? Wenn ich deinen Aufruf betrachte (-Djava.rmi.codebase=...) gibt es ja doch so einige kleine Unterschiede.


----------



## L-ectron-X (3. Apr 2007)

Die NotBoundException wirft ein Client, wenn er eine Verbindung zur RMI-Registry des Hosts herstellen, aber dort kein an die RMI-Registry gebundenes Remote-Objekt unter dem spezifizierten Namen finden kann.
In die codebase gehören normalerweise die Stubklassen hinein, die von Client heruntergeladen werden können.
Um genau zu sein: Die Klasse, die die Remoteschnittstelle implementiert und die Stubklasse des Servers.
z.B.
RMIServer.class (Klasse die java.rmi.Remote erweitert/implementiert)
RMIServerImpl_Stub.class (Die Stubklasse des Servers)

Kann sein, dass diese Infos älter sind. Aktuelle Informationen dazu kannst du aus "Java ist auch eine Insel" entnehmen.

Ich habe wegen den System-Properties auch lange probiert und bin zu dem Schluss gekommen, dass beide funktionieren und beide werden auch in Büchern publiziert.


----------



## Gast (4. Apr 2007)

Erstmal vielen Dank für die top-Info (vorallem der Grund der Exception), hilft mir in diesem für mich neuem Thema sehr. Werde es nachher nochmal durchgehen.


----------

