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;
13 import jalview.ws2.WebServiceWorkerI.WSJob;
15 public class WebServiceExecutor
17 private ScheduledExecutorService executor =
18 Executors.newSingleThreadScheduledExecutor();
20 public void submit(final WebServiceWorkerI worker)
22 for (var job : worker.getJobs()) {
23 executor.submit(() -> submitJob(worker, job));
24 executor.schedule(() -> pollJob(worker, job), 1, TimeUnit.SECONDS);
28 private void submitJob(WebServiceWorkerI worker, WSJob job) {
30 job.setJobID(worker.startJob(job).getJobID());
31 job.resetAllowedExceptions();
32 executor.schedule(() -> pollJob(worker, job), 1, TimeUnit.SECONDS);
34 catch (IOException e) {
35 Cache.log.error("Exception occurred during job submission", e);
36 if (!job.deductAllowedExceptions()) {
37 job.setState(WSJobState.SERVER_ERROR);
40 if (!job.getState().isSubmitted()) {
41 executor.schedule(() -> submitJob(worker, job), 5, TimeUnit.SECONDS);
45 private void pollJob(WebServiceWorkerI worker, WSJob job) {
48 job.resetAllowedExceptions();
50 catch (IOException e) {
51 Cache.log.error("Exception occurred duringn job pollign", e);
52 if (!job.deductAllowedExceptions()) {
53 job.setState(WSJobState.SERVER_ERROR);
56 if (!job.getState().isDone()) {
57 executor.schedule(() -> pollJob(worker, job), 1, TimeUnit.SECONDS);
61 public static interface WebServiceThreadListenerI
63 public void threadSubmitted(WebServiceWorkerI thread);
64 public void threadStarted(WebServiceWorkerI thread);
65 public void stateChanged(WebServiceWorkerI thread, WSJobState oldState,
67 public void logAppended(WebServiceWorkerI thread, String text);
68 public void errorLogAppended(WebServiceWorkerI thread, String text);
69 public void cancelled(WebServiceWorkerI thread);
73 List<WebServiceThreadListenerI> listeners = new CopyOnWriteArrayList<>();
75 public void addServiceListener(WebServiceThreadListenerI listener)
77 if (!listeners.contains(listener))
78 listeners.add(listener);
81 public void removeServiceListener(WebServiceThreadListenerI listener)
83 listeners.remove(listener);