3 import java.io.IOException;
4 import java.util.EventObject;
6 import java.util.concurrent.CompletableFuture;
7 import java.util.concurrent.CopyOnWriteArrayList;
8 import java.util.concurrent.Executors;
9 import java.util.concurrent.ScheduledExecutorService;
10 import java.util.concurrent.TimeUnit;
12 import jalview.bin.Cache;
14 public class WebServiceExecutor
16 private ScheduledExecutorService executor =
17 Executors.newSingleThreadScheduledExecutor();
19 public void submit(final WebServiceWorkerI worker)
21 executor.submit(() -> {
24 wsThreadSupport.submitted(worker);
27 Cache.log.error("Failed to submit web service jobs.", e);
28 wsThreadSupport.submissionFailed(worker, e);
31 executor.schedule(() -> pollJobs(worker), 1, TimeUnit.SECONDS);
34 executor.schedule(() -> pollJobs(worker), 1, TimeUnit.SECONDS);
38 private void pollJobs(WebServiceWorkerI worker) {
43 Cache.log.error("Failed to poll web service jobs.", e);
44 for (WSJob job : worker.getJobs()) {
45 job.setStatus(WSJobStatus.SERVER_ERROR);
47 wsThreadSupport.pollFailed(worker, e);
50 if (!worker.isDone()) {
51 executor.schedule(() -> pollJobs(worker), 1, TimeUnit.SECONDS);
55 wsThreadSupport.done(worker);
59 private WebServiceThreadSupport wsThreadSupport = new WebServiceThreadSupport();
61 public void addThreadListener(WebServiceThreadListenerI listener)
63 wsThreadSupport.addListener(listener);
66 public void removeThreadListener(WebServiceThreadListenerI listener)
68 wsThreadSupport.removeListener(listener);
72 public void shutdown()
74 executor.shutdownNow();
80 class WebServiceThreadSupport implements WebServiceThreadListenerI {
81 List<WebServiceThreadListenerI> listeners = new CopyOnWriteArrayList<>();
84 public void submitted(WebServiceWorkerI thread)
86 for (var listener : listeners) listener.submitted(thread);
90 public void submissionFailed(WebServiceWorkerI thread, Exception e)
92 for (var listener : listeners) listener.submissionFailed(thread, e);
96 public void pollFailed(WebServiceWorkerI thread, Exception e) {
97 for (var listener : listeners) listener.pollFailed(thread, e);
101 public void cancelled(WebServiceWorkerI thread)
103 for (var listener : listeners) listener.cancelled(thread);
107 public void done(WebServiceWorkerI thread)
109 for (var listener : listeners) listener.done(thread);
112 public void addListener(WebServiceThreadListenerI listener) {
113 if (!listeners.contains(listener)) {
114 listeners.add(listener);
118 public void removeListener(WebServiceThreadListenerI listener) {
119 listeners.remove(listener);