# Exceptions vom Server an Client weiterleiten



## Tallan (2. Sep 2009)

Hallo zusammen,

Ich habe eine Client und einen Server der je nach anfrage des Clients verschiedene Thread erzeugt. Wenn nun auf der Serverseite eine Exception ausgelöst wird würde ich diese gerne im Client ausgeben lassen, daher war mein erste gedanke die Methoden die per RMI ausgegeben werden entsprechende Exceptions werfen zu lassen das ist allerdings
in der run() methode des Threads nicht möglich, gibt es eine alternative oder muss ich die meldung dann explizit an den client übergeben?


----------



## SlaterB (2. Sep 2009)

eine Exception ist eine Informationsübertragung an den Client fast wie ein normaler Rückgabewert,
beides kann nur bei einem Methodenaufruf passieren,

wenn der letzte Aufruf des Clients schon beantwortet wurde, steht aktuell keine Möglichkeit der Übertragung zur Verfügung, 
abgesehen von Telepathie und evtl. umgedrehtes RMI: der Server fragt aktiv beim Client an,

aber man könnte die Exception oder sonstige Information merken, und falls der Client wieder vorbeischaut,
einen Rückgabewert mit der Information füllen oder künstlich die fragliche Exception neu werfen,

das geht recht gut,
if (savedException != null) {
throw savedException;
}


----------



## Tallan (2. Sep 2009)

das ist mir soweit klar die vorm des umgekehrten rmi's habe ich z.z implementiert aber da von der logik her der client ja eine methode auf dem server aufruft und sollte der aufruf dieser methode nun exceptions werfen ging ich davon aus das der client diese "fangen" könnte,..
also im prinzip try catch statt in der servermethode in den client um den aufruf der server methode
und beim server dann einfach throws Exception ...
Sollte das nicht funktionieren?
In meinem fall schießt jetzt der Thread quer weil ich die run() methoder nicht um throws erweitern darf/kann


----------



## SlaterB (2. Sep 2009)

der Aufruf des Clients hat nichts mit deiner run-Methode zu tun, du sagst ja selber, dass eigene Threads gestartet werden,

ein throw im Thread hilft also in keiner Weise, und mit der Server-für-Client-Methode kann man auch schlecht kommunizieren,
einzig realistischer Aufbau wäre


public Rueckgabewert server() {
// starte Threads,
// warte auf Threads/ sleep in einer Schleife
// if in irgendeinen Thread oder sonstwo Exception oder sonstige Information vorhanden:
// -> throw Exception/ return xy;
}


beim Client:
try{
Server.server();
catch ..


----------



## Tallan (3. Sep 2009)

SlaterB hat gesagt.:


> der Aufruf des Clients hat nichts mit deiner run-Methode zu tun, du sagst ja selber, dass eigene Threads gestartet werden,
> 
> ein throw im Thread hilft also in keiner Weise, und mit der Server-für-Client-Methode kann man auch schlecht kommunizieren,
> einzig realistischer Aufbau wäre
> ...




das war ja im prinzip das was ich vor hatte

im client 

try
{
     server.test()
}
catch ...


auf dem server


test() throws ...
{
   new mythread().start
}


und dann im thread anstelle des abfangen des möglichen exception mit try cat

run() throws ....

nur run throws geht eben nicht


----------



## SlaterB (3. Sep 2009)

und zum dritten:
ein Thread ist eine Abkopplung, hat mit der Methode, die ihn startet, quasi nichts zu tun, 
test()  läuft normalerweise auch weiter, ist evtl. schon beendet und nicht mehr existent, bevor der Thread seine run-Methode überhaupt startet


----------



## Tallan (3. Sep 2009)

SlaterB hat gesagt.:


> und zum dritten:
> ein Thread ist eine Abkopplung, hat mit der Methode, die ihn startet, quasi nichts zu tun,
> test()  läuft normalerweise auch weiter, ist evtl. schon beendet und nicht mehr existent, bevor der Thread seine run-Methode überhaupt startet



ok das leuchtet ein danke


----------

