Probleme bei Java RMI

  • Hi!
    Ich habe ein problem, und zwar:
    es gibt einen RMI Server, für den ich schon eine Stub-Datei gemacht habe, es ist alles ok, aber beim Starten bekomme ich folgenden Fehler:

    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: alternativ.interfaces.Server
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
    at sun.rmi.transport.Transport$1.run(Transport.java:153)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
    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:595)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at java.rmi.Naming.rebind(Unknown Source)
    at alternativ.server.ServerImpl.main(ServerImpl.java:50)

    ich vermute, dass etwas mit dem Interface nicht stimmt, aber ich habe es importiert:

    Code
    import alternativ.interfaces.Server;



    Kann mir jemand helfen?
    Im Voraus danke.

  • hast du alles im CLASSPATH?
    ich hatte auch schon mal so einen Fehler und es lag damals glaub ich am CLASSPATH
    kann auch daran liegen, dass du z.B. den Server über die Kommandozeile startest und nicht in einer IDE, dann musst den CLASSPATH händisch setzen

    Four stages of acceptance:
    1.) this is worthless nonsense
    2.) this is interesting, but perverse, point of view
    3.) this is true, but quite unimportant
    4.) I alwas said so
    J.B.S. Haldane

  • ich glaub du musst dich doch einmischen
    schaut so aus als würde die rmiregistry deine klasse nicht finden
    das rmic hat ohne probleme funktioniert oder macht eclipse das automatisch?

    Four stages of acceptance:
    1.) this is worthless nonsense
    2.) this is interesting, but perverse, point of view
    3.) this is true, but quite unimportant
    4.) I alwas said so
    J.B.S. Haldane

  • sieht stark danach aus als könnte er die klasse nicht finden.

    kann es sein das das
    import alternative.interfaces.Server;
    heißen soll?

    alternativ ist nämlich kein englische wort und deshalb vl da dein fehler?

    "Ein erstes Zeichen beginnender Erkenntnis ist der Wunsch, zu sterben. Dieses Leben scheint unerträglich, ein anderes unerreichbar." Franz Kafka

  • Es geht leider auch nicht :(

    C:\Dokumente und Einstellungen\Alexandr\workspace\SBC>java -classpath "c:\Dokumente und Einstellungen\Alexandr\workspace\SBC" alternativ.server.ServerImpl
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

    ich bekomme der selbe fehler....



  • Ja, mein englisch ist nicht sehr gut.... ;)
    aber das package heißt "alternativ"
    und wenn der fehler hier liegen würde, könnte ich nicht kompillieren.
    Beim Kompillieren werden aber alle Klassen gefunden...

  • setzt mal den CLASSPATH als Umgebungsvariable, so dass er für alle Programme sichtbar ist, vielleicht hilft das

    Four stages of acceptance:
    1.) this is worthless nonsense
    2.) this is interesting, but perverse, point of view
    3.) this is true, but quite unimportant
    4.) I alwas said so
    J.B.S. Haldane

  • Yevhen:
    probier mal wenn du die rmi-registry in dem verzeichnis startest, in dem deine Klassen (Server.class,...) liegen.



    wenn dann musst du sie im ordner starten wo das top package deiner package struktur drin is
    hast du das eh so gemacht?

    Four stages of acceptance:
    1.) this is worthless nonsense
    2.) this is interesting, but perverse, point of view
    3.) this is true, but quite unimportant
    4.) I alwas said so
    J.B.S. Haldane

  • wenn dann musst du sie im ordner starten wo das top package deiner package struktur drin is
    hast du das eh so gemacht?


    1. Es ist egal von welchem Ordner man die rmiregistry startet. Da der Server und der Client nur ueber Sockets mit dieser kommunizieren.
    2. Ab Java 1.5 brauchst du keine Stubklassen extra mit rmic anlegen. Du musst nur schaun das am Client alle benoetigten class-Files im CLASSPATH sind. Somit auch die Implementationen vom Server.


  • hi!
    Ich glaube auch es ist egal von welche ort starte ich rmi-registry...
    SecurityManager benutze ich auch nicht...
    Und das problrm kommt wärend ich Server statre, also die sache mit dem client sind noch nicht dabei. ich arbeite mit Eclipce und classpath muss ok sein....

  • Ich hab dir hier ein einfaches Bsp zusammen gestellt:

    Client.java

    IServer.java

    Java
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    
    public interface IServer extends Remote
    {
        String hello() throws RemoteException;
    }

    ServerImpl.java

    zum kompilieren:
    # javac -cp "." ServerImpl.java
    # javac -cp "." Client.java

    dann in einer Konsole:
    # java -cp "." ServerImpl

    und in einer anderen Konsole:
    # java -cp "." Client

    Wenn ich das bei mir mach funktionierts. Achtung, ich mach da im Bsp keine Fehlerbehandlung, ich beende auch den Server nicht. Sowas soll man halt dann schon noch machen.


  • 2 kubuntu :thumb:

    vielen vielen Dank!
    Das Problem lag bei dieser Zeile:

    Registry registry = LocateRegistry.createRegistry(12345);


    Ich habe das Registry händisch gestartet. Und komischerweise konnte der Server das Register nicht finden. Als wäre es überhaupt nicht gestartet worden.

    Jetzt arbeitet schon alles.
    Außerdem habe ich die Java-Version auf jre1.5.0_09 gewechselt.

    Lg

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!