# RMI Client / Server Architektur



## nero110 (2. Januar 2005)

Hi zusammen, 

ich möchte eine Client / Server Architektur mittels RMI errichten. Leider war ich bisher wenig erfolgreich und bekomme permanent Fehlermeldungen, auch wenn ich meines Erachtens nach alles beachtet habe. 

Folgender Code gehört dem Server an, der die verteilten Methoden an der rmiregistry anmeldet: 


```
package nerosign_vocabularymanager;
 
import java.rmi.*;
import java.rmi.server.*;
 
public class Server {
 
public static void main(String[] args) throws Exception {
	Naming.rebind("rmi://localhost/ServerRemoteMethods", new ServerRemoteMethods());
}
}
```
 
Folgende Methoden sollen vom Server bereitgestellt werden:


```
package nerosign_vocabularymanager;
 
import java.rmi.*;
import java.rmi.server.*;
 
public class ServerRemoteMethods extends UnicastRemoteObject implements ServerRemoteMethodsInterface {
 
public ServerRemoteMethods() throws RemoteException {
}
 
public String server_getDatabases() throws RemoteException {
	return "es funktioniert";
}
}
```
 
... und diese Klasse implementiert die Schnittstelle ServerRemoteMethodsInterface


```
package nerosign_vocabularymanager;
 
import java.rmi.*;
import java.rmi.server.*;
 
public interface ServerRemoteMethodsInterface extends Remote {
 
public String server_getDatabases() throws RemoteException;
}
```
 
Der Client wiederum versucht durch folgenden Code auf die entfernten methoden zuzugreifen: 


```
try {
	 ServerRemoteMethodsInterface srm = (ServerRemoteMethodsInterface) Naming.lookup("rmi://localhost/ServerRemoteMethods");
	 String test = srm.server_getDatabases();
	 JOptionPane.showMessageDialog(null, test, "verbindung erfolgreich", JOptionPane.ERROR_MESSAGE, null);
	}
	catch(Exception e) {
	 JOptionPane.showMessageDialog(null, "ein fehler ist aufgetreten", "Verbindungsfehler", JOptionPane.ERROR_MESSAGE, null);
	}
```
 
Ich habe dabei immer die rmiregistry laufen, und mit rmic ein Skeleton und Stub von ServerRemoteMethods erzeugt. 

Aber ich bekomme weiterhin folgende Fehlermeldungen:


```
"ServerRemoteMethods_Skel.java": java.rmi.server.Skeleton in java.rmi.server wurde abgelehnt in Zeile 7, Spalte 32
"ServerRemoteMethods_Skel.java": java.rmi.server.Operation in java.rmi.server wurde abgelehnt in Zeile 9, Spalte 42
"ServerRemoteMethods_Skel.java": java.rmi.server.Operation in java.rmi.server wurde abgelehnt in Zeile 15, Spalte 28
"ServerRemoteMethods_Skel.java": java.rmi.server.RemoteCall in java.rmi.server wurde abgelehnt in Zeile 19, Spalte 63
"ServerRemoteMethods_Skel.java": getOperations() in java.rmi.server.Skeleton wurde abgelehnt in Zeile 15, Spalte 5
"ServerRemoteMethods_Skel.java": dispatch(java.rmi.Remote,java.rmi.server.RemoteCall,int,long) in java.rmi.server.Skeleton wurde abgelehnt in Zeile 19, Spalte 5
"ServerRemoteMethods_Skel.java": java.rmi.server.Operation in java.rmi.server wurde abgelehnt in Zeile 10, Spalte 29
"ServerRemoteMethods_Skel.java": Operation(java.lang.String) in java.rmi.server.Operation wurde abgelehnt in Zeile 10, Spalte 9
"ServerRemoteMethods_Skel.java": java.rmi.server.Operation in java.rmi.server wurde abgelehnt in Zeile 16, Spalte 33
"ServerRemoteMethods_Skel.java": java.rmi.server.RemoteCall in java.rmi.server wurde abgelehnt in Zeile 19, Spalte 63
"ServerRemoteMethods_Skel.java": java.rmi.server.SkeletonMismatchException in java.rmi.server wurde abgelehnt in Zeile 30, Spalte 43
"ServerRemoteMethods_Skel.java": SkeletonMismatchException(java.lang.String) in java.rmi.server.SkeletonMismatchException wurde abgelehnt in Zeile 30, Spalte 23
"ServerRemoteMethods_Skel.java": releaseInputStream() in java.rmi.server.RemoteCall wurde abgelehnt in Zeile 37, Spalte 18
"ServerRemoteMethods_Skel.java": getResultStream(boolean) in java.rmi.server.RemoteCall wurde abgelehnt in Zeile 40, Spalte 49
"ServerRemoteMethods_Stub.java": java.rmi.server.Operation in java.rmi.server wurde abgelehnt in Zeile 10, Spalte 42
"ServerRemoteMethods_Stub.java": java.rmi.server.Operation in java.rmi.server wurde abgelehnt in Zeile 11, Spalte 29
"ServerRemoteMethods_Stub.java": Operation(java.lang.String) in java.rmi.server.Operation wurde abgelehnt in Zeile 11, Spalte 9
"ServerRemoteMethods_Stub.java": java.rmi.server.RemoteCall in java.rmi.server wurde abgelehnt in Zeile 56, Spalte 33
"ServerRemoteMethods_Stub.java": newCall(java.rmi.server.RemoteObject,java.rmi.server.Operation[],int,long) in java.rmi.server.RemoteRef wurde abgelehnt in Zeile 56, Spalte 55
"ServerRemoteMethods_Stub.java": invoke(java.rmi.server.RemoteCall) in java.rmi.server.RemoteRef wurde abgelehnt in Zeile 57, Spalte 21
"ServerRemoteMethods_Stub.java": getInputStream() in java.rmi.server.RemoteCall wurde abgelehnt in Zeile 60, Spalte 51
"ServerRemoteMethods_Stub.java": done(java.rmi.server.RemoteCall) in java.rmi.server.RemoteRef wurde abgelehnt in Zeile 67, Spalte 25
Es wurden Ablehnungswarnungen ausgegeben. Suchen Sie in der Dokumentation nach besseren Alternativen.
```
 
...und wenn ich den Server starte, erhalte ich folgendes:


```
C:\Programme\JBuilder9\jdk1.4\bin\javaw -classpath "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\__Projekte\_nerosign VocabularyManager\nerosign_VocabularyManager\classes;C:\Programme\JBuilder9\jdk1.4\jre\lib\rt.jar;C:\Programme\JBuilder9\jdk1.4\jre\lib\i18n.jar;C:\Programme\JBuilder9\jdk1.4\jre\lib\sunrsasign.jar;C:\Programme\JBuilder9\jdk1.4\jre\lib\jsse.jar;C:\Programme\JBuilder9\jdk1.4\jre\lib\jce.jar;C:\Programme\JBuilder9\jdk1.4\jre\lib\charsets.jar;C:\Programme\JBuilder9\jdk1.4\jre\classes;C:\Programme\JBuilder9\jdk1.4\lib\tools.jar" nerosign_vocabularymanager.Server 
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:567)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:313)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:160)
at nerosign_vocabularymanager.Server.main(Server.java:33)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:426)
at java.net.Socket.connect(Socket.java:376)
at java.net.Socket.<init>(Socket.java:291)
at java.net.Socket.<init>(Socket.java:119)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:562)
... 6 more
```
 
Alle Dateien liegen lokal in einem Verzeichnis, ich entwickele unter JBuilder. 

Für Hilfe wäre ich sehr dankbar, 

Christian Krekel


----------

