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);
34 executor.schedule(() -> pollJobs(worker), 1, TimeUnit.SECONDS);
37 private void pollJobs(WebServiceWorkerI worker)
44 Cache.log.error("Failed to poll web service jobs.", e);
45 for (WSJob job : worker.getJobs())
47 job.setStatus(WSJobStatus.SERVER_ERROR);
49 wsThreadSupport.pollFailed(worker, e);
54 executor.schedule(() -> pollJobs(worker), 1, TimeUnit.SECONDS);
59 wsThreadSupport.done(worker);
63 private WebServiceThreadSupport wsThreadSupport = new WebServiceThreadSupport();
65 public void addThreadListener(WebServiceThreadListenerI listener)
67 wsThreadSupport.addListener(listener);
70 public void removeThreadListener(WebServiceThreadListenerI listener)
72 wsThreadSupport.removeListener(listener);
75 public void shutdown()
77 executor.shutdownNow();
82 class WebServiceThreadSupport implements WebServiceThreadListenerI
84 List<WebServiceThreadListenerI> listeners = new CopyOnWriteArrayList<>();
87 public void submitted(WebServiceWorkerI thread)
89 for (var listener : listeners)
90 listener.submitted(thread);
94 public void submissionFailed(WebServiceWorkerI thread, Exception e)
96 for (var listener : listeners)
97 listener.submissionFailed(thread, e);
101 public void pollFailed(WebServiceWorkerI thread, Exception e)
103 for (var listener : listeners)
104 listener.pollFailed(thread, e);
108 public void cancelled(WebServiceWorkerI thread)
110 for (var listener : listeners)
111 listener.cancelled(thread);
115 public void done(WebServiceWorkerI thread)
117 for (var listener : listeners)
118 listener.done(thread);
121 public void addListener(WebServiceThreadListenerI listener)
123 if (!listeners.contains(listener))
125 listeners.add(listener);
129 public void removeListener(WebServiceThreadListenerI listener)
131 listeners.remove(listener);