# Threads mit einem WebService



## roadrunner87 (24. Nov 2011)

Hallo,
ich habe einen WebService mit Java programmiert und möchte nun folgendes implementieren.
Wenn der Client den Server anfragt, möchte ich dem Client sofort eine ID zurückschicken. Anschließend arbeitet der Server die Anfrage ab. Nachdem die Anfrage bearbeitet worden ist, möchte ich dem Client bescheidgeben, dass sein Ergebnis fertig ist. Somit muss der Client nicht lange warten bis das Ergebnis fertig ist.

Ich weiß leider nicht wie man bei soetwas vorgeht!

Habe mir es in etwa so vorgestellt:

```
public String add(long a, long b) {
  return generateId();  // geht natürlich so nicht
  add(a, b);
  // Client bescheid geben
}
```


Geht so etwas mit Threads?


Danke schonmal im voraus.


----------



## SlaterB (24. Nov 2011)

wie stellst du dir die Client-Seite dazu vor, bekommt der den String beim Aufruf gleich zurück und was danach?
soll er in Kürze wieder bei densemben Aufruf horchen, was immer das in Java-Umsetzung wäre?

allein aus diesen Client-Vorgängen ergibt sich doch ziemlich einfach, dass der Client eine zweite Anfrage senden könnte, die dann eben länger dauert,
das wäre mit normalen Mitteln zu machen,

im Server kann der erste Aufruf in der Tat einen Thread starten, VOR der ersten Rückgabe, beim zweiten Aufruf wird anhand der Parameter-Id irgendwo nachgeschaut ob ein entsprechender Thread läuft, auf dessen Ende gewarten usw., oder was immer man gerne hätte

-----

die grundsätzliche Alternative wäre am Anfang dasselbe Vorgehen, nur kein zweiter Aufruf sondern irgendwie später eine vom Server ausgehende Verbindung zum Client, der dann allgemein auf solche Nachrichten warten müsste,
ob das in WebService geht weiß ich nicht, bei RMI heißt das wohl Callback
http://www.java-forum.org/netzwerkprogrammierung/119497-callback.html


----------



## roadrunner87 (24. Nov 2011)

Ich habe mir das so vorgestellt:

 1) der Client stellt eine Anfrage
 2) der Server erstellt eine UID und sendet sie dem Client zurück (damit kann der Client das Ergebnis anfragen). In der Zeit kann der Client andere Dinge erledigen.
 3) der Server arbeitet die Anfrage ab
 4) wenn er fertig ist benachrichtigt er den Client
 5) Client kann das Ergebnis abholen


Das ganze funktioniert ja schon, nur das der Client halt wartet, bis das Ergebnis feststeht. Das kann aber unter umständen sehr lange dauern.


----------



## SlaterB (24. Nov 2011)

da du nichts neues sagst, würde ich eigentlich nicht antworten, aber bevor du auf eine Antwort (von mir) wartest:
du sagst nichts neues, ich habe auch nichts neues zu sagen, Callback heißt es bei RMI, bei WebService habe ich davon noch nichts gehört, 
aber die beiden Begriffe in eine Suchmaschine einzutippen ist ja nicht schwer, führt etwa zu
Can I call you back? - Asynchronous Web Services | Java.net

also wenn du willst kannst du in der Hinsicht weiter lesen, ich kann nichts beitragen


----------



## Firestorm87 (24. Nov 2011)

Ein Call-Back ist bei einem Webservices eigentlich nicht vorgesehen.
Weil dazu wäre es zwingend erforderlich, dass der Client von außen erreichbar ist (z.B. hinter einem Router schon nicht mehr zwingend gewährleistet).

Einfacher wäre wahrscheinlich, wenn der Client alle x Sekunden eine neue Anfrage stellt und nachfragt, ob sein Prozess schon fertig ist.


----------

