Как преобразовать метод в асинхронный - Spring, DWR?

В данный момент работаю над веб-приложением. Одна конкретная область / страница этого приложения выполняет определенное время, принимая операции с БД. Текущая структура этой страницы:

1) DWR call from the front end to the backend
2) Front end waits for the backend to return data
3) When data is returned, the callback function is executed in the 
   front end and data is displayed to user in the format needed.

На шаге 2 для обработки и отправки данных бэкэнду требуется много времени. В течение всего этого времени приложение не работает.

Изменение, которое должно быть сделано:

1) Let the user use the application after sending the request in step #1
2) Front end will be populated with data after the backend processes the data and 
   send the details back.
3) When user revisits the page, information from previous request is available.

Я ищу способы сделать это возможным. Не уверен, что для этого есть механизм DWR или Spring. Пожалуйста, направьте меня в правильном направлении, чтобы я мог больше искать правильный код.

1 ответ

Решение

Главный вопрос - какую технологию вы используете для страниц и сколько требуется "ожидания".

  1. Самый простой случай, если браузер может сохранять открытое соединение во время ожидания: это происходит, когда ожидание не слишком велико, и пользователь остается на той же странице. В этом случае сервер предоставляет REST, не обращая внимания на то, кто его потребляет. Большая часть работы будет на стороне клиента, которая должна выполнять асинхронный Ajax - если это DWR, смотрите здесь, если это Spring, то он не вмешивается на стороне клиента, и вы можете использовать любые помощники JavaScript, которые вам нравятся, например, JQuery.

  2. Это усложняется, если ожидание долгое или если пользователь должен получить push-уведомление, даже если он тем временем перешел на другую страницу. В этом случае я бы посоветовал изучить веб-сокеты, отправленные сервером события или механизмы длительного опроса (Google google - есть много примеров и продуктов, некоторые бесплатные, некоторые дорогостоящие). В любом случае, будьте готовы к некоторой кривой обучения здесь.

  3. Что касается требований 3 (быстрый способ просмотра данных при повторном посещении страницы), у меня нет волшебных решений, просто старое доброе кеширование... ваш кеш может быть расположен в разных местах - от клиента до сервера через несколько кеширующий прокси посередине. Очевидно, что нужно учитывать политику обновления кэша - самый простой случай, если вы можете жить с одними и теми же данными "в течение X минут / часов", сложный случай, если вам нужно обновить определенные бизнес-действия.

Другие вопросы по тегам