C
coollex
Gast
Hallo!
ich versuche heute den ganzen Tag einen einfachen entfernten Methodenaufruf mit RMI zum laufen zu bringen, was aber erfolglos verläuft.
Zunächst mal der Code.
Der Server:
Die Schnittstelle:
Der Client:
Das Objekt auf Serverseite, dessen Methode vom Client aufgerufen aufgerufen wird und, das die Schnittstelle implementiert:
Wenn ich den Server starte, bekomme ich die Fehlermeldung
Wenn ich dann den Client starte, bekomme ich die Fehlermeldung:
Die RMIRegistry starte ich selbst unter meinem Windows System.
Das Projekt sieht bei mir so aus, dass ich ein package für den Server erstellt habe und dort alle notwendigen Dateien, wie "ZentralUhr.java", "ZentralUhrSchnittstelle.java", "ZentraUhrServer.java". Für den client habe ich auch ein eigenes Package erstellt und dort die Dateien "ZentralUhrSchnittstelle.java" (wie beim Server) und "ZentralUhrClient" erstellt.
Wo ist der Fehler? Ich hoffe, ihr könnt mir helfen. Bitte.
Danke!
Alex.
ich versuche heute den ganzen Tag einen einfachen entfernten Methodenaufruf mit RMI zum laufen zu bringen, was aber erfolglos verläuft.
Zunächst mal der Code.
Der Server:
Code:
package server;
import java.rmi.*;
public class ZentralUhrServer {
public static void main(String [] args){
try{
// Objekt anlegen und anmelden
ZentralUhr uhr = new ZentralUhr();
//Kurzform für "rmi://localhost/ZentralUhrService"
Naming.rebind("/ZentralUhrService", uhr);
System.out.println("Server started!");
}catch(Exception e){
System.out.println("ZentralUhrServer: Exception " + e.toString());
}
}
}
Die Schnittstelle:
Code:
import java.rmi.*;
import java.util.*;
public interface ZentralUhrSchnittstelle extends Remote{
public Date aktuelleZeit() throws RemoteException;
}
Der Client:
Code:
import java.rmi.*;
import java.text.DateFormat;
import java.util.*;
public class ZentralUhrClient {
public static void main(String [] args){
try{
// Anfrage an Registry stellen
// Kurzform für "rmi://localhost/ZentralUhrService"
ZentralUhrSchnittstelle uhr = (ZentralUhrSchnittstelle) Naming.lookup("/ZentralUhrService");
// der Remoteaufruf
Date aktZeit = uhr.aktuelleZeit();
DateFormat tf = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println("Client: Uhrzeit ist " + tf.format(aktZeit));
}catch(Exception e){
System.out.println(e.toString());
}
}
}
Das Objekt auf Serverseite, dessen Methode vom Client aufgerufen aufgerufen wird und, das die Schnittstelle implementiert:
Code:
package server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;
public class ZentralUhr extends UnicastRemoteObject implements ZentralUhrSchnittstelle{
protected ZentralUhr() throws RemoteException {
super();
}
public Date aktuelleZeit() throws RemoteException {
return new Date();
}
}
Wenn ich den Server starte, bekomme ich die Fehlermeldung
Code:
ZentralUhrServer: Exception java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: server.ZentralUhrSchnittstelle
Code:
java.rmi.NotBoundException: ZentralUhrService
Das Projekt sieht bei mir so aus, dass ich ein package für den Server erstellt habe und dort alle notwendigen Dateien, wie "ZentralUhr.java", "ZentralUhrSchnittstelle.java", "ZentraUhrServer.java". Für den client habe ich auch ein eigenes Package erstellt und dort die Dateien "ZentralUhrSchnittstelle.java" (wie beim Server) und "ZentralUhrClient" erstellt.
Wo ist der Fehler? Ich hoffe, ihr könnt mir helfen. Bitte.
Danke!
Alex.