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 = Executors
17 .newSingleThreadScheduledExecutor();
19 public void submit(final WebServiceWorkerI worker)
21 executor.submit(() -> {
25 wsThreadSupport.submitted(worker);
28 Cache.log.error("Failed to submit web service jobs.", e);
29 wsThreadSupport.submissionFailed(worker, e);
32 executor.schedule(() -> pollJobs(worker), 1, TimeUnit.SECONDS);
36 private void pollJobs(WebServiceWorkerI worker)
43 Cache.log.error("Failed to poll web service jobs.", e);
44 for (WSJob job : worker.getJobs())
46 job.setStatus(WSJobStatus.SERVER_ERROR);
48 wsThreadSupport.pollFailed(worker, e);
53 executor.schedule(() -> pollJobs(worker), 1, TimeUnit.SECONDS);
58 wsThreadSupport.done(worker);
62 private WebServiceThreadSupport wsThreadSupport = new WebServiceThreadSupport();
64 public void addThreadListener(WebServiceThreadListenerI listener)
66 wsThreadSupport.addListener(listener);
69 public void removeThreadListener(WebServiceThreadListenerI listener)
71 wsThreadSupport.removeListener(listener);
74 public void shutdown()
76 executor.shutdownNow();
81 class WebServiceThreadSupport implements WebServiceThreadListenerI
83 List<WebServiceThreadListenerI> listeners = new CopyOnWriteArrayList<>();
86 public void submitted(WebServiceWorkerI thread)
88 for (var listener : listeners)
89 listener.submitted(thread);
93 public void submissionFailed(WebServiceWorkerI thread, Exception e)
95 for (var listener : listeners)
96 listener.submissionFailed(thread, e);
100 public void pollFailed(WebServiceWorkerI thread, Exception e)
102 for (var listener : listeners)
103 listener.pollFailed(thread, e);
107 public void cancelled(WebServiceWorkerI thread)
109 for (var listener : listeners)
110 listener.cancelled(thread);
114 public void done(WebServiceWorkerI thread)
116 for (var listener : listeners)
117 listener.done(thread);
120 public void addListener(WebServiceThreadListenerI listener)
122 if (!listeners.contains(listener))
124 listeners.add(listener);
128 public void removeListener(WebServiceThreadListenerI listener)
130 listeners.remove(listener);