XesperantoX
Mitglied
Hallo,
ich bin dabei ein RMI Programm zu schreiben in welchem n-Monitore eine Datei mit CPU-Werten auslesen, diese dann in einem bestimmten Intervall an einen Coordinator geben und n-Clients sich die Werte beim Coordinator abholen können.
Soweit die Aufgaben, der Code ist auch mehr oder weniger fertig und der Coordinator läuft. Wenn ich aber einen Monitor starten will dann bekomme ich folgende Exception:
Ich konnte bisher herausfinden das anscheinend die Schnittstellen von Monitor und Coordinator nicht identisch sind. Leider finde ich aber nicht heraus warum sie das nicht sind...
Hier noch der Code vom Monitor und weiter unten die Implementierung des Coordinator Interfaces.
Danke,
Sascha
ich bin dabei ein RMI Programm zu schreiben in welchem n-Monitore eine Datei mit CPU-Werten auslesen, diese dann in einem bestimmten Intervall an einen Coordinator geben und n-Clients sich die Werte beim Coordinator abholen können.
Soweit die Aufgaben, der Code ist auch mehr oder weniger fertig und der Coordinator läuft. Wenn ich aber einen Monitor starten will dann bekomme ich folgende Exception:
Der Fehler passiert beim Aufruf von folgender Zeile im Monitor.java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: invalid method hash
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:325)
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(StreamRemoteCall.java:247)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:179)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy1.iniMonitor(Unknown Source)
at monitor.Monitor.main(Monitor.java:39)
Caused by: java.rmi.UnmarshalException: invalid method hash
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:266)
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)
Code:
frequence = miCoordinador.iniMonitor(objMonitor);
Hier noch der Code vom Monitor und weiter unten die Implementierung des Coordinator Interfaces.
Code:
package monitor;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.StringTokenizer;
import coordinator.CoordinatorImpl;
import coordinator.CoordinatorInfz;
public class Monitor{
private static String path = new String("C://JavaProg//loadavg.dat");
public static void main( String args[]){
try {
MonitorInfz objMonitor = new MonitorImpl();
int frequence = 1000;
String tmp = "";
double loadbalance = 0;
CoordinatorInfz miCoordinador = null;
try{
System.out.println("Vor Try-Block");
String registryURL = new String("rmi://localhost:2200/miCoordinador");
miCoordinador = (CoordinatorInfz) Naming.lookup(registryURL);
System.out.println("\n\nLookup ready, connect to server...");
System.out.println("obj Monitor ist erzeugt...");
frequence = miCoordinador.iniMonitor(objMonitor); //<--- Hier tritt Exception auf!
System.out.println("Alles fertig...");
} catch (IOException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
Code:
public synchronized int iniMonitor(MonitorInfz objMonitor) throws RemoteException {
monitorVector.add(new DataManagement(objMonitor));
return frequenceMonitor;
}
Danke,
Sascha