RMI Problem

nero110

Mitglied
Hallo zusammen,

ich habe ein Problem mit RMI, durch das ich nicht durchsteige. Ich möchte eine Client / Server Programm schreiben, der Server stellt die Remote Methoden im Netzwerk für die Clients bereit.

Folgende Methoden sollen vom Server bereitgestellt werden:

Code:
  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";
    }
  }

Die bereitzustellenden Methoden sind in der Schnittstelle ServerRemoteMethodsInterface implementiert:

Code:
  package nerosign_vocabularymanager;
  
  import java.rmi.*;
  import java.rmi.server.*;
  
  public interface ServerRemoteMethodsInterface extends Remote {
  
    public String server_getDatabases() throws RemoteException;
  }

Der Server stellt die Methoden folgendermaßen im Netzwerk zur Verfügung:

Code:
  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());
    }
  }

Und durch folgenden Code schließlich versucht der Client auf die Remote Methode zuzugreifen und sollte (bei Erfolg) den Test-String ausgeben:

Code:
  	try {
 	 ServerRemoteMethodsInterface srm = (ServerRemoteMethodsInterface) Naming.lookup("rmi://localhost/ServerRemoteMethods");
  
  	  String test = srm.server_getDatabases();
  
  	  JOptionPane.showMessageDialog(null, test, "Verbindungsfehler", JOptionPane.ERROR_MESSAGE, null);
  	}
  	catch(Exception e) {
 	 JOptionPane.showMessageDialog(null, "ein fehler ist aufgetreten", "Verbindungsfehler", JOptionPane.ERROR_MESSAGE, null);
  	}

Das ganze teste ich hier auf localhost. Alle Dateien befinden sich in den jeweiligen Entwicklungsordnern von JBuilder (classes, sowie src). Dabei habe ich natürlich unter JBuilder auch jeweils ein Skeleton und Stub erstellt von der Klasse ServerRemoteMethods.

Bei der Erstellung des Skeleton und Stubs erhalte ich leider unter JBuilder folgende Fehlermeldungen:

Code:
  "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.

Bei einem Testlauf von Client und Server (natürlich läuft dabei auch rmiregistry aus /java/bin/ erhalte ich von der Client-Oberfläche den Hinweis, dass die Verbindung nicht hergestellt worden konnte (siehe: JOptionPane.showMessageDialog(null, "ein fehler ist aufgetreten", "Verbindungsfehler", JOptionPane.ERROR_MESSAGE, null);", beim Starten des Servers (siehe oben) erhalte ich folgende Fehlermeldungen:

Code:
 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.ServerException: RemoteException occurred in server thread; nested exception is: 
  	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
  	java.lang.ClassNotFoundException: nerosign_vocabularymanager.ServerRemoteMethods_Stub
  
  	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:352)
  
  	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:207)
  
  	at sun.rmi.transport.Transport$1.run(Transport.java:148)
  
  	at java.security.AccessController.doPrivileged(Native Method)
  
  	at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
  
  	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
  
  	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
  
  	at java.lang.Thread.run(Thread.java:534)
  
  	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
  
  	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
  
  	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:350)
  
  	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.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
  	java.lang.ClassNotFoundException: nerosign_vocabularymanager.ServerRemoteMethods_Stub
  
  	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
  
  	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:342)
  
  	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:207)
  
  	at sun.rmi.transport.Transport$1.run(Transport.java:148)
  
  	at java.security.AccessController.doPrivileged(Native Method)
  
  	at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
  
  	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
  
  	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
  
  	at java.lang.Thread.run(Thread.java:534)
  
  Caused by: java.lang.ClassNotFoundException: nerosign_vocabularymanager.ServerRemoteMethods_Stub
  
  	at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
  
  	at java.security.AccessController.doPrivileged(Native Method)
  
  	at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
  
  	at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
  
  	at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
  
  	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
  
  	at java.lang.Class.forName0(Native Method)
  
  	at java.lang.Class.forName(Class.java:219)
  
  	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:430)
  
  	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
  
  	at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:631)
  
  	at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:257)
  
  	at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:200)
  
  	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1513)
  
  	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)
  
  	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1626)
  
  	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
  
  	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
  
  	... 9 more

Ich wäre wirklich sehr dankbar, wenn jemand eine Antwort oder einen Lösungsvorschlag für mein Problem hätte, gerne geb ich auch was in die Kaffeekasse.

Danke,

Christian Krekel
 
Hi!

Könntest du mir erklären, wie du das Problem gelöst hast?
Bin nämlich auch gerade am Verzweifeln beim JBuilder :(

Danke
 
nabend,

also was du definitiv machen musst: rechtsklick auf datei, dann stub und skeleton erstellen fuer v1.2. bei jedem kompilieren. eine security policy datei waere auch noch sehr wichtig, teilweise laeuft es ohne gar nicht.

gruesse.
 
Zurück