синхронизировать опрос ajax с кодом действия java Struts - PullRequest
0 голосов
/ 27 мая 2011

У меня есть действие импорта данных в виде структуры, которое выглядит следующим образом:

public class ImportDataAction extends DispatchAction{

    private static volatile Boolean running = false;
    private static volatile Boolean finished = false;
    private static volatile Boolean observeRunning  = false;

   protected final ActionForward unspecified(final ActionMapping mapping, final ActionForm  form,final HttpServletRequest request,final HttpServletResponse response) throws Exception {
      if (import already in progress) {
       observeRunning = true;
       return  doObserve(.......);
      }

      return startImport(......);
     }

     private ActionForward startImport(.....){
        if (!running && !finished) {
          startImport = true;
          running = true;
    }
        run();
      }

      private void run() {
    try {
        doImport();
    } catch (final Exception e) { 
    } finally {
        running = false;
        finished = true;
    }

    try {
// Wait for observing processes to fetch the status (reload-interval of the jsp is 3 seconds)
        Thread.sleep(5000);
    } catch (final Exception e) { 
    } finally {
        finished = false;
        observeRunning = false;
            }
      }
       }

В переднем конце происходит опрос ajax, который опрашивается каждые 1 секунду. У меня есть около 5 ссылок на странице пользовательского интерфейса, и, нажав на ссылку, начинается импорт из файла данных в базу данных моего приложения. Каждая ссылка загружает разные файлы данных.

В настоящее время, когда пользователь нажимает на ссылку, начинается импорт. Если он снова нажимает на некоторые другие ссылки, то пользователь перенаправляется на страницу, сообщающую, что импорт уже выполняется, поэтому подождите.

Так что в настоящее время я сталкиваюсь с проблемой синхронизации ajax-опроса с действием импорта. Даже если импорт завершен, и если я нажму на новую ссылку, я перенаправлюсь на страницу, которая говорит, что какой-то импорт выполняется. Это происходит не каждый раз, но это происходит пару раз. Я подозреваю, что это из-за Thread.sleep(5000).

Импорт данных является однопоточным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...