Paralleles Abfragen von Web-Services

gtm

Grünschnabel
Hallo,

ich sitze gerade an einer Anwendung die zu einem gegeben String verschiedene Web Services (WS) anzapft und deren Ergebnisse präsentiert. Momentan läuft das auch alles soweit ganz super, aber nur wenn alle WS nacheinander abgefragt werden. Jetzt wollte ich das ganze dahingehend umstellen, dass die WS gleichzeitig abgefragt werden und bei der Beendigung der Aufgabe die Ergebnisse eingeholt werden.

Die ersten Versuche das zu realisieren, waren einfache JavaThreads. Die kommen sich aber irgendwann in die Quere und verweilen in einer Endlosschleife.

Gibt es die Möglichkeit, dass die diese Jobs (einholen von Ergebnissen vom WS), die ausgeführt werden mit Hilfe von Quarz o.ä. deklarieren kann? Bis jetzt habe ich in Spring nur den zeitabhänigen Scheduler gefunden. Das ganze soll aber eventbasiert funktionieren.

Also: User klickt auf (getResults), alle WS Jobs werden gleichzeitig gestartet. Wenn alle fertig sind wird das Ergebnis dem User präsentiert.

Ich steh momentan echt aufm Schlauch ;) Hoffe jemand hat ne Idee!
 
Schau dir mal das Interface TaskExecutor an. Das ist die zentral Abstraktion in Spring um Tasks (was auch immer man damit implementieren möchte) auszuführen. Für parallele Ausführungen bieten sich ThreadPoolTaskExecutor an. Davon gibt es ein paar verschiedene in Spring. Wenn du eh schon Quartz benutzt ist dieser hier eine gute Wahl.

Wenn du mit einem Appserver arbeitest und dessen WorkManager fürs Threadpooling benutzen willst, schau dir die Implementierungen mit den Namen *WorkManagerTaskExecuter an.

Gruß
Ollie
 
Welches Webservice-Framework setzt du ein? Basieren die Webservices, die du ansprichst auf dem SOAP Protokoll?
Du könntest deine WS-Funktionen nämlich nacheinander aber asynchron aufrufen, d.h. sie WS werden kontaktiert und direkt danach gehts weiter. Um die Ergebnisse zu empfangen kann dann ne Methode definiert werden, die aufgerufen wird sobald die Antwort vom entsprechenden WS eintrifft. Alternativ sollte auch Polling unterstützt werden, was ich aber nicht einsetzen würde.
 
Zuletzt bearbeitet:
Erstmal danke an euch Beiden für die Antworten.

@Ollie. Leider bietet Spring (soweit ich informiertiert bin) keine Abstraktion für Callable. Was ich allerdings benötige, um irgendwo die Ergebnisse abzulegen.

@Cojote: Da meine Web Services nicht alle SOAP basiert sind, kann ich das WSIF von Apache nicht einsetzen. Gibt's dort Alternernativen?
 
Hallo,

was hindert dich daran die Webservice Aufrufe selbst in Callables zu wrappen und dann über einen ExecutorService mit den Futures auf Ergebnisse zu warten?

Gruß Tom
 
@Cojote: Die meisten Services sind Rest basiert. Für einige benutz ich auch die spezifische Java-API.

@Ollie: Ich habs mittlerweile mit nem einfachem ExecutorService gelöst. Publish/subscribe wäre auch gegangen, würde aber ein wenig Overhead für meine Zwecke produzieren.

@Tom: Das hab ich gestern gemacht. Läuft super ;)

Nochmal vielen Dank für die konstruktiven Antworten. Wenn Cojote nochn Tipp für ein oder mehrere Frameworks hat, wär ich auch dankbar. Wenn nicht, kann das Thema als erledigt betrachtet werden.

Gruß
 

Neue Beiträge

Zurück