T
tuxedo
Gast
Hi,
ich bastle mal wieder weiter an meinem SIMON (meine RMI Alternative)... Bin gerade dabei das Exception-Handling einzubauen.
Am Server führe ich ja "remote" eine Methode aus.
Client:
Diese kann aber beim Server eine Exception auslösen. Abfangen kann ich die Exception schon:
Server:
"result" enthält dann genau die geworfene Exception. Ich serialisiere also "result" und schicke es durch den Socket zurück zum Client. Dort lese ich also die "Anwort" des Methodenaufrufs aus (siehe erster Codeabschnitt des Clients) und gebe diese dem Methodenaufrufer zurück.
Hier muss ich jetzt aber schauen, ob tatsächlich ein Ergebnis zurück kommt, oder ob's eine Exception ist:
Wenn ich in der entfernten Methode (beim Server also) also ein
mache, dann bekomme ich mit der obigen "instanceof" Abfrage in der Console die Ausgabe:
Soweit so gut. Ich hab jetzt aber das Problem dass ich die Exception nicht ausgeben will, sondern sie soll quasi "nochmal" als Exception auftauchen, diesmal halt beim Client. Und der Stacktrace sollte wenn möglich irgendwie sagen WO die Exception beim Server geflogen ist.
RMI macht das auch irgendwie (bin noch nicht ganz dahinter gestiegen). Kann man eine so abgefangene Exception an einer anderen Stelle ein zweites mal "werfen" ohne den STacktrace "komplett" zu verfälschen?
- Alex
ich bastle mal wieder weiter an meinem SIMON (meine RMI Alternative)... Bin gerade dabei das Exception-Handling einzubauen.
Am Server führe ich ja "remote" eine Methode aus.
Client:
Code:
Object result = endpoint.sendInvocationToRemote(remoteObject, method.getName(), method.getParameterTypes(),args);
Diese kann aber beim Server eine Exception auslösen. Abfangen kann ich die Exception schon:
Server:
Code:
try {
result = method.invoke(o, args);
} catch (InvocationTargetException e){
result = e.getTargetException();
}
"result" enthält dann genau die geworfene Exception. Ich serialisiere also "result" und schicke es durch den Socket zurück zum Client. Dort lese ich also die "Anwort" des Methodenaufrufs aus (siehe erster Codeabschnitt des Clients) und gebe diese dem Methodenaufrufer zurück.
Hier muss ich jetzt aber schauen, ob tatsächlich ein Ergebnis zurück kommt, oder ob's eine Exception ist:
Code:
if (result instanceof Throwable){
System.out.println(result);
}
Wenn ich in der entfernten Methode (beim Server also) also ein
Code:
throw new IllegalArgumentException("SIMON Muhahaha");
mache, dann bekomme ich mit der obigen "instanceof" Abfrage in der Console die Ausgabe:
java.lang.IllegalArgumentException: SIMON Muhahaha
Soweit so gut. Ich hab jetzt aber das Problem dass ich die Exception nicht ausgeben will, sondern sie soll quasi "nochmal" als Exception auftauchen, diesmal halt beim Client. Und der Stacktrace sollte wenn möglich irgendwie sagen WO die Exception beim Server geflogen ist.
RMI macht das auch irgendwie (bin noch nicht ganz dahinter gestiegen). Kann man eine so abgefangene Exception an einer anderen Stelle ein zweites mal "werfen" ohne den STacktrace "komplett" zu verfälschen?
- Alex