"java.rmi.ServerException: RemoteException Occurred in Server Thread (ClassNotFoundException)"
Problem:
Beim Versuch, einen RMI-Server zu starten, tritt die folgende Ausnahme auf aufgetreten:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: Interfaces.RemoteMethodIntf
Nach dem Login kopieren
Diagnose:
Das zugrunde liegende Problem besteht darin, dass die RMI-Registrierung die in der Remote-Schnittstelle referenzierte Klasse nicht finden kann. Dies kann in mehreren Situationen auftreten:
-
Exportieren: Das Stub-Generierungstool (rmic) wurde nicht ausgeführt oder die erforderlichen Klassenpfadänderungen, die in der Präambel des UnicastRemoteObject-Javadoc beschrieben sind, wurden nicht durchgeführt .
-
Bindung: Die Registry verfügt nicht über den Stub, die Remote-Schnittstelle oder deren Abhängigkeiten von seinem Klassenpfad.
-
Nachschlagen: Der Client hat nicht die gleichen Klassen in seinem Klassenpfad.
-
Aufruf der Remote-Methode: Entweder die Der Client hat ein Objekt einer Klasse an den Server gesendet, die in seinem Klassenpfad fehlt, oder der Server hat ein Objekt einer Klasse zurückgegeben, die im Klassenpfad des Clients fehlt Klassenpfad.
Lösung:
In diesem speziellen Fall liegt das Problem darin, dass der Registry die erforderlichen Klassen in ihrem Klassenpfad fehlen. Um dieses Problem zu beheben, gibt es mehrere Möglichkeiten:
- Starten Sie die Registrierung mit einem geänderten CLASSPATH, der die relevanten JARs oder Verzeichnisse enthält.
- Starten Sie die Registrierung mit LocateRegistry.createRegistry() darin die JVM des Servers.
- Verwenden Sie dynamische Stubs, wie im UnicastRemoteObject Javadoc beschrieben. Dies erfordert jedoch möglicherweise die Behebung von Abhängigkeitsproblemen.
- Stellen Sie sicher, dass der oben genannte Fall (4) nicht auftritt, indem Sie die Klassenpfadkonsistenz für die Objektübertragung überprüfen.
- Erwägen Sie die Verwendung der Codebasisfunktion und beachten Sie, dass dies eine ist Bereitstellungsoption.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich auf meinem RMI-Server die Meldung „java.rmi.ServerException: RemoteException Occurred in Server Thread (ClassNotFoundException)'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!