update author list in license for (JAL-826)
[jalview.git] / src / jalview / ws / jws2 / MsaWSThread.java
index bd86bf0..65873f2 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -37,26 +37,6 @@ import jalview.ws.JobStateSummary;
 import jalview.ws.jws2.dm.JabaWsParamSet;
 import jalview.ws.params.WsParamSetI;
 
-/**
- * <p>
- * Title:
- * </p>
- * 
- * <p>
- * Description:
- * </p>
- * 
- * <p>
- * Copyright: Copyright (c) 2004
- * </p>
- * 
- * <p>
- * Company: Dundee University
- * </p>
- * 
- * @author not attributable
- * @version 1.0
- */
 class MsaWSThread extends AWS2Thread implements WSClientI
 {
   boolean submitGaps = false; // pass sequences including gaps to alignment
@@ -596,10 +576,17 @@ class MsaWSThread extends AWS2Thread implements WSClientI
     updateJobProgress(j);
   }
 
-  protected void updateJobProgress(MsaWSJob j) throws Exception
+  /**
+   * 
+   * @param j
+   * @return true if more job progress data was available
+   * @throws Exception
+   */
+  protected boolean updateJobProgress(MsaWSJob j) throws Exception
   {
     StringBuffer response = j.jobProgress;
     long lastchunk = j.getLastChunk();
+    boolean changed=false;
     do
     {
       j.setLastChunk(lastchunk);
@@ -607,11 +594,13 @@ class MsaWSThread extends AWS2Thread implements WSClientI
               .pullExecStatistics(j.getJobId(), lastchunk);
       if (chunk != null)
       {
+        changed=chunk.getChunk().length()>0;
         response.append(chunk.getChunk());
         lastchunk = chunk.getNextPosition();
       }
       ;
     } while (lastchunk >= 0 && j.getLastChunk() != lastchunk);
+    return changed;
   }
 
   public void StartJob(AWsJob job)
@@ -746,16 +735,40 @@ class MsaWSThread extends AWS2Thread implements WSClientI
         MsaWSJob msjob = ((MsaWSJob) jobs[j]);
         if (jobs[j].isFinished() && msjob.alignment == null)
         {
-          try
-          {
-            updateJobProgress(msjob);
-          } catch (Exception e)
-          {
-            Cache.log
-                    .warn("Exception when retrieving remaining Job progress data for job "
-                            + msjob.getJobId() + " on server " + WsUrl);
-            e.printStackTrace();
-          }
+          boolean jpchanged=false,jpex=false;
+          do {
+            try
+            {
+              jpchanged = updateJobProgress(msjob);
+              jpex=false;
+            } catch (Exception e)
+            {
+              
+              Cache.log
+                      .warn("Exception when retrieving remaining Job progress data for job "
+                              + msjob.getJobId() + " on server " + WsUrl);
+              e.printStackTrace();
+              if (jpex) {
+                // give up polling after two consecutive exceptions
+                jpchanged=false;
+              } else {
+                jpchanged=true;
+              }
+              // set flag remember that we've had an exception.
+              jpex=true;
+            }
+            if (jpchanged)
+            {
+              try
+              {
+                Thread.sleep(jpex ? 400 : 200); // wait a bit longer if we experienced an exception.
+              } catch (Exception ex)
+              {
+              }
+              ;
+            }
+          } while (jpchanged);
+          
           if (Cache.log.isDebugEnabled())
           {
             System.out.println("Job Execution file for job: "