RMI: Problem beim Aufruf einer Methode. Falsch gecastet?

Status
Nicht offen für weitere Antworten.
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:
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
Wenn ich dann den Client starte, bekomme ich die Fehlermeldung:
Code:
java.rmi.NotBoundException: ZentralUhrService
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.
 

Murray

Top Contributor
Beim Starten des Servers hast du möglicherweise ein Problem mit dem Classpath. Sowohl ZentralUhrServer als auch ZentralUhrSchnittstelle haben das Package server, oder? Dann müssten die beiden Class-Files in einem Unterverzeichnis server liegen. Das Verzeichnis, in dem dieses Unterverzeichnis server liegt (und nicht das Verzeichnis server selbst) muss dann im Classpath sein.
 
C

coollex

Gast
Danke für die schnelle Antwort.

kannst du mir bitte ein Beispiel dazu geben? Und kannst du mir an einem Beispiel zeigen, wie ich dann das Classpath anpassen soll?

Danke

Alex
 
C

coollex

Gast
Hat das eventuell auch was mit "java -Djava.rmi.server.codebase=..." zu tun?
 

Murray

Top Contributor
In welcher Verzeichnisstruktur liegen denn bei dir die Class-Files? Wie ist die Umgebungsvariable CLASSPATH gesetzt, bzw. welchen Wert übergibst beim Starten des Servers per "-classpath"-Option? Aus welchen Verzeichnis heraus startest du den Server?
 
C

coollex

Gast
Ich arbeite mit Eclipse und habe für meine Prjekte ein Workspace, wie das bei Eclipse üblich gemacht wird. Dort habe ich alle meine Projekte unter anderem auch dieses. Für jedes Projekt wird ein eigenes Verzeichnis erstellt. Somit habe ich meine class dateien auch in diesem Verzeichnis. Ich habe nun nachgelesen, dass ich den Befehl rmic benutzen muss, der allerdings in dem Verzeichnis, in dem meine class Dateien liegen nicht funktioniert, sondern nur in dem Verzeichnis von java/jre/bin.
Womoglich muss ich den classpath so setzen, dass der Befehl rmic von überall zu starten ist. Wie kann man das machen?

alex
 

L-ectron-X

Gesperrter Benutzer
Der Classpath hat damit gar nichts zu tun. Wenn, dann der Path des Systems.
Und wenn du mit Java 1.5 programmierst, brauchst du auch den rmic nicht mehr selbst aufrufen, die Stub- und Skeleton-Objekte werden vom Interpreter selbst dann zur Laufzeit aufgebaut.
 
G

Guest

Gast
@L-ectron-X: nettes Bild :)

Leider bin ich jetzt noch mehr verwirrt. In meinem Code kann ich keinen Fehler finden. Ich weiß jetzt wirklich nicht mehr, was ich dann machen muss.

Please help!

Alex
 

L-ectron-X

Gesperrter Benutzer
Ich hab mal deinen Code ausprobiert, weil ich auch keinen Fehler sehen konnte.
Weil ich zu faul bin, die RMIRegistry händisch zu starten, habe ich deinen Code um zwei Zeilen ergänzt.
Code:
import java.rmi.*;
import java.rmi.registry.*;

public class ZentralUhrServer {

   public static void main(String [] args){
      try{
         LocateRegistry.createRegistry(Registry.REGISTRY_PORT); //Port binden
         Registry registry = LocateRegistry.getRegistry();
         
         // 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());
      }
   }

}

Test mit dem Rest von deinen Klassen war positiv. Dein Beispiel ist in der lokalen Umgebung funktionsfähig.
Kompiliert und ausgeführt habe ich das Ganze mit Java 1.5. Den rmic habe ich dabei nicht "angefasst".
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
M Problem beim Datenempfang Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
J Problem beim Senden von File Netzwerkprogrammierung 4
V Problem beim Senden von Dateien Netzwerkprogrammierung 4
P problem beim schließen eines Streams Netzwerkprogrammierung 6
C Session Problem beim Zugriff auf Webseiten Netzwerkprogrammierung 3
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
D Problem beim holen einer PHP-Seite via HttpClient Netzwerkprogrammierung 19
J Problem beim versenden von eigenen Objekten über RMI Netzwerkprogrammierung 2
R Problem beim Senden von Emails (Javamail) Netzwerkprogrammierung 2
M problem beim schicken von XML-DAtenpacketen via TCP Netzwerkprogrammierung 3
D Performance Problem beim File senden, empfangen Netzwerkprogrammierung 4
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben